System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 970fda4d342b09016f706efd7c943f7f0a75394f:


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 38 2e 30  sion = "1.0.98.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 20 7c 7c  _40 || NET_45 ||
0a30: 20 4e 45 54 5f 34 35 31 29 20 26 26 20 21 50 4c   NET_451) && !PL
0a40: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
0a50: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 70 72 69  AMEWORK..    pri
0a60: 76 61 74 65 20 62 6f 6f 6c 20 5f 62 75 69 6c 64  vate bool _build
0a70: 69 6e 67 53 63 68 65 6d 61 3b 0d 0a 23 65 6e 64  ingSchema;..#end
0a80: 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  if....    /// <s
0a90: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
0aa0: 20 54 68 65 20 75 73 65 72 2d 64 65 66 69 6e 65   The user-define
0ab0: 64 20 66 75 6e 63 74 69 6f 6e 73 20 72 65 67 69  d functions regi
0ac0: 73 74 65 72 65 64 20 6f 6e 20 74 68 69 73 20 63  stered on this c
0ad0: 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f  onnection..    /
0ae0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0af0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 4c 69 73     protected Lis
0b00: 74 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  t<SQLiteFunction
0b10: 3e 20 5f 66 75 6e 63 74 69 6f 6e 73 3b 0d 0a 0d  > _functions;...
0b20: 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52  .#if INTEROP_VIR
0b30: 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20  TUAL_TABLE..    
0b40: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0b50: 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c     /// The modul
0b60: 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
0b70: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
0b80: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
0b90: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0ba0: 63 74 65 64 20 44 69 63 74 69 6f 6e 61 72 79 3c  cted Dictionary<
0bb0: 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f  string, SQLiteMo
0bc0: 64 75 6c 65 3e 20 5f 6d 6f 64 75 6c 65 73 3b 0d  dule> _modules;.
0bd0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0c40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0c50: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ry>..    /// Con
0c60: 73 74 72 75 63 74 73 20 74 68 65 20 6f 62 6a 65  structs the obje
0c70: 63 74 20 75 73 65 64 20 74 6f 20 69 6e 74 65 72  ct used to inter
0c80: 61 63 74 20 77 69 74 68 20 74 68 65 20 53 51 4c  act with the SQL
0c90: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
0ca0: 0d 0a 20 20 20 20 2f 2f 2f 20 75 73 69 6e 67 20  ..    /// using 
0cb0: 74 68 65 20 55 54 46 2d 38 20 74 65 78 74 20 65  the UTF-8 text e
0cc0: 6e 63 6f 64 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f  ncoding...    //
0cd0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0ce0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
0cf0: 65 3d 22 66 6d 74 22 3e 0d 0a 20 20 20 20 2f 2f  e="fmt">..    //
0d00: 2f 20 54 68 65 20 44 61 74 65 54 69 6d 65 20 66  / The DateTime f
0d10: 6f 72 6d 61 74 20 74 6f 20 62 65 20 75 73 65 64  ormat to be used
0d20: 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67   when converting
0d30: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 73 20 74   string values t
0d40: 6f 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 44 61 74  o a..    /// Dat
0d50: 65 54 69 6d 65 20 61 6e 64 20 62 69 6e 64 69 6e  eTime and bindin
0d60: 67 20 44 61 74 65 54 69 6d 65 20 70 61 72 61 6d  g DateTime param
0d70: 65 74 65 72 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  eters...    /// 
0d80: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0d90: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6b  / <param name="k
0da0: 69 6e 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ind">..    /// T
0db0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 61  he <see cref="Da
0dc0: 74 65 54 69 6d 65 4b 69 6e 64 22 20 2f 3e 20 74  teTimeKind" /> t
0dd0: 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63  o be used when c
0de0: 72 65 61 74 69 6e 67 20 44 61 74 65 54 69 6d 65  reating DateTime
0df0: 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73  ..    /// values
0e00: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
0e10: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
0e20: 72 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 53 74 72  ram name="fmtStr
0e30: 69 6e 67 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ing">..    /// T
0e40: 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
0e50: 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
0e60: 20 70 61 72 73 69 6e 67 20 61 6e 64 20 66 6f 72   parsing and for
0e70: 6d 61 74 74 69 6e 67 20 44 61 74 65 54 69 6d 65  matting DateTime
0e80: 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73  ..    /// values
0e90: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
0ea0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
0eb0: 72 61 6d 20 6e 61 6d 65 3d 22 64 62 22 3e 0d 0a  ram name="db">..
0ec0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
0ed0: 76 65 20 68 61 6e 64 6c 65 20 74 6f 20 62 65 20  ve handle to be 
0ee0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
0ef0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
0f00: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
0f10: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
0f20: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
0f30: 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20  "fileName">..   
0f40: 20 2f 2f 2f 20 54 68 65 20 66 75 6c 6c 79 20 71   /// The fully q
0f50: 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61  ualified file na
0f60: 6d 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  me associated wi
0f70: 74 68 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d  th <paramref nam
0f80: 65 3d 22 64 62 20 22 2f 3e 2e 0d 0a 20 20 20 20  e="db "/>...    
0f90: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
0fa0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
0fb0: 65 3d 22 6f 77 6e 48 61 6e 64 6c 65 22 3e 0d 0a  e="ownHandle">..
0fc0: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
0fd0: 20 69 66 20 74 68 65 20 6e 65 77 6c 79 20 63 72   if the newly cr
0fe0: 65 61 74 65 64 20 6f 62 6a 65 63 74 20 69 6e 73  eated object ins
0ff0: 74 61 6e 63 65 20 77 69 6c 6c 20 6e 65 65 64 20  tance will need 
1000: 74 6f 20 64 69 73 70 6f 73 65 0d 0a 20 20 20 20  to dispose..    
1010: 2f 2f 2f 20 6f 66 20 3c 70 61 72 61 6d 72 65 66  /// of <paramref
1020: 20 6e 61 6d 65 3d 22 64 62 22 20 2f 3e 20 77 68   name="db" /> wh
1030: 65 6e 20 69 74 20 69 73 20 6e 6f 20 6c 6f 6e 67  en it is no long
1040: 65 72 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20  er needed...    
1050: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1060: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
1070: 65 33 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  e3(..        SQL
1080: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66  iteDateFormats f
1090: 6d 74 2c 0d 0a 20 20 20 20 20 20 20 20 44 61 74  mt,..        Dat
10a0: 65 54 69 6d 65 4b 69 6e 64 20 6b 69 6e 64 2c 0d  eTimeKind kind,.
10b0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
10c0: 66 6d 74 53 74 72 69 6e 67 2c 0d 0a 20 20 20 20  fmtString,..    
10d0: 20 20 20 20 49 6e 74 50 74 72 20 64 62 2c 0d 0a      IntPtr db,..
10e0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
10f0: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
1100: 20 20 62 6f 6f 6c 20 6f 77 6e 48 61 6e 64 6c 65    bool ownHandle
1110: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
1120: 20 20 20 3a 20 62 61 73 65 28 66 6d 74 2c 20 6b     : base(fmt, k
1130: 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e 67 29 0d  ind, fmtString).
1140: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
1150: 69 66 20 28 64 62 20 21 3d 20 49 6e 74 50 74 72  if (db != IntPtr
1160: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
1170: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  {..            _
1180: 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  sql = new SQLite
1190: 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
11a0: 28 64 62 2c 20 6f 77 6e 48 61 6e 64 6c 65 29 3b  (db, ownHandle);
11b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 66  ..            _f
11c0: 69 6c 65 4e 61 6d 65 20 3d 20 66 69 6c 65 4e 61  ileName = fileNa
11d0: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
11e0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
11f0: 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75  ion.OnChanged(nu
1200: 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69  ll, new Connecti
1210: 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  onEventArgs(..  
1220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
1230: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  LiteConnectionEv
1240: 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69  entType.NewCriti
1250: 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c  calHandle, null,
1260: 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
1270: 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75          null, nu
1280: 6c 6c 2c 20 5f 73 71 6c 2c 20 66 69 6c 65 4e 61  ll, _sql, fileNa
1290: 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  me, new object[]
12a0: 20 7b 20 66 6d 74 2c 20 6b 69 6e 64 2c 0d 0a 20   { fmt, kind,.. 
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
12c0: 6d 74 53 74 72 69 6e 67 2c 20 64 62 2c 20 66 69  mtString, db, fi
12d0: 6c 65 4e 61 6d 65 2c 20 6f 77 6e 48 61 6e 64 6c  leName, ownHandl
12e0: 65 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  e }));..        
12f0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1360: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49  ...    #region I
1370: 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
1380: 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
1390: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64    private bool d
13a0: 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 70 72  isposed;..    pr
13b0: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
13c0: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
13d0: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 23  row */..    {..#
13e0: 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50  if THROW_ON_DISP
13f0: 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20 69 66  OSED..        if
1400: 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20   (disposed)..   
1410: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1420: 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65  ew ObjectDispose
1430: 64 45 78 63 65 70 74 69 6f 6e 28 74 79 70 65 6f  dException(typeo
1440: 66 28 53 51 4c 69 74 65 33 29 2e 4e 61 6d 65 29  f(SQLite3).Name)
1450: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
1460: 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f  ////////////////
14c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70  ///////....    p
14d0: 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64  rotected overrid
14e0: 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  e void Dispose(b
14f0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
1500: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
1510: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
1520: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1530: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
1540: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1550: 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20 28            //if (
1560: 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
1570: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b 0d              //{.
1580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1590: 20 2f 2f 20 20 20 20 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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
15c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
15d0: 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
15e0: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
15f0: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
1600: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1630: 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
1640: 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20       //}....    
1650: 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1680: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1690: 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75      // release u
16a0: 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63  nmanaged resourc
16b0: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
16c0: 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f  //....#if INTERO
1700: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
1710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1720: 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 73 28   DisposeModules(
1730: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
1740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6c                Cl
1750: 6f 73 65 28 66 61 6c 73 65 29 3b 20 2f 2a 20 44  ose(false); /* D
1760: 69 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e 6f 74  isposing, cannot
1770: 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a 20 20 20 20   throw. */..    
1780: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1790: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
17a0: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b  nally..        {
17b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61  ..            ba
17c0: 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73 70 6f  se.Dispose(dispo
17d0: 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sing);....      
17e0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
17f0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 45        // NOTE: E
1800: 76 65 72 79 74 68 69 6e 67 20 73 68 6f 75 6c 64  verything should
1810: 20 62 65 20 66 75 6c 6c 79 20 64 69 73 70 6f 73   be fully dispos
1820: 65 64 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74  ed at this point
1830: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1840: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  /..            d
1850: 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d  isposed = true;.
1860: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1870: 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
1880: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
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 2f 2f 2f  ////////////////
18e0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20  ////////....#if 
18f0: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
1900: 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c  TABLE..    /// <
1910: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1920: 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 61 74  / This method at
1930: 74 65 6d 70 74 73 20 74 6f 20 64 69 73 70 6f 73  tempts to dispos
1940: 65 20 6f 66 20 61 6c 6c 20 74 68 65 20 3c 73 65  e of all the <se
1950: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f  e cref="SQLiteMo
1960: 64 75 6c 65 22 20 2f 3e 20 64 65 72 69 76 65 64  dule" /> derived
1970: 0d 0a 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63 74  ..    /// object
1980: 20 69 6e 73 74 61 6e 63 65 73 20 63 75 72 72 65   instances curre
1990: 6e 74 6c 79 20 61 73 73 6f 63 69 61 74 65 64 20  ntly associated 
19a0: 77 69 74 68 20 74 68 65 20 6e 61 74 69 76 65 20  with the native 
19b0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
19c0: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
19d0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
19e0: 69 76 61 74 65 20 76 6f 69 64 20 44 69 73 70 6f  ivate void Dispo
19f0: 73 65 4d 6f 64 75 6c 65 73 28 29 0d 0a 20 20 20  seModules()..   
1a00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a   {..        //..
1a10: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1a20: 20 49 66 20 61 6e 79 20 6d 6f 64 75 6c 65 73 20   If any modules 
1a30: 77 65 72 65 20 63 72 65 61 74 65 64 2c 20 61 74  were created, at
1a40: 74 65 6d 70 74 20 74 6f 20 64 69 73 70 6f 73 65  tempt to dispose
1a50: 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   of..        // 
1a60: 20 20 20 20 20 20 74 68 65 6d 20 6e 6f 77 2e 20        them now. 
1a70: 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 64 65   This code is de
1a80: 73 69 67 6e 65 64 20 74 6f 20 61 76 6f 69 64 20  signed to avoid 
1a90: 74 68 72 6f 77 69 6e 67 0d 0a 20 20 20 20 20 20  throwing..      
1aa0: 20 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70    //       excep
1ab0: 74 69 6f 6e 73 20 75 6e 6c 65 73 73 20 74 68 65  tions unless the
1ac0: 20 44 69 73 70 6f 73 65 20 6d 65 74 68 6f 64 20   Dispose method 
1ad0: 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 0d 0a 20  of the module.. 
1ae0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1af0: 69 74 73 65 6c 66 20 74 68 72 6f 77 73 20 61 6e  itself throws an
1b00: 20 65 78 63 65 70 74 69 6f 6e 2e 0d 0a 20 20 20   exception...   
1b10: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1b20: 20 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20 21 3d   if (_modules !=
1b30: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1b40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  {..            f
1b50: 6f 72 65 61 63 68 20 28 4b 65 79 56 61 6c 75 65  oreach (KeyValue
1b60: 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 53 51 4c  Pair<string, SQL
1b70: 69 74 65 4d 6f 64 75 6c 65 3e 20 70 61 69 72 20  iteModule> pair 
1b80: 69 6e 20 5f 6d 6f 64 75 6c 65 73 29 0d 0a 20 20  in _modules)..  
1b90: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
1bb0: 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65  iteModule module
1bc0: 20 3d 20 70 61 69 72 2e 56 61 6c 75 65 3b 0d 0a   = pair.Value;..
1bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1be0: 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
1bf0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1c00: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
1c10: 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
1c20: 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44          module.D
1c30: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
1c40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1c50: 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73          _modules
1c60: 2e 43 6c 65 61 72 28 29 3b 0d 0a 20 20 20 20 20  .Clear();..     
1c70: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e     }..    }..#en
1c80: 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  dif....    /////
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 2f  ////////////////
1ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1cf0: 20 20 2f 2f 20 49 74 20 69 73 6e 27 74 20 6e 65    // It isn't ne
1d00: 63 65 73 73 61 72 79 20 74 6f 20 63 6c 65 61 6e  cessary to clean
1d10: 75 70 20 61 6e 79 20 66 75 6e 63 74 69 6f 6e 73  up any functions
1d20: 20 77 65 27 76 65 20 72 65 67 69 73 74 65 72 65   we've registere
1d30: 64 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 6e 65  d.  If the conne
1d40: 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 20 67 6f  ction..    // go
1d50: 65 73 20 74 6f 20 74 68 65 20 70 6f 6f 6c 20 61  es to the pool a
1d60: 6e 64 20 69 73 20 72 65 73 75 72 72 65 63 74 65  nd is resurrecte
1d70: 64 20 6c 61 74 65 72 2c 20 72 65 2d 72 65 67 69  d later, re-regi
1d80: 73 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73  stered functions
1d90: 20 77 69 6c 6c 20 6f 76 65 72 77 72 69 74 65 20   will overwrite 
1da0: 74 68 65 0d 0a 20 20 20 20 2f 2f 20 70 72 65 76  the..    // prev
1db0: 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 2e 20  ious functions. 
1dc0: 20 54 68 65 20 53 51 4c 69 74 65 46 75 6e 63 74   The SQLiteFunct
1dd0: 69 6f 6e 43 6f 6f 6b 69 65 48 61 6e 64 6c 65 20  ionCookieHandle 
1de0: 77 69 6c 6c 20 74 61 6b 65 20 63 61 72 65 20 6f  will take care o
1df0: 66 20 66 72 65 65 69 6e 67 20 75 6e 6d 61 6e 61  f freeing unmana
1e00: 67 65 64 0d 0a 20 20 20 20 2f 2f 20 72 65 73 6f  ged..    // reso
1e10: 75 72 63 65 73 20 62 65 6c 6f 6e 67 69 6e 67 20  urces belonging 
1e20: 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c  to the previousl
1e30: 79 2d 72 65 67 69 73 74 65 72 65 64 20 66 75 6e  y-registered fun
1e40: 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 69 6e 74  ctions...    int
1e50: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
1e60: 6f 69 64 20 43 6c 6f 73 65 28 62 6f 6f 6c 20 63  oid Close(bool c
1e70: 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d  anThrow)..    {.
1e80: 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20  .      if (_sql 
1e90: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
1ea0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
1eb0: 28 21 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c 65  (!_sql.OwnHandle
1ec0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
1ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
1ee0: 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ql = null;..    
1ef0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1f00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
1f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
1f20: 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20  _usePool)..     
1f30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f40: 20 20 20 20 20 20 69 66 20 28 53 51 4c 69 74 65        if (SQLite
1f50: 42 61 73 65 2e 52 65 73 65 74 43 6f 6e 6e 65 63  Base.ResetConnec
1f60: 74 69 6f 6e 28 5f 73 71 6c 2c 20 5f 73 71 6c 2c  tion(_sql, _sql,
1f70: 20 63 61 6e 54 68 72 6f 77 29 29 0d 0a 20 20 20   canThrow))..   
1f80: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69             {..#i
1f90: 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  f INTEROP_VIRTUA
1fa0: 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20  L_TABLE..       
1fb0: 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f             Dispo
1fc0: 73 65 4d 6f 64 75 6c 65 73 28 29 3b 0d 0a 23 65  seModules();..#e
1fd0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
1fe0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1ff0: 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41  ConnectionPool.A
2000: 64 64 28 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 73  dd(_fileName, _s
2010: 71 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e  ql, _poolVersion
2020: 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  );....#if !NET_C
2030: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
2040: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
2050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2060: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
2070: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
2080: 43 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 53 75 63  Close (Pool) Suc
2090: 63 65 73 73 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c  cess: {0}", _sql
20a0: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
20b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69             }..#i
20c0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
20d0: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
20e0: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
20f0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
2100: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2120: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74  ace.WriteLine(St
2130: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43 6c 6f  ring.Format("Clo
2140: 73 65 20 28 50 6f 6f 6c 29 20 46 61 69 6c 75 72  se (Pool) Failur
2150: 65 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29 29 3b  e: {0}", _sql));
2160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2170: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
2180: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2190: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
21a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21b0: 20 20 20 5f 73 71 6c 2e 44 69 73 70 6f 73 65 28     _sql.Dispose(
21c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
21d0: 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20  .          _sql 
21e0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d  = null;..      }
21f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2260: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
2270: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74  ry>..    /// Att
2280: 65 6d 70 74 73 20 74 6f 20 69 6e 74 65 72 72 75  empts to interru
2290: 70 74 20 74 68 65 20 71 75 65 72 79 20 63 75 72  pt the query cur
22a0: 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
22b0: 20 6f 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74   on the associat
22c0: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69  ed..    /// nati
22d0: 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ve database conn
22e0: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
22f0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2300: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
2310: 64 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28 29  de void Cancel()
2320: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 74  ..    {..      t
2330: 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ry..      {..   
2340: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
2350: 6e 67 2e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ng...      }..  
2360: 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e      finally /* N
2370: 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72  OTE: Thread.Abor
2380: 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20  t() protection. 
2390: 2a 2f 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  */..      {..   
23a0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
23b0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
23c0: 5f 69 6e 74 65 72 72 75 70 74 28 5f 73 71 6c 29  _interrupt(_sql)
23d0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
23e0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
23f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
2400: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 62 69  This function bi
2410: 6e 64 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e  nds a user-defin
2420: 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74  ed function to t
2430: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  he connection...
2440: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2450: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
2460: 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f  am name="functio
2470: 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20 20  nAttribute">..  
2480: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
2490: 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74  ref="SQLiteFunct
24a0: 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f 3e 20  ionAttribute"/> 
24b0: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
24c0: 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20  containing..    
24d0: 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61 74 61  /// the metadata
24e0: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
24f0: 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a  n to be bound...
2500: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2510: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
2520: 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 22   name="function"
2530: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  >..    /// The <
2540: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
2550: 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62 6a 65  Function"/> obje
2560: 63 74 20 69 6e 73 74 61 6e 63 65 20 74 68 61 74  ct instance that
2570: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0d   implements the.
2580: 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f  .    /// functio
2590: 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a  n to be bound...
25a0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
25b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
25c0: 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a   name="flags">..
25d0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67      /// The flag
25e0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
25f0: 68 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e  h the parent con
2600: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 0d  nection object..
2610: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
2620: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
2630: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
2640: 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  ndFunction(..   
2650: 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74       SQLiteFunct
2660: 69 6f 6e 41 74 74 72 69 62 75 74 65 20 66 75 6e  ionAttribute fun
2670: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 0d  ctionAttribute,.
2680: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46  .        SQLiteF
2690: 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  unction function
26a0: 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ,..        SQLit
26b0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
26c0: 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20   flags..        
26d0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
26e0: 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e    SQLiteFunction
26f0: 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 74 68  .BindFunction(th
2700: 69 73 2c 20 66 75 6e 63 74 69 6f 6e 41 74 74 72  is, functionAttr
2710: 69 62 75 74 65 2c 20 66 75 6e 63 74 69 6f 6e 2c  ibute, function,
2720: 20 66 6c 61 67 73 29 3b 0d 0a 0d 0a 20 20 20 20   flags);....    
2730: 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f      if (_functio
2740: 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
2750: 20 20 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69           _functi
2760: 6f 6e 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 53  ons = new List<S
2770: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 28 29  QLiteFunction>()
2780: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 66 75  ;....        _fu
2790: 6e 63 74 69 6f 6e 73 2e 41 64 64 28 66 75 6e 63  nctions.Add(func
27a0: 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  tion);..    }...
27b0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
27c0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 56 65  erride string Ve
27d0: 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20  rsion..    {..  
27e0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
27f0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2800: 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d   SQLiteVersion;.
2810: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
2820: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2830: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 65 72  override int Ver
2840: 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20  sionNumber..    
2850: 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20  {..      get..  
2860: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
2870: 65 74 75 72 6e 20 53 51 4c 69 74 65 56 65 72 73  eturn SQLiteVers
2880: 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20  ionNumber;..    
2890: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
28a0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
28b0: 63 20 73 74 72 69 6e 67 20 44 65 66 69 6e 65 43  c string DefineC
28c0: 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 7b 0d  onstants..    {.
28d0: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
28e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28f0: 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64       StringBuild
2900: 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  er result = new 
2910: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b  StringBuilder();
2920: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4c  ..            IL
2930: 69 73 74 3c 73 74 72 69 6e 67 3e 20 6c 69 73 74  ist<string> list
2940: 20 3d 20 53 51 4c 69 74 65 44 65 66 69 6e 65 43   = SQLiteDefineC
2950: 6f 6e 73 74 61 6e 74 73 2e 4f 70 74 69 6f 6e 4c  onstants.OptionL
2960: 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ist;....        
2970: 20 20 20 20 69 66 20 28 6c 69 73 74 20 21 3d 20      if (list != 
2980: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2990: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29a0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 73        foreach (s
29b0: 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 20 69 6e  tring element in
29c0: 20 6c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20   list)..        
29d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
29f0: 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75  f (element == nu
2a00: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2a20: 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
2a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2a40: 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20   (result.Length 
2a50: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
2a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2a70: 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29  sult.Append(' ')
2a80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2a90: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
2aa0: 41 70 70 65 6e 64 28 65 6c 65 6d 65 6e 74 29 3b  Append(element);
2ab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ac0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2ad0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2ae0: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e    return result.
2af0: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
2b00: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2b10: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
2b20: 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69  atic string SQLi
2b30: 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b  teVersion..    {
2b40: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
2b50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
2b60: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
2b70: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
2b80: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69  thods.sqlite3_li
2b90: 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b  bversion(), -1);
2ba0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2bb0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2bc0: 20 73 74 61 74 69 63 20 69 6e 74 20 53 51 4c 69   static int SQLi
2bd0: 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 0d  teVersionNumber.
2be0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
2bf0: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2c00: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
2c10: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
2c20: 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f  qlite3_libversio
2c30: 6e 5f 6e 75 6d 62 65 72 28 29 3b 0d 0a 20 20 20  n_number();..   
2c40: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
2c50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
2c60: 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65  ic string SQLite
2c70: 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d  SourceId..    {.
2c80: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
2c90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
2ca0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
2cb0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
2cc0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 6f 75  hods.sqlite3_sou
2cd0: 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 20  rceid(), -1);.. 
2ce0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2cf0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
2d00: 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69  atic string SQLi
2d10: 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73  teCompileOptions
2d20: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
2d30: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
2d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72  .            Str
2d50: 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c  ingBuilder resul
2d60: 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  t = new StringBu
2d70: 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20  ilder();..      
2d80: 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20        int index 
2d90: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
2da0: 20 20 49 6e 74 50 74 72 20 7a 56 61 6c 75 65 20    IntPtr zValue 
2db0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
2dc0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
2dd0: 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28  mpileoption_get(
2de0: 69 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20 20  index++);....   
2df0: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
2e00: 7a 56 61 6c 75 65 20 21 3d 20 49 6e 74 50 74 72  zValue != IntPtr
2e10: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
2e20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2e30: 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c         if (resul
2e40: 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20  t.Length > 0).. 
2e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e60: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
2e70: 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  (' ');....      
2e80: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
2e90: 2e 41 70 70 65 6e 64 28 55 54 46 38 54 6f 53 74  .Append(UTF8ToSt
2ea0: 72 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31 29  ring(zValue, -1)
2eb0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2ec0: 20 20 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e 73      zValue = Uns
2ed0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2ee0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65  .sqlite3_compile
2ef0: 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65 78  option_get(index
2f00: 2b 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ++);..          
2f10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2f20: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
2f30: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
2f40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
2f50: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
2f60: 74 61 74 69 63 20 73 74 72 69 6e 67 20 49 6e 74  tatic string Int
2f70: 65 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20 20  eropVersion..   
2f80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
2f90: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
2fa0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
2fb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2fc0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
2fd0: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
2fe0: 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 6c 69  thods.interop_li
2ff0: 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b  bversion(), -1);
3000: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
3010: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
3020: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
3030: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
3040: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
3050: 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72 6f  ic string Intero
3060: 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b  pSourceId..    {
3070: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20  ..        get.. 
3080: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53         {..#if !S
3090: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30b0: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
30c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
30d0: 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 73 6f 75 72  ods.interop_sour
30e0: 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 23 65  ceid(), -1);..#e
30f0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
3100: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23   return null;..#
3110: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
3120: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
3130: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73  nternal static s
3140: 74 72 69 6e 67 20 49 6e 74 65 72 6f 70 43 6f 6d  tring InteropCom
3150: 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20  pileOptions..   
3160: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
3170: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
3180: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
3190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 74  ..            St
31a0: 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75  ringBuilder resu
31b0: 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42  lt = new StringB
31c0: 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20  uilder();..     
31d0: 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78         int index
31e0: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20   = 0;..         
31f0: 20 20 20 49 6e 74 50 74 72 20 7a 56 61 6c 75 65     IntPtr zValue
3200: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
3210: 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 63  ethods.interop_c
3220: 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
3230: 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20  (index++);....  
3240: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
3250: 28 7a 56 61 6c 75 65 20 21 3d 20 49 6e 74 50 74  (zValue != IntPt
3260: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
3270: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3280: 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
3290: 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  lt.Length > 0)..
32a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
32c0: 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  d(' ');....     
32d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
32e0: 74 2e 41 70 70 65 6e 64 28 55 54 46 38 54 6f 53  t.Append(UTF8ToS
32f0: 74 72 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31  tring(zValue, -1
3300: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
3310: 20 20 20 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e       zValue = Un
3320: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
3330: 73 2e 69 6e 74 65 72 6f 70 5f 63 6f 6d 70 69 6c  s.interop_compil
3340: 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65  eoption_get(inde
3350: 78 2b 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  x++);..         
3360: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3370: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
3380: 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 23  t.ToString();..#
3390: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
33a0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
33b0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
33c0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
33d0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
33e0: 65 20 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69  e bool AutoCommi
33f0: 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  t..    {..      
3400: 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  get..      {..  
3410: 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 73 41        return IsA
3420: 75 74 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c 20  utocommit(_sql, 
3430: 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  _sql);..      }.
3440: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
3450: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
3460: 6c 6f 6e 67 20 4c 61 73 74 49 6e 73 65 72 74 52  long LastInsertR
3470: 6f 77 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  owId..    {..   
3480: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
3490: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
34a0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
34b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
34c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
34d0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74  ods.sqlite3_last
34e0: 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 5f 73  _insert_rowid(_s
34f0: 71 6c 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ql);..#elif !SQL
3500: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
3510: 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 49 64        long rowId
3520: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 55   = 0;..        U
3530: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
3540: 64 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  ds.sqlite3_last_
3550: 69 6e 73 65 72 74 5f 72 6f 77 69 64 5f 69 6e 74  insert_rowid_int
3560: 65 72 6f 70 28 5f 73 71 6c 2c 20 72 65 66 20 72  erop(_sql, ref r
3570: 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20  owId);..        
3580: 72 65 74 75 72 6e 20 72 6f 77 49 64 3b 0d 0a 23  return rowId;..#
3590: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
35a0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
35b0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
35c0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
35d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
35e0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
35f0: 69 64 65 20 69 6e 74 20 43 68 61 6e 67 65 73 0d  ide int Changes.
3600: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
3610: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  t..      {..#if 
3620: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
3630: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
3640: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
3650: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61  hods.sqlite3_cha
3660: 6e 67 65 73 5f 69 6e 74 65 72 6f 70 28 5f 73 71  nges_interop(_sq
3670: 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  l);..#else..    
3680: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
3690: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
36a0: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 5f  qlite3_changes(_
36b0: 73 71 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  sql);..#endif.. 
36c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
36d0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
36e0: 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f  erride long Memo
36f0: 72 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20  ryUsed..    {.. 
3700: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
3710: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3720: 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63     return Static
3730: 4d 65 6d 6f 72 79 55 73 65 64 3b 0d 0a 20 20 20  MemoryUsed;..   
3740: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
3750: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
3760: 61 74 69 63 20 6c 6f 6e 67 20 53 74 61 74 69 63  atic long Static
3770: 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20 20  MemoryUsed..    
3780: 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a  {..        get..
3790: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
37a0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
37b0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
37c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
37d0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
37e0: 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79  s.sqlite3_memory
37f0: 5f 75 73 65 64 28 29 3b 0d 0a 23 65 6c 69 66 20  _used();..#elif 
3800: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
3810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f  ..            lo
3820: 6e 67 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20  ng bytes = 0;.. 
3830: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
3840: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
3850: 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73  qlite3_memory_us
3860: 65 64 5f 69 6e 74 65 72 6f 70 28 72 65 66 20 62  ed_interop(ref b
3870: 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  ytes);..        
3880: 20 20 20 20 72 65 74 75 72 6e 20 62 79 74 65 73      return bytes
3890: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
38a0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
38b0: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
38c0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
38d0: 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  if..        }.. 
38e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
38f0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
3900: 6e 67 20 4d 65 6d 6f 72 79 48 69 67 68 77 61 74  ng MemoryHighwat
3910: 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  er..    {..     
3920: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
3930: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
3940: 65 74 75 72 6e 20 53 74 61 74 69 63 4d 65 6d 6f  eturn StaticMemo
3950: 72 79 48 69 67 68 77 61 74 65 72 3b 0d 0a 20 20  ryHighwater;..  
3960: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
3970: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
3980: 74 61 74 69 63 20 6c 6f 6e 67 20 53 74 61 74 69  tatic long Stati
3990: 63 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72  cMemoryHighwater
39a0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
39b0: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
39c0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
39d0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
39e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
39f0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
3a00: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3a10: 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72  memory_highwater
3a20: 28 30 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  (0);..#elif !SQL
3a30: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
3a40: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 62            long b
3a50: 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ytes = 0;..     
3a60: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
3a70: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
3a80: 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61  e3_memory_highwa
3a90: 74 65 72 5f 69 6e 74 65 72 6f 70 28 30 2c 20 72  ter_interop(0, r
3aa0: 65 66 20 62 79 74 65 73 29 3b 0d 0a 20 20 20 20  ef bytes);..    
3ab0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62          return b
3ac0: 79 74 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ytes;..#else..  
3ad0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
3ae0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
3af0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
3b00: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
3b10: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
3b20: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
3b30: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6e     /// Returns n
3b40: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 75  on-zero if the u
3b50: 6e 64 65 72 6c 79 69 6e 67 20 6e 61 74 69 76 65  nderlying native
3b60: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
3b70: 6c 65 20 69 73 20 6f 77 6e 65 64 0d 0a 20 20 20  le is owned..   
3b80: 20 2f 2f 2f 20 62 79 20 74 68 69 73 20 69 6e 73   /// by this ins
3b90: 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  tance...    /// 
3ba0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
3bb0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
3bc0: 65 20 62 6f 6f 6c 20 4f 77 6e 48 61 6e 64 6c 65  e bool OwnHandle
3bd0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
3be0: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
3bf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
3c00: 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (_sql == null)..
3c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c20: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
3c30: 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f  Exception("no co
3c40: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
3c50: 61 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 0d 0a  available");....
3c60: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3c70: 72 6e 20 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c  rn _sql.OwnHandl
3c80: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
3c90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
3ca0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
3cb0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65  LiteErrorCode Se
3cc0: 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 62 6f  tMemoryStatus(bo
3cd0: 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ol value)..    {
3ce0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
3cf0: 20 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79   StaticSetMemory
3d00: 53 74 61 74 75 73 28 76 61 6c 75 65 29 3b 0d 0a  Status(value);..
3d10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
3d20: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c  ernal static SQL
3d30: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61  iteErrorCode Sta
3d40: 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74 61 74  ticSetMemoryStat
3d50: 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a  us(bool value)..
3d60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
3d70: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
3d80: 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
3d90: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3da0: 63 6f 6e 66 69 67 5f 69 6e 74 28 0d 0a 20 20 20  config_int(..   
3db0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
3dc0: 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c  onfigOpsEnum.SQL
3dd0: 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54  ITE_CONFIG_MEMST
3de0: 41 54 55 53 2c 20 76 61 6c 75 65 20 3f 20 31 20  ATUS, value ? 1 
3df0: 3a 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  : 0);....       
3e00: 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20   return rc;..   
3e10: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
3e20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
3e30: 20 41 74 74 65 6d 70 74 73 20 74 6f 20 66 72 65   Attempts to fre
3e40: 65 20 61 73 20 6d 75 63 68 20 68 65 61 70 20 6d  e as much heap m
3e50: 65 6d 6f 72 79 20 61 73 20 70 6f 73 73 69 62 6c  emory as possibl
3e60: 65 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61  e for the databa
3e70: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  se connection...
3e80: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
3e90: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
3ea0: 75 72 6e 73 3e 41 20 73 74 61 6e 64 61 72 64 20  urns>A standard 
3eb0: 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
3ec0: 64 65 20 28 69 2e 65 2e 20 7a 65 72 6f 20 66 6f  de (i.e. zero fo
3ed0: 72 20 73 75 63 63 65 73 73 20 61 6e 64 20 6e 6f  r success and no
3ee0: 6e 2d 7a 65 72 6f 20 66 6f 72 20 66 61 69 6c 75  n-zero for failu
3ef0: 72 65 29 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  re).</returns>..
3f00: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3f10: 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
3f20: 72 43 6f 64 65 20 52 65 6c 65 61 73 65 4d 65 6d  rCode ReleaseMem
3f30: 6f 72 79 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ory()..    {..  
3f40: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
3f50: 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
3f60: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
3f70: 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73  qlite3_db_releas
3f80: 65 5f 6d 65 6d 6f 72 79 28 5f 73 71 6c 29 3b 0d  e_memory(_sql);.
3f90: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
3fa0: 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  rc;..    }....  
3fb0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
3fc0: 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74  .    /// Attempt
3fd0: 73 20 74 6f 20 66 72 65 65 20 4e 20 62 79 74 65  s to free N byte
3fe0: 73 20 6f 66 20 68 65 61 70 20 6d 65 6d 6f 72 79  s of heap memory
3ff0: 20 62 79 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67   by deallocating
4000: 20 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c 20 6d   non-essential m
4010: 65 6d 6f 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 61  emory..    /// a
4020: 6c 6c 6f 63 61 74 69 6f 6e 73 20 68 65 6c 64 20  llocations held 
4030: 62 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20  by the database 
4040: 6c 69 62 72 61 72 79 2e 20 4d 65 6d 6f 72 79 20  library. Memory 
4050: 75 73 65 64 20 74 6f 20 63 61 63 68 65 20 64 61  used to cache da
4060: 74 61 62 61 73 65 20 70 61 67 65 73 0d 0a 20 20  tabase pages..  
4070: 20 20 2f 2f 2f 20 74 6f 20 69 6d 70 72 6f 76 65    /// to improve
4080: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 73 20   performance is 
4090: 61 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20 6e 6f  an example of no
40a0: 6e 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65 6d 6f  n-essential memo
40b0: 72 79 2e 20 20 54 68 69 73 20 69 73 20 61 20 6e  ry.  This is a n
40c0: 6f 2d 6f 70 0d 0a 20 20 20 20 2f 2f 2f 20 72 65  o-op..    /// re
40d0: 74 75 72 6e 69 6e 67 20 7a 65 72 6f 20 69 66 20  turning zero if 
40e0: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
40f0: 6c 69 62 72 61 72 79 20 77 61 73 20 6e 6f 74 20  library was not 
4100: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
4110: 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 0d 0a  e compile-time..
4120: 20 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e 20 53      /// option S
4130: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
4140: 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2e 20  ORY_MANAGEMENT. 
4150: 20 4f 70 74 69 6f 6e 61 6c 6c 79 2c 20 61 74 74   Optionally, att
4160: 65 6d 70 74 73 20 74 6f 20 72 65 73 65 74 20 61  empts to reset a
4170: 6e 64 2f 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 63  nd/or..    /// c
4180: 6f 6d 70 61 63 74 20 74 68 65 20 57 69 6e 33 32  ompact the Win32
4190: 20 6e 61 74 69 76 65 20 68 65 61 70 2c 20 69 66   native heap, if
41a0: 20 61 70 70 6c 69 63 61 62 6c 65 2e 0d 0a 20 20   applicable...  
41b0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
41c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
41d0: 20 6e 61 6d 65 3d 22 6e 42 79 74 65 73 22 3e 0d   name="nBytes">.
41e0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 72 65 71  .    /// The req
41f0: 75 65 73 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  uested number of
4200: 20 62 79 74 65 73 20 74 6f 20 66 72 65 65 2e 0d   bytes to free..
4210: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
4220: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
4230: 6d 20 6e 61 6d 65 3d 22 72 65 73 65 74 22 3e 0d  m name="reset">.
4240: 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72  .    /// Non-zer
4250: 6f 20 74 6f 20 61 74 74 65 6d 70 74 20 61 20 68  o to attempt a h
4260: 65 61 70 20 72 65 73 65 74 2e 0d 0a 20 20 20 20  eap reset...    
4270: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
4280: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4290: 65 3d 22 63 6f 6d 70 61 63 74 22 3e 0d 0a 20 20  e="compact">..  
42a0: 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74    /// Non-zero t
42b0: 6f 20 61 74 74 65 6d 70 74 20 68 65 61 70 20 63  o attempt heap c
42c0: 6f 6d 70 61 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  ompaction...    
42d0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
42e0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
42f0: 65 3d 22 6e 46 72 65 65 22 3e 0d 0a 20 20 20 20  e="nFree">..    
4300: 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
4310: 66 20 62 79 74 65 73 20 61 63 74 75 61 6c 6c 79  f bytes actually
4320: 20 66 72 65 65 64 2e 20 20 54 68 69 73 20 76 61   freed.  This va
4330: 6c 75 65 20 6d 61 79 20 62 65 20 7a 65 72 6f 2e  lue may be zero.
4340: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
4350: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
4360: 61 6d 20 6e 61 6d 65 3d 22 72 65 73 65 74 4f 6b  am name="resetOk
4370: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  ">..    /// This
4380: 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 6e   value will be n
4390: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 68  on-zero if the h
43a0: 65 61 70 20 72 65 73 65 74 20 77 61 73 20 73 75  eap reset was su
43b0: 63 63 65 73 73 66 75 6c 2e 0d 0a 20 20 20 20 2f  ccessful...    /
43c0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
43d0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
43e0: 3d 22 6e 4c 61 72 67 65 73 74 22 3e 0d 0a 20 20  ="nLargest">..  
43f0: 20 20 2f 2f 2f 20 54 68 65 20 73 69 7a 65 20 6f    /// The size o
4400: 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 63 6f  f the largest co
4410: 6d 6d 69 74 74 65 64 20 66 72 65 65 20 62 6c 6f  mmitted free blo
4420: 63 6b 20 69 6e 20 74 68 65 20 68 65 61 70 2c 20  ck in the heap, 
4430: 69 6e 20 62 79 74 65 73 2e 0d 0a 20 20 20 20 2f  in bytes...    /
4440: 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20 77 69  // This value wi
4450: 6c 6c 20 62 65 20 7a 65 72 6f 20 75 6e 6c 65 73  ll be zero unles
4460: 73 20 68 65 61 70 20 63 6f 6d 70 61 63 74 69 6f  s heap compactio
4470: 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0d 0a 20  n is enabled... 
4480: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
4490: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
44a0: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74  s>..    /// A st
44b0: 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
44c0: 74 75 72 6e 20 63 6f 64 65 20 28 69 2e 65 2e 20  turn code (i.e. 
44d0: 7a 65 72 6f 20 66 6f 72 20 73 75 63 63 65 73 73  zero for success
44e0: 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 0d 0a 20   and non-zero.. 
44f0: 20 20 20 2f 2f 2f 20 66 6f 72 20 66 61 69 6c 75     /// for failu
4500: 72 65 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  re)...    /// </
4510: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
4520: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51  ternal static SQ
4530: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74  LiteErrorCode St
4540: 61 74 69 63 52 65 6c 65 61 73 65 4d 65 6d 6f 72  aticReleaseMemor
4550: 79 28 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  y(..        int 
4560: 6e 42 79 74 65 73 2c 0d 0a 20 20 20 20 20 20 20  nBytes,..       
4570: 20 62 6f 6f 6c 20 72 65 73 65 74 2c 0d 0a 20 20   bool reset,..  
4580: 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 61        bool compa
4590: 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66  ct,..        ref
45a0: 20 69 6e 74 20 6e 46 72 65 65 2c 0d 0a 20 20 20   int nFree,..   
45b0: 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 72 65       ref bool re
45c0: 73 65 74 4f 6b 2c 0d 0a 20 20 20 20 20 20 20 20  setOk,..        
45d0: 72 65 66 20 75 69 6e 74 20 6e 4c 61 72 67 65 73  ref uint nLarges
45e0: 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  t..        )..  
45f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
4600: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
4610: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
4620: 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.Ok;....       
4630: 20 69 6e 74 20 6e 46 72 65 65 4c 6f 63 61 6c 20   int nFreeLocal 
4640: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
4650: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
4660: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 6e 42 79  lease_memory(nBy
4670: 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 75  tes);..        u
4680: 69 6e 74 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61  int nLargestLoca
4690: 6c 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  l = 0;..        
46a0: 62 6f 6f 6c 20 72 65 73 65 74 4f 6b 4c 6f 63 61  bool resetOkLoca
46b0: 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69  l = false;....#i
46c0: 66 20 21 44 45 42 55 47 20 26 26 20 57 49 4e 44  f !DEBUG && WIND
46d0: 4f 57 53 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f  OWS // NOTE: Sho
46e0: 75 6c 64 20 62 65 20 22 57 49 4e 33 32 48 45 41  uld be "WIN32HEA
46f0: 50 20 26 26 20 21 4d 45 4d 44 45 42 55 47 20 26  P && !MEMDEBUG &
4700: 26 20 57 49 4e 44 4f 57 53 22 0d 0a 20 20 20 20  & WINDOWS"..    
4710: 20 20 20 20 69 66 20 28 28 72 63 20 3d 3d 20 53      if ((rc == S
4720: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
4730: 6b 29 20 26 26 20 72 65 73 65 74 29 0d 0a 20 20  k) && reset)..  
4740: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4750: 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65       rc = Unsafe
4760: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
4770: 6c 69 74 65 33 5f 77 69 6e 33 32 5f 72 65 73 65  lite3_win32_rese
4780: 74 5f 68 65 61 70 28 29 3b 0d 0a 0d 0a 20 20 20  t_heap();....   
4790: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20           if (rc 
47a0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
47b0: 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
47c0: 20 20 20 20 20 20 20 20 72 65 73 65 74 4f 6b 4c          resetOkL
47d0: 6f 63 61 6c 20 3d 20 74 72 75 65 3b 0d 0a 20 20  ocal = true;..  
47e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
47f0: 20 20 20 69 66 20 28 28 72 63 20 3d 3d 20 53 51     if ((rc == SQ
4800: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
4810: 29 20 26 26 20 63 6f 6d 70 61 63 74 29 0d 0a 20  ) && compact).. 
4820: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
4830: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4840: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33  ods.sqlite3_win3
4850: 32 5f 63 6f 6d 70 61 63 74 5f 68 65 61 70 28 72  2_compact_heap(r
4860: 65 66 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c  ef nLargestLocal
4870: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
4880: 20 20 20 69 66 20 28 72 65 73 65 74 20 7c 7c 20     if (reset || 
4890: 63 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20  compact)..      
48a0: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 69 74        rc = SQLit
48b0: 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f 74 46 6f  eErrorCode.NotFo
48c0: 75 6e 64 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  und;..#endif....
48d0: 20 20 20 20 20 20 20 20 6e 46 72 65 65 20 3d 20          nFree = 
48e0: 6e 46 72 65 65 4c 6f 63 61 6c 3b 0d 0a 20 20 20  nFreeLocal;..   
48f0: 20 20 20 20 20 6e 4c 61 72 67 65 73 74 20 3d 20       nLargest = 
4900: 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c 3b 0d 0a  nLargestLocal;..
4910: 20 20 20 20 20 20 20 20 72 65 73 65 74 4f 6b 20          resetOk 
4920: 3d 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 3b 0d  = resetOkLocal;.
4930: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
4940: 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  n rc;..    }....
4950: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
4960: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64  >..    /// Shutd
4970: 6f 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65  own the SQLite e
4980: 6e 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74  ngine so that it
4990: 20 63 61 6e 20 62 65 20 72 65 73 74 61 72 74 65   can be restarte
49a0: 64 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74  d with different
49b0: 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67  ..    /// config
49c0: 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e  uration options.
49d0: 20 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61    We depend on a
49e0: 75 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  uto initializati
49f0: 6f 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a  on to recover...
4a00: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
4a10: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
4a20: 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 73  urns>Returns a s
4a30: 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
4a40: 65 73 75 6c 74 20 63 6f 64 65 2e 3c 2f 72 65 74  esult code.</ret
4a50: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
4a60: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
4a70: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 68 75  iteErrorCode Shu
4a80: 74 64 6f 77 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a  tdown()..    {..
4a90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
4aa0: 74 61 74 69 63 53 68 75 74 64 6f 77 6e 28 66 61  taticShutdown(fa
4ab0: 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  lse);..    }....
4ac0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
4ad0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64  >..    /// Shutd
4ae0: 6f 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65  own the SQLite e
4af0: 6e 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74  ngine so that it
4b00: 20 63 61 6e 20 62 65 20 72 65 73 74 61 72 74 65   can be restarte
4b10: 64 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74  d with different
4b20: 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67  ..    /// config
4b30: 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e  uration options.
4b40: 20 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61    We depend on a
4b50: 75 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  uto initializati
4b60: 6f 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a  on to recover...
4b70: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
4b80: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
4b90: 61 6d 20 6e 61 6d 65 3d 22 64 69 72 65 63 74 6f  am name="directo
4ba0: 72 69 65 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  ries">..    /// 
4bb0: 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 72 65 73 65  Non-zero to rese
4bc0: 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  t the database a
4bd0: 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72  nd temporary dir
4be0: 65 63 74 6f 72 69 65 73 20 74 6f 20 74 68 65 69  ectories to thei
4bf0: 72 0d 0a 20 20 20 20 2f 2f 2f 20 64 65 66 61 75  r..    /// defau
4c00: 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68  lt values, which
4c10: 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20   should be null 
4c20: 66 6f 72 20 62 6f 74 68 2e 20 20 54 68 69 73 20  for both.  This 
4c30: 70 61 72 61 6d 65 74 65 72 20 68 61 73 20 6e 6f  parameter has no
4c40: 0d 0a 20 20 20 20 2f 2f 2f 20 65 66 66 65 63 74  ..    /// effect
4c50: 20 6f 6e 20 6e 6f 6e 2d 57 69 6e 64 6f 77 73 20   on non-Windows 
4c60: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
4c70: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  s...    /// </pa
4c80: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
4c90: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
4ca0: 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
4cb0: 20 72 65 73 75 6c 74 20 63 6f 64 65 2e 3c 2f 72   result code.</r
4cc0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
4cd0: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c  ernal static SQL
4ce0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61  iteErrorCode Sta
4cf0: 74 69 63 53 68 75 74 64 6f 77 6e 28 0d 0a 20 20  ticShutdown(..  
4d00: 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 65 63        bool direc
4d10: 74 6f 72 69 65 73 0d 0a 20 20 20 20 20 20 20 20  tories..        
4d20: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
4d30: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
4d40: 65 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72  e rc = SQLiteErr
4d50: 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20  orCode.Ok;....  
4d60: 20 20 20 20 20 20 69 66 20 28 64 69 72 65 63 74        if (direct
4d70: 6f 72 69 65 73 29 0d 0a 20 20 20 20 20 20 20 20  ories)..        
4d80: 7b 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a  {..#if WINDOWS..
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4da0: 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc == SQLiteErro
4db0: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
4dc0: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
4dd0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4de0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33  ods.sqlite3_win3
4df0: 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28  2_set_directory(
4e00: 31 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  1, null);....   
4e10: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20           if (rc 
4e20: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
4e30: 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
4e40: 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73          rc = Uns
4e50: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
4e60: 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73  .sqlite3_win32_s
4e70: 65 74 5f 64 69 72 65 63 74 6f 72 79 28 32 2c 20  et_directory(2, 
4e80: 6e 75 6c 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 23  null);..#else..#
4e90: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
4ea0: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
4eb0: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
4ec0: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
4ed0: 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ine(..          
4ee0: 20 20 20 20 20 20 22 53 68 75 74 64 6f 77 6e 3a        "Shutdown:
4ef0: 20 43 61 6e 6e 6f 74 20 72 65 73 65 74 20 64 69   Cannot reset di
4f00: 72 65 63 74 6f 72 69 65 73 20 6f 6e 20 74 68 69  rectories on thi
4f10: 73 20 70 6c 61 74 66 6f 72 6d 2e 22 29 3b 0d 0a  s platform.");..
4f20: 23 65 6e 64 69 66 0d 0a 23 65 6e 64 69 66 0d 0a  #endif..#endif..
4f30: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4f40: 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53       if (rc == S
4f50: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
4f60: 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
4f70: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
4f80: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
4f90: 5f 73 68 75 74 64 6f 77 6e 28 29 3b 0d 0a 0d 0a  _shutdown();....
4fa0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
4fb0: 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  c;..    }....   
4fc0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
4fd0: 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e      /// Determin
4fe0: 65 73 20 69 66 20 74 68 65 20 61 73 73 6f 63 69  es if the associ
4ff0: 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e  ated native conn
5000: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73  ection handle is
5010: 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20   open...    /// 
5020: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
5030: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
5040: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
5050: 69 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  if the associate
5060: 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63 74  d native connect
5070: 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f 70  ion handle is op
5080: 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  en...    /// </r
5090: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
50a0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
50b0: 6f 6f 6c 20 49 73 4f 70 65 6e 28 29 0d 0a 20 20  ool IsOpen()..  
50c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
50d0: 75 72 6e 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c  urn (_sql != nul
50e0: 6c 29 20 26 26 20 21 5f 73 71 6c 2e 49 73 49 6e  l) && !_sql.IsIn
50f0: 76 61 6c 69 64 20 26 26 20 21 5f 73 71 6c 2e 49  valid && !_sql.I
5100: 73 43 6c 6f 73 65 64 3b 0d 0a 20 20 20 20 7d 0d  sClosed;..    }.
5110: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
5120: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4f 70  override void Op
5130: 65 6e 28 73 74 72 69 6e 67 20 73 74 72 46 69 6c  en(string strFil
5140: 65 6e 61 6d 65 2c 20 73 74 72 69 6e 67 20 76 66  ename, string vf
5150: 73 4e 61 6d 65 2c 20 53 51 4c 69 74 65 43 6f 6e  sName, SQLiteCon
5160: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e  nectionFlags con
5170: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51  nectionFlags, SQ
5180: 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75  LiteOpenFlagsEnu
5190: 6d 20 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74  m openFlags, int
51a0: 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f   maxPoolSize, bo
51b0: 6f 6c 20 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20  ol usePool)..   
51c0: 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20   {..      //..  
51d0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
51e0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
51f0: 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
5200: 6e 74 6c 79 20 6f 70 65 6e 2c 20 61 74 74 65 6d  ntly open, attem
5210: 70 74 20 74 6f 0d 0a 20 20 20 20 20 20 2f 2f 20  pt to..      // 
5220: 20 20 20 20 20 20 63 6c 6f 73 65 20 69 74 20 6e        close it n
5230: 6f 77 2e 20 20 54 68 69 73 20 6d 75 73 74 20 62  ow.  This must b
5240: 65 20 64 6f 6e 65 20 62 65 63 61 75 73 65 20 74  e done because t
5250: 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72 0d  he file name or.
5260: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
5270: 6f 74 68 65 72 20 70 61 72 61 6d 65 74 65 72 73  other parameters
5280: 20 74 68 61 74 20 6d 61 79 20 69 6d 70 61 63 74   that may impact
5290: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
52a0: 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20  database..      
52b0: 2f 2f 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74  //       connect
52c0: 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63 68 61  ion may have cha
52d0: 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d  nged...      //.
52e0: 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20  .      if (_sql 
52f0: 21 3d 20 6e 75 6c 6c 29 20 43 6c 6f 73 65 28 74  != null) Close(t
5300: 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  rue);....      /
5310: 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  /..      // NOTE
5320: 3a 20 49 66 20 74 68 65 20 63 6f 6e 6e 65 63 74  : If the connect
5330: 69 6f 6e 20 77 61 73 20 6e 6f 74 20 63 6c 6f 73  ion was not clos
5340: 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c 79 2c  ed successfully,
5350: 20 74 68 72 6f 77 20 61 6e 0d 0a 20 20 20 20 20   throw an..     
5360: 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70 74   //       except
5370: 69 6f 6e 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ion now...      
5380: 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73  //..      if (_s
5390: 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql != null)..   
53a0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
53b0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
53c0: 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  ("connection han
53d0: 64 6c 65 20 69 73 20 73 74 69 6c 6c 20 61 63 74  dle is still act
53e0: 69 76 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ive");....      
53f0: 5f 75 73 65 50 6f 6f 6c 20 3d 20 75 73 65 50 6f  _usePool = usePo
5400: 6f 6c 3b 0d 0a 20 20 20 20 20 20 5f 66 69 6c 65  ol;..      _file
5410: 4e 61 6d 65 20 3d 20 73 74 72 46 69 6c 65 6e 61  Name = strFilena
5420: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  me;....      if 
5430: 28 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20  (usePool)..     
5440: 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c   {..        _sql
5450: 20 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   = SQLiteConnect
5460: 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28 73  ionPool.Remove(s
5470: 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61 78 50  trFilename, maxP
5480: 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f 70 6f  oolSize, out _po
5490: 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 23  olVersion);....#
54a0: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
54b0: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
54c0: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
54d0: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
54e0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 4f  String.Format("O
54f0: 70 65 6e 20 28 50 6f 6f 6c 29 3a 20 7b 30 7d 22  pen (Pool): {0}"
5500: 2c 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  , (_sql != null)
5510: 20 3f 20 5f 73 71 6c 2e 54 6f 53 74 72 69 6e 67   ? _sql.ToString
5520: 28 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b  () : "<null>"));
5530: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
5540: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  }....      if (_
5550: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
5560: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
5570: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
5580: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
5590: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
55a0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
55b0: 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54  nally /* NOTE: T
55c0: 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72  hread.Abort() pr
55d0: 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20  otection. */..  
55e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
55f0: 20 20 20 49 6e 74 50 74 72 20 64 62 20 3d 20 49     IntPtr db = I
5600: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
5610: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
5620: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66  orCode n;....#if
5630: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
5640: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  D..          int
5650: 20 65 78 74 46 75 6e 63 73 20 3d 20 28 28 63 6f   extFuncs = ((co
5660: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 26 20  nnectionFlags & 
5670: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
5680: 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f  Flags.NoExtensio
5690: 6e 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53  nFunctions) != S
56a0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
56b0: 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e  lags.NoExtension
56c0: 46 75 6e 63 74 69 6f 6e 73 29 20 3f 20 31 20 3a  Functions) ? 1 :
56d0: 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   0;....         
56e0: 20 69 66 20 28 65 78 74 46 75 6e 63 73 20 21 3d   if (extFuncs !=
56f0: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b   0)..          {
5700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
5710: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
5720: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70  thods.sqlite3_op
5730: 65 6e 5f 69 6e 74 65 72 6f 70 28 54 6f 55 54 46  en_interop(ToUTF
5740: 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20  8(strFilename), 
5750: 54 6f 55 54 46 38 28 76 66 73 4e 61 6d 65 29 2c  ToUTF8(vfsName),
5760: 20 6f 70 65 6e 46 6c 61 67 73 2c 20 65 78 74 46   openFlags, extF
5770: 75 6e 63 73 2c 20 72 65 66 20 64 62 29 3b 0d 0a  uncs, ref db);..
5780: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5790: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e         else..#en
57a0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  dif..          {
57b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
57c0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
57d0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70  thods.sqlite3_op
57e0: 65 6e 5f 76 32 28 54 6f 55 54 46 38 28 73 74 72  en_v2(ToUTF8(str
57f0: 46 69 6c 65 6e 61 6d 65 29 2c 20 72 65 66 20 64  Filename), ref d
5800: 62 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 54 6f  b, openFlags, To
5810: 55 54 46 38 28 76 66 73 4e 61 6d 65 29 29 3b 0d  UTF8(vfsName));.
5820: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
5830: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
5840: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
5850: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
5860: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
5870: 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ne(String.Format
5880: 28 22 4f 70 65 6e 3a 20 7b 30 7d 22 2c 20 64 62  ("Open: {0}", db
5890: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  ));..#endif.... 
58a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
58b0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
58c0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
58d0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
58e0: 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  n, null);..     
58f0: 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20       _sql = new 
5900: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
5910: 48 61 6e 64 6c 65 28 64 62 2c 20 74 72 75 65 29  Handle(db, true)
5920: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
5930: 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f 73 71 6c        lock (_sql
5940: 29 20 7b 20 2f 2a 20 48 41 43 4b 3a 20 46 6f 72  ) { /* HACK: For
5950: 63 65 20 74 68 65 20 53 79 6e 63 42 6c 6f 63 6b  ce the SyncBlock
5960: 20 74 6f 20 62 65 20 22 63 72 65 61 74 65 64 22   to be "created"
5970: 20 6e 6f 77 2e 20 2a 2f 20 7d 0d 0a 0d 0a 20 20   now. */ }....  
5980: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
5990: 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64  ection.OnChanged
59a0: 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65  (null, new Conne
59b0: 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d  ctionEventArgs(.
59c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
59d0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65  iteConnectionEve
59e0: 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69 63  ntType.NewCritic
59f0: 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20  alHandle, null, 
5a00: 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
5a10: 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f     null, null, _
5a20: 73 71 6c 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65  sql, strFilename
5a30: 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
5a40: 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 0d 0a 20   strFilename,.. 
5a50: 20 20 20 20 20 20 20 20 20 20 20 76 66 73 4e 61             vfsNa
5a60: 6d 65 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  me, connectionFl
5a70: 61 67 73 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20  ags, openFlags, 
5a80: 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 75 73 65  maxPoolSize, use
5a90: 50 6f 6f 6c 20 7d 29 29 3b 0d 0a 20 20 20 20 20  Pool }));..     
5aa0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 42   }....      // B
5ab0: 69 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ind functions to
5ac0: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
5ad0: 2e 20 20 49 66 20 61 6e 79 20 70 72 65 76 69 6f  .  If any previo
5ae0: 75 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20  us functions of 
5af0: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 0d 0a 20  the same name.. 
5b00: 20 20 20 20 20 2f 2f 20 77 65 72 65 20 61 6c 72       // were alr
5b10: 65 61 64 79 20 62 6f 75 6e 64 2c 20 74 68 65 6e  eady bound, then
5b20: 20 74 68 65 20 6e 65 77 20 62 69 6e 64 69 6e 67   the new binding
5b30: 73 20 72 65 70 6c 61 63 65 20 74 68 65 20 6f 6c  s replace the ol
5b40: 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 28 63  d...      if ((c
5b50: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 26  onnectionFlags &
5b60: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5b70: 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75 6e  nFlags.NoBindFun
5b80: 63 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69 74  ctions) != SQLit
5b90: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5ba0: 2e 4e 6f 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73  .NoBindFunctions
5bb0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
5bc0: 20 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74        if (_funct
5bd0: 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
5be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 66 75               _fu
5bf0: 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77 20 4c 69  nctions = new Li
5c00: 73 74 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  st<SQLiteFunctio
5c10: 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  n>();....       
5c20: 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 2e 41 64     _functions.Ad
5c30: 64 52 61 6e 67 65 28 6e 65 77 20 4c 69 73 74 3c  dRange(new List<
5c40: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 28  SQLiteFunction>(
5c50: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42  SQLiteFunction.B
5c60: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 74 68 69  indFunctions(thi
5c70: 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  s, connectionFla
5c80: 67 73 29 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  gs)));..      }.
5c90: 0a 0d 0a 20 20 20 20 20 20 53 65 74 54 69 6d 65  ...      SetTime
5ca0: 6f 75 74 28 30 29 3b 0d 0a 20 20 20 20 20 20 47  out(0);..      G
5cb0: 43 2e 4b 65 65 70 41 6c 69 76 65 28 5f 73 71 6c  C.KeepAlive(_sql
5cc0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
5cd0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5ce0: 64 65 20 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f  de void ClearPoo
5cf0: 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  l()..    {..    
5d00: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
5d10: 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c  onPool.ClearPool
5d20: 28 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20  (_fileName);..  
5d30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
5d40: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
5d50: 20 43 6f 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20 20   CountPool()..  
5d60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 69 63    {..        Dic
5d70: 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20  tionary<string, 
5d80: 69 6e 74 3e 20 63 6f 75 6e 74 73 20 3d 20 6e 75  int> counts = nu
5d90: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ll;..        int
5da0: 20 6f 70 65 6e 43 6f 75 6e 74 20 3d 20 30 3b 0d   openCount = 0;.
5db0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 63 6c 6f  .        int clo
5dc0: 73 65 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20  seCount = 0;..  
5dd0: 20 20 20 20 20 20 69 6e 74 20 74 6f 74 61 6c 43        int totalC
5de0: 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20  ount = 0;....   
5df0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
5e00: 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f 75  ctionPool.GetCou
5e10: 6e 74 73 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d 0a  nts(_fileName,..
5e20: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
5e30: 63 6f 75 6e 74 73 2c 20 72 65 66 20 6f 70 65 6e  counts, ref open
5e40: 43 6f 75 6e 74 2c 20 72 65 66 20 63 6c 6f 73 65  Count, ref close
5e50: 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20  Count,..        
5e60: 20 20 20 20 72 65 66 20 74 6f 74 61 6c 43 6f 75      ref totalCou
5e70: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
5e80: 72 65 74 75 72 6e 20 74 6f 74 61 6c 43 6f 75 6e  return totalCoun
5e90: 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  t;..    }....   
5ea0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5eb0: 64 65 20 76 6f 69 64 20 53 65 74 54 69 6d 65 6f  de void SetTimeo
5ec0: 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d  ut(int nTimeoutM
5ed0: 53 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  S)..    {..     
5ee0: 20 49 6e 74 50 74 72 20 64 62 20 3d 20 5f 73 71   IntPtr db = _sq
5ef0: 6c 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 64 62  l;..      if (db
5f00: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
5f10: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
5f20: 65 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63  eException("no c
5f30: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
5f40: 20 61 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 20   available");.. 
5f50: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
5f60: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
5f70: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5f80: 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
5f90: 74 28 64 62 2c 20 6e 54 69 6d 65 6f 75 74 4d 53  t(db, nTimeoutMS
5fa0: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
5fb0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
5fc0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
5fd0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
5fe0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
5ff0: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
6000: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
6010: 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 28 53  ride bool Step(S
6020: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
6030: 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tmt)..    {..   
6040: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
6050: 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e  de n;..      Ran
6060: 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d  dom rnd = null;.
6070: 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74 61 72  .      uint star
6080: 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e  ttick = (uint)En
6090: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
60a0: 75 6e 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74  unt;..      uint
60b0: 20 74 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74   timeout = (uint
60c0: 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e  )(stmt._command.
60d0: 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20  _commandTimeout 
60e0: 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20  * 1000);....    
60f0: 20 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d 0a    while (true)..
6100: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6110: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
6120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
6130: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
6140: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6150: 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a  finally /* NOTE:
6160: 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20   Thread.Abort() 
6170: 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a  protection. */..
6180: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6190: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
61a0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
61b0: 69 74 65 33 5f 73 74 65 70 28 73 74 6d 74 2e 5f  ite3_step(stmt._
61c0: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20  sqlite_stmt);.. 
61d0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
61e0: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
61f0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77  iteErrorCode.Row
6200: 29 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a  ) return true;..
6210: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d          if (n ==
6220: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6230: 2e 44 6f 6e 65 29 20 72 65 74 75 72 6e 20 66 61  .Done) return fa
6240: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  lse;..        if
6250: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
6260: 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74  orCode.Interrupt
6270: 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d  ) return false;.
6280: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
6290: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
62a0: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
62b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51   {..          SQ
62c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 3b  LiteErrorCode r;
62d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  ....          //
62e0: 20 41 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72   An error occurr
62f0: 65 64 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 72  ed, attempt to r
6300: 65 73 65 74 20 74 68 65 20 73 74 61 74 65 6d 65  eset the stateme
6310: 6e 74 2e 20 20 49 66 20 74 68 65 20 72 65 73 65  nt.  If the rese
6320: 74 20 77 6f 72 6b 65 64 20 62 65 63 61 75 73 65  t worked because
6330: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
6340: 2f 2f 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  // schema has ch
6350: 61 6e 67 65 64 2c 20 72 65 2d 74 72 79 20 74 68  anged, re-try th
6360: 65 20 73 74 65 70 20 61 67 61 69 6e 2e 20 20 49  e step again.  I
6370: 66 20 69 74 20 65 72 72 6f 72 65 64 20 6f 75 72  f it errored our
6380: 20 62 65 63 61 75 73 65 20 74 68 65 20 64 61 74   because the dat
6390: 61 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20  abase..         
63a0: 20 2f 2f 20 69 73 20 6c 6f 63 6b 65 64 2c 20 74   // is locked, t
63b0: 68 65 6e 20 6b 65 65 70 20 72 65 74 72 79 69 6e  hen keep retryin
63c0: 67 20 75 6e 74 69 6c 20 74 68 65 20 63 6f 6d 6d  g until the comm
63d0: 61 6e 64 20 74 69 6d 65 6f 75 74 20 6f 63 63 75  and timeout occu
63e0: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 72  rs...          r
63f0: 20 3d 20 52 65 73 65 74 28 73 74 6d 74 29 3b 0d   = Reset(stmt);.
6400: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
6410: 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (r == SQLiteErro
6420: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
6430: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
6440: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
6450: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
6460: 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ());....        
6470: 20 20 65 6c 73 65 20 69 66 20 28 28 72 20 3d 3d    else if ((r ==
6480: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6490: 2e 4c 6f 63 6b 65 64 20 7c 7c 20 72 20 3d 3d 20  .Locked || r == 
64a0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
64b0: 42 75 73 79 29 20 26 26 20 73 74 6d 74 2e 5f 63  Busy) && stmt._c
64c0: 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d  ommand != null).
64d0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
64e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65            // Kee
64f0: 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20  p trying..      
6500: 20 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d        if (rnd ==
6510: 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20   null) // First 
6520: 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75  time we've encou
6530: 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d  ntered the lock.
6540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
6550: 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28  nd = new Random(
6560: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6570: 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78    // If we've ex
6580: 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61  ceeded the comma
6590: 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69  nd's timeout, gi
65a0: 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20  ve up and throw 
65b0: 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  an error..      
65c0: 20 20 20 20 20 20 69 66 20 28 28 75 69 6e 74 29        if ((uint)
65d0: 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b  Environment.Tick
65e0: 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63  Count - starttic
65f0: 6b 20 3e 20 74 69 6d 65 6f 75 74 29 0d 0a 20 20  k > timeout)..  
6600: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6610: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
6620: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
6630: 74 69 6f 6e 28 72 2c 20 47 65 74 4c 61 73 74 45  tion(r, GetLastE
6640: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
6650: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6660: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
6670: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6680: 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72          // Other
6690: 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61  wise sleep for a
66a0: 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f   random amount o
66b0: 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30  f time up to 150
66c0: 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ms..            
66d0: 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69    System.Threadi
66e0: 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28  ng.Thread.Sleep(
66f0: 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29  rnd.Next(1, 150)
6700: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6710: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
6720: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6730: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
6740: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
6750: 20 20 20 20 2f 2f 2f 20 48 61 73 20 74 68 65 20      /// Has the 
6760: 73 71 6c 69 74 65 33 5f 65 72 72 73 74 72 28 29  sqlite3_errstr()
6770: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 41 50   core library AP
6780: 49 20 62 65 65 6e 20 63 68 65 63 6b 65 64 20 66  I been checked f
6790: 6f 72 20 79 65 74 3f 0d 0a 20 20 20 20 2f 2f 2f  or yet?..    ///
67a0: 20 49 66 20 73 6f 2c 20 69 73 20 69 74 20 70 72   If so, is it pr
67b0: 65 73 65 6e 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20  esent?..    /// 
67c0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
67d0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
67e0: 6f 6f 6c 3f 20 68 61 76 65 5f 65 72 72 73 74 72  ool? have_errstr
67f0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
6800: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6810: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
6820: 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
6830: 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
6840: 65 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  ed SQLite return
6850: 20 63 6f 64 65 20 75 73 69 6e 67 0d 0a 20 20 20   code using..   
6860: 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69 74 65 33   /// the sqlite3
6870: 5f 65 72 72 73 74 72 28 29 20 66 75 6e 63 74 69  _errstr() functi
6880: 6f 6e 2c 20 66 61 6c 6c 69 6e 67 20 62 61 63 6b  on, falling back
6890: 20 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c   to the internal
68a0: 20 6c 6f 6f 6b 75 70 0d 0a 20 20 20 20 2f 2f 2f   lookup..    ///
68b0: 20 74 61 62 6c 65 20 69 66 20 6e 65 63 65 73 73   table if necess
68c0: 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ary...    /// </
68d0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
68e0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72  / <param name="r
68f0: 63 22 3e 54 68 65 20 53 51 4c 69 74 65 20 72 65  c">The SQLite re
6900: 74 75 72 6e 20 63 6f 64 65 2e 3c 2f 70 61 72 61  turn code.</para
6910: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
6920: 75 72 6e 73 3e 54 68 65 20 65 72 72 6f 72 20 6d  urns>The error m
6930: 65 73 73 61 67 65 20 6f 72 20 6e 75 6c 6c 20 69  essage or null i
6940: 66 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 66  f it cannot be f
6950: 6f 75 6e 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ound.</returns>.
6960: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
6970: 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 45  atic string GetE
6980: 72 72 6f 72 53 74 72 69 6e 67 28 53 51 4c 69 74  rrorString(SQLit
6990: 65 45 72 72 6f 72 43 6f 64 65 20 72 63 29 0d 0a  eErrorCode rc)..
69a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
69b0: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
69c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 68             if (h
69d0: 61 76 65 5f 65 72 72 73 74 72 20 3d 3d 20 6e 75  ave_errstr == nu
69e0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
69f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6a00: 20 20 20 20 69 6e 74 20 76 65 72 73 69 6f 6e 4e      int versionN
6a10: 75 6d 62 65 72 20 3d 20 53 51 4c 69 74 65 56 65  umber = SQLiteVe
6a20: 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20  rsionNumber;..  
6a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
6a40: 76 65 5f 65 72 72 73 74 72 20 3d 20 28 76 65 72  ve_errstr = (ver
6a50: 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33 30  sionNumber >= 30
6a60: 30 37 30 31 35 29 3b 0d 0a 20 20 20 20 20 20 20  07015);..       
6a70: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6a80: 20 20 20 20 20 20 69 66 20 28 28 62 6f 6f 6c 29        if ((bool)
6a90: 68 61 76 65 5f 65 72 72 73 74 72 29 0d 0a 20 20  have_errstr)..  
6aa0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
6ac0: 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65  Ptr ptr = Unsafe
6ad0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
6ae0: 6c 69 74 65 33 5f 65 72 72 73 74 72 28 72 63 29  lite3_errstr(rc)
6af0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6b00: 20 20 20 20 20 69 66 20 28 70 74 72 20 21 3d 20       if (ptr != 
6b10: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
6b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6b30: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
6b40: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
6b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6b60: 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61 72 73       return Mars
6b70: 68 61 6c 2e 50 74 72 54 6f 53 74 72 69 6e 67 41  hal.PtrToStringA
6b80: 6e 73 69 28 70 74 72 29 3b 0d 0a 23 65 6c 73 65  nsi(ptr);..#else
6b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6ba0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
6bb0: 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 2d  8ToString(ptr, -
6bc0: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
6bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6be0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6bf0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6c00: 20 20 63 61 74 63 68 20 28 45 6e 74 72 79 50 6f    catch (EntryPo
6c10: 69 6e 74 4e 6f 74 46 6f 75 6e 64 45 78 63 65 70  intNotFoundExcep
6c20: 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 7b  tion)..        {
6c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
6c40: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
6c50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6c60: 20 20 20 72 65 74 75 72 6e 20 46 61 6c 6c 62 61     return Fallba
6c70: 63 6b 47 65 74 45 72 72 6f 72 53 74 72 69 6e 67  ckGetErrorString
6c80: 28 72 63 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  (rc);..    }....
6c90: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
6ca0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61 73 20 74  >..    /// Has t
6cb0: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f  he sqlite3_stmt_
6cc0: 72 65 61 64 6f 6e 6c 79 28 29 20 63 6f 72 65 20  readonly() core 
6cd0: 6c 69 62 72 61 72 79 20 41 50 49 20 62 65 65 6e  library API been
6ce0: 20 63 68 65 63 6b 65 64 20 66 6f 72 20 79 65 74   checked for yet
6cf0: 3f 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73 6f  ?..    /// If so
6d00: 2c 20 69 73 20 69 74 20 70 72 65 73 65 6e 74 3f  , is it present?
6d10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
6d20: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
6d30: 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 68  e static bool? h
6d40: 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c  ave_stmt_readonl
6d50: 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  y = null;....   
6d60: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
6d70: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
6d80: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
6d90: 73 70 65 63 69 66 69 65 64 20 73 74 61 74 65 6d  specified statem
6da0: 65 6e 74 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79  ent is read-only
6db0: 20 69 6e 20 6e 61 74 75 72 65 2e 0d 0a 20 20 20   in nature...   
6dc0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
6dd0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
6de0: 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65 20  name="stmt">The 
6df0: 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 63 68 65  statement to che
6e00: 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ck.</param>..   
6e10: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72   /// <returns>Tr
6e20: 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 20  ue if the outer 
6e30: 71 75 65 72 79 20 69 73 20 72 65 61 64 2d 6f 6e  query is read-on
6e40: 6c 79 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ly.</returns>.. 
6e50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
6e60: 72 69 64 65 20 62 6f 6f 6c 20 49 73 52 65 61 64  ride bool IsRead
6e70: 4f 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20 53  Only(..        S
6e80: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
6e90: 74 6d 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  tmt..        )..
6ea0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
6eb0: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
6ec0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 68             if (h
6ed0: 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c  ave_stmt_readonl
6ee0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
6ef0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6f00: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 76             int v
6f10: 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3d 20 53  ersionNumber = S
6f20: 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62  QLiteVersionNumb
6f30: 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er;..           
6f40: 20 20 20 20 20 68 61 76 65 5f 73 74 6d 74 5f 72       have_stmt_r
6f50: 65 61 64 6f 6e 6c 79 20 3d 20 28 76 65 72 73 69  eadonly = (versi
6f60: 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33 30 30 37  onNumber >= 3007
6f70: 30 30 34 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  004);..         
6f80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6f90: 20 20 20 20 69 66 20 28 28 62 6f 6f 6c 29 68 61      if ((bool)ha
6fa0: 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79  ve_stmt_readonly
6fb0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
6fc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6fd0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
6fe0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6ff0: 69 74 65 33 5f 73 74 6d 74 5f 72 65 61 64 6f 6e  ite3_stmt_readon
7000: 6c 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly(..           
7010: 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73           stmt._s
7020: 71 6c 69 74 65 5f 73 74 6d 74 29 20 21 3d 20 30  qlite_stmt) != 0
7030: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
7040: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
7050: 20 20 20 20 20 63 61 74 63 68 20 28 45 6e 74 72       catch (Entr
7060: 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64 45 78  yPointNotFoundEx
7070: 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  ception)..      
7080: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7090: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
70a0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
70b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
70c0: 73 65 3b 20 2f 2a 20 4e 4f 54 45 3a 20 55 6e 6b  se; /* NOTE: Unk
70d0: 6e 6f 77 6e 2c 20 61 73 73 75 6d 65 20 66 61 6c  nown, assume fal
70e0: 73 65 2e 20 2a 2f 0d 0a 20 20 20 20 7d 0d 0a 0d  se. */..    }...
70f0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
7100: 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
7110: 6f 72 43 6f 64 65 20 52 65 73 65 74 28 53 51 4c  orCode Reset(SQL
7120: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
7130: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
7140: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
7150: 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49   n;....#if !SQLI
7160: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
7170: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
7180: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
7190: 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f 70  e3_reset_interop
71a0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
71b0: 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  mt);..#else..   
71c0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
71d0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
71e0: 65 33 5f 72 65 73 65 74 28 73 74 6d 74 2e 5f 73  e3_reset(stmt._s
71f0: 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65  qlite_stmt);..#e
7200: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  ndif....      //
7210: 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63   If the schema c
7220: 68 61 6e 67 65 64 2c 20 74 72 79 20 61 6e 64 20  hanged, try and 
7230: 72 65 2d 70 72 65 70 61 72 65 20 69 74 0d 0a 20  re-prepare it.. 
7240: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
7250: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63  LiteErrorCode.Sc
7260: 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  hema)..      {..
7270: 20 20 20 20 20 20 20 20 2f 2f 20 52 65 63 72 65          // Recre
7280: 61 74 65 20 61 20 64 75 6d 6d 79 20 73 74 61 74  ate a dummy stat
7290: 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 73  ement..        s
72a0: 74 72 69 6e 67 20 73 74 72 20 3d 20 6e 75 6c 6c  tring str = null
72b0: 3b 0d 0a 20 20 20 20 20 20 20 20 75 73 69 6e 67  ;..        using
72c0: 20 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e   (SQLiteStatemen
72d0: 74 20 74 6d 70 20 3d 20 50 72 65 70 61 72 65 28  t tmp = Prepare(
72e0: 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73 71 6c 53  null, stmt._sqlS
72f0: 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c 6c 2c 20  tatement, null, 
7300: 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d  (uint)(stmt._com
7310: 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d  mand._commandTim
7320: 65 6f 75 74 20 2a 20 31 30 30 30 29 2c 20 72 65  eout * 1000), re
7330: 66 20 73 74 72 29 29 0d 0a 20 20 20 20 20 20 20  f str))..       
7340: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f   {..          //
7350: 20 46 69 6e 61 6c 69 7a 65 20 74 68 65 20 65 78   Finalize the ex
7360: 69 73 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  isting statement
7370: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d 74  ..          stmt
7380: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2e 44 69  ._sqlite_stmt.Di
7390: 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  spose();..      
73a0: 20 20 20 20 2f 2f 20 52 65 61 73 73 69 67 6e 20      // Reassign 
73b0: 61 20 6e 65 77 20 73 74 61 74 65 6d 65 6e 74 20  a new statement 
73c0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6f  pointer to the o
73d0: 6c 64 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  ld statement and
73e0: 20 63 6c 65 61 72 20 74 68 65 20 74 65 6d 70 6f   clear the tempo
73f0: 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20 20 20 20  rary one..      
7400: 20 20 20 20 69 66 20 28 74 6d 70 20 21 3d 20 6e      if (tmp != n
7410: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
7420: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
7430: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
7440: 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73   = tmp._sqlite_s
7450: 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tmt;..          
7460: 20 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74    tmp._sqlite_st
7470: 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  mt = null;..    
7480: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7490: 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c 79 20       // Reapply 
74a0: 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20 20  parameters..    
74b0: 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e 64 50        stmt.BindP
74c0: 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a 20 20  arameters();..  
74d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
74e0: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
74f0: 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e 6f 77 6e 3b  rorCode.Unknown;
7500: 20 2f 2f 20 52 65 73 65 74 20 77 61 73 20 4f 4b   // Reset was OK
7510: 2c 20 77 69 74 68 20 73 63 68 65 6d 61 20 63 68  , with schema ch
7520: 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ange..      }.. 
7530: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
7540: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
7550: 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d  de.Locked || n =
7560: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
7570: 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20  e.Busy)..       
7580: 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a 20 20   return n;....  
7590: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
75a0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
75b0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
75c0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
75d0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
75e0: 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
75f0: 20 72 65 74 75 72 6e 20 6e 3b 20 2f 2f 20 57 65   return n; // We
7600: 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20 73 63   reset OK, no sc
7610: 68 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a 20 20  hema changes..  
7620: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
7630: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
7640: 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f 72  ing GetLastError
7650: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
7660: 20 20 20 72 65 74 75 72 6e 20 47 65 74 4c 61 73     return GetLas
7670: 74 45 72 72 6f 72 28 6e 75 6c 6c 29 3b 0d 0a 20  tError(null);.. 
7680: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
7690: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
76a0: 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f  ring GetLastErro
76b0: 72 28 73 74 72 69 6e 67 20 64 65 66 56 61 6c 75  r(string defValu
76c0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
76d0: 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74     string result
76e0: 20 3d 20 53 51 4c 69 74 65 42 61 73 65 2e 47 65   = SQLiteBase.Ge
76f0: 74 4c 61 73 74 45 72 72 6f 72 28 5f 73 71 6c 2c  tLastError(_sql,
7700: 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20   _sql);..       
7710: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
7720: 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73 75 6c 74  llOrEmpty(result
7730: 29 29 20 72 65 73 75 6c 74 20 3d 20 64 65 66 56  )) result = defV
7740: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 72  alue;..        r
7750: 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
7760: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
7770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
77d0: 20 20 20 23 72 65 67 69 6f 6e 20 51 75 65 72 79     #region Query
77e0: 20 44 69 61 67 6e 6f 73 74 69 63 73 20 53 75 70   Diagnostics Sup
77f0: 70 6f 72 74 0d 0a 23 69 66 20 21 50 4c 41 54 46  port..#if !PLATF
7800: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
7810: 57 4f 52 4b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  WORK..    /// <s
7820: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7830: 20 54 68 69 73 20 66 69 65 6c 64 20 69 73 20 75   This field is u
7840: 73 65 64 20 74 6f 20 6b 65 65 70 20 74 72 61 63  sed to keep trac
7850: 6b 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  k of whether or 
7860: 6e 6f 74 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  not the..    ///
7870: 20 22 53 51 4c 69 74 65 5f 46 6f 72 63 65 4c 6f   "SQLite_ForceLo
7880: 67 50 72 65 70 61 72 65 22 20 65 6e 76 69 72 6f  gPrepare" enviro
7890: 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 68  nment variable h
78a0: 61 73 20 62 65 65 6e 20 71 75 65 72 69 65 64 2e  as been queried.
78b0: 20 20 49 66 20 73 6f 2c 0d 0a 20 20 20 20 2f 2f    If so,..    //
78c0: 2f 20 69 74 20 77 69 6c 6c 20 6f 6e 6c 79 20 62  / it will only b
78d0: 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  e non-zero if th
78e0: 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61  e environment va
78f0: 72 69 61 62 6c 65 20 77 61 73 20 70 72 65 73 65  riable was prese
7900: 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  nt...    /// </s
7910: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69  ummary>..    pri
7920: 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
7930: 3f 20 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72  ? forceLogPrepar
7940: 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  e = null;....   
7950: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79b0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
79c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44  mary>..    /// D
79d0: 65 74 65 72 6d 69 6e 65 73 20 69 66 20 61 6c 6c  etermines if all
79e0: 20 63 61 6c 6c 73 20 74 6f 20 70 72 65 70 61 72   calls to prepar
79f0: 65 20 61 20 53 51 4c 20 71 75 65 72 79 20 77 69  e a SQL query wi
7a00: 6c 6c 20 62 65 20 6c 6f 67 67 65 64 2c 0d 0a 20  ll be logged,.. 
7a10: 20 20 20 2f 2f 2f 20 72 65 67 61 72 64 6c 65 73     /// regardles
7a20: 73 20 6f 66 20 74 68 65 20 66 6c 61 67 73 20 66  s of the flags f
7a30: 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  or the associate
7a40: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  d connection... 
7a50: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
7a60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
7a70: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  rns>..    /// No
7a80: 6e 2d 7a 65 72 6f 20 74 6f 20 6c 6f 67 20 61 6c  n-zero to log al
7a90: 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72 65 70 61  l calls to prepa
7aa0: 72 65 20 61 20 53 51 4c 20 71 75 65 72 79 2e 0d  re a SQL query..
7ab0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
7ac0: 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ns>..    private
7ad0: 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72   static bool For
7ae0: 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29 0d 0a  ceLogPrepare()..
7af0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6c      {..        l
7b00: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a  ock (syncRoot)..
7b10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7b20: 20 20 20 20 20 20 20 69 66 20 28 66 6f 72 63 65         if (force
7b30: 4c 6f 67 50 72 65 70 61 72 65 20 3d 3d 20 6e 75  LogPrepare == nu
7b40: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
7b50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7b60: 20 20 20 20 69 66 20 28 55 6e 73 61 66 65 4e 61      if (UnsafeNa
7b70: 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 53  tiveMethods.GetS
7b80: 65 74 74 69 6e 67 56 61 6c 75 65 28 0d 0a 20 20  ettingValue(..  
7b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ba0: 20 20 20 20 20 20 22 53 51 4c 69 74 65 5f 46 6f        "SQLite_Fo
7bb0: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 22 2c 20  rceLogPrepare", 
7bc0: 6e 75 6c 6c 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a  null) != null)..
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7be0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7bf0: 20 20 20 20 20 20 20 66 6f 72 63 65 4c 6f 67 50         forceLogP
7c00: 72 65 70 61 72 65 20 3d 20 74 72 75 65 3b 0d 0a  repare = true;..
7c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c20: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
7c30: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
7c40: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c60: 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 20  forceLogPrepare 
7c70: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
7c80: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7c90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
7ca0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7cb0: 20 28 62 6f 6f 6c 29 66 6f 72 63 65 4c 6f 67 50   (bool)forceLogP
7cc0: 72 65 70 61 72 65 3b 0d 0a 20 20 20 20 20 20 20  repare;..       
7cd0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69   }..    }..#endi
7ce0: 66 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  f..    #endregio
7cf0: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
7d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d50: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7d60: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
7d70: 65 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e SQLiteStatemen
7d80: 74 20 50 72 65 70 61 72 65 28 53 51 4c 69 74 65  t Prepare(SQLite
7d90: 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20  Connection cnn, 
7da0: 73 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 20 53  string strSql, S
7db0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 70  QLiteStatement p
7dc0: 72 65 76 69 6f 75 73 2c 20 75 69 6e 74 20 74 69  revious, uint ti
7dd0: 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20 73 74 72  meoutMS, ref str
7de0: 69 6e 67 20 73 74 72 52 65 6d 61 69 6e 29 0d 0a  ing strRemain)..
7df0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20      {..      if 
7e00: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
7e10: 72 45 6d 70 74 79 28 73 74 72 53 71 6c 29 29 0d  rEmpty(strSql)).
7e20: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
7e30: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
7e40: 20 4e 4f 54 45 3a 20 53 51 4c 69 74 65 20 64 6f   NOTE: SQLite do
7e50: 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 74  es not support t
7e60: 68 65 20 63 6f 6e 63 65 70 74 20 6f 66 20 73 65  he concept of se
7e70: 70 61 72 61 74 65 20 73 63 68 65 6d 61 73 0d 0a  parate schemas..
7e80: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
7e90: 20 69 6e 20 6f 6e 65 20 64 61 74 61 62 61 73 65   in one database
7ea0: 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72 65 6d  ; therefore, rem
7eb0: 6f 76 65 20 74 68 65 20 62 61 73 65 20 73 63 68  ove the base sch
7ec0: 65 6d 61 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20  ema name..      
7ed0: 20 20 2f 2f 20 20 20 20 20 20 20 75 73 65 64 20    //       used 
7ee0: 74 6f 20 73 6d 6f 6f 74 68 20 69 6e 74 65 67 72  to smooth integr
7ef0: 61 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 62  ation with the b
7f00: 61 73 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  ase .NET Framewo
7f10: 72 6b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  rk..        //  
7f20: 20 20 20 20 20 64 61 74 61 20 63 6c 61 73 73 65       data classe
7f30: 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  s...        //..
7f40: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 62          string b
7f50: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20  aseSchemaName = 
7f60: 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (cnn != null) ? 
7f70: 63 6e 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e  cnn._baseSchemaN
7f80: 61 6d 65 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ame : null;.... 
7f90: 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
7fa0: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
7fb0: 28 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29  (baseSchemaName)
7fc0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
7fd0: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
7fe0: 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28   strSql.Replace(
7ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8000: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75  String.Format(Cu
8010: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
8020: 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  antCulture,..   
8030: 20 20 20 20 20 20 20 20 20 20 20 22 5b 7b 30 7d             "[{0}
8040: 5d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e  ].", baseSchemaN
8050: 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70  ame), String.Emp
8060: 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ty);....        
8070: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71    strSql = strSq
8080: 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20  l.Replace(..    
8090: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
80a0: 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  .Format(CultureI
80b0: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
80c0: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
80d0: 20 20 20 20 20 22 7b 30 7d 2e 22 2c 20 62 61 73       "{0}.", bas
80e0: 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74  eSchemaName), St
80f0: 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20  ring.Empty);..  
8100: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
8110: 0d 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  ....      SQLite
8120: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
8130: 66 6c 61 67 73 20 3d 0d 0a 20 20 20 20 20 20 20  flags =..       
8140: 20 20 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29     (cnn != null)
8150: 20 3f 20 63 6e 6e 2e 46 6c 61 67 73 20 3a 20 53   ? cnn.Flags : S
8160: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
8170: 6c 61 67 73 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d  lags.Default;...
8180: 0a 20 20 20 20 20 20 69 66 20 28 0d 0a 23 69 66  .      if (..#if
8190: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
81a0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
81b0: 20 20 20 20 20 20 20 46 6f 72 63 65 4c 6f 67 50         ForceLogP
81c0: 72 65 70 61 72 65 28 29 20 7c 7c 0d 0a 23 65 6e  repare() ||..#en
81d0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 28  dif..          (
81e0: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
81f0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
8200: 6f 67 50 72 65 70 61 72 65 29 20 3d 3d 20 53 51  ogPrepare) == SQ
8210: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
8220: 61 67 73 2e 4c 6f 67 50 72 65 70 61 72 65 29 29  ags.LogPrepare))
8230: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
8240: 20 20 20 20 20 69 66 20 28 28 73 74 72 53 71 6c       if ((strSql
8250: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 74   == null) || (st
8260: 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3d 3d 20 30  rSql.Length == 0
8270: 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 54 72 69  ) || (strSql.Tri
8280: 6d 28 29 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29  m().Length == 0)
8290: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
82a0: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
82b0: 73 73 61 67 65 28 22 50 72 65 70 61 72 69 6e 67  ssage("Preparing
82c0: 20 7b 3c 6e 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22   {<nothing>}..."
82d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c  );..          el
82e0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
82f0: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
8300: 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f  essage(String.Fo
8310: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
8320: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
8330: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
8340: 75 72 65 2c 20 22 50 72 65 70 61 72 69 6e 67 20  ure, "Preparing 
8350: 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72  {{{0}}}...", str
8360: 53 71 6c 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  Sql));..      }.
8370: 0a 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ...      IntPtr 
8380: 73 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65  stmt = IntPtr.Ze
8390: 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ro;..      IntPt
83a0: 72 20 70 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a  r ptr = IntPtr.Z
83b0: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ero;..      int 
83c0: 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  len = 0;..      
83d0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
83e0: 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  n = SQLiteErrorC
83f0: 6f 64 65 2e 53 63 68 65 6d 61 3b 0d 0a 20 20 20  ode.Schema;..   
8400: 20 20 20 69 6e 74 20 72 65 74 72 69 65 73 20 3d     int retries =
8410: 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6d   0;..      int m
8420: 61 78 69 6d 75 6d 52 65 74 72 69 65 73 20 3d 20  aximumRetries = 
8430: 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (cnn != null) ? 
8440: 63 6e 6e 2e 5f 70 72 65 70 61 72 65 52 65 74 72  cnn._prepareRetr
8450: 69 65 73 20 3a 20 53 51 4c 69 74 65 43 6f 6e 6e  ies : SQLiteConn
8460: 65 63 74 69 6f 6e 2e 44 65 66 61 75 6c 74 50 72  ection.DefaultPr
8470: 65 70 61 72 65 52 65 74 72 69 65 73 3b 0d 0a 20  epareRetries;.. 
8480: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20       byte[] b = 
8490: 54 6f 55 54 46 38 28 73 74 72 53 71 6c 29 3b 0d  ToUTF8(strSql);.
84a0: 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79  .      string ty
84b0: 70 65 64 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a  pedefs = null;..
84c0: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
84d0: 65 6d 65 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c  ement cmd = null
84e0: 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20  ;..      Random 
84f0: 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  rnd = null;..   
8500: 20 20 20 75 69 6e 74 20 73 74 61 72 74 74 69 63     uint starttic
8510: 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f  k = (uint)Enviro
8520: 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b  nment.TickCount;
8530: 0d 0a 0d 0a 20 20 20 20 20 20 47 43 48 61 6e 64  ....      GCHand
8540: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 47 43 48 61  le handle = GCHa
8550: 6e 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43  ndle.Alloc(b, GC
8560: 48 61 6e 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65  HandleType.Pinne
8570: 64 29 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  d);..      IntPt
8580: 72 20 70 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e  r psql = handle.
8590: 41 64 64 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65  AddrOfPinnedObje
85a0: 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c  ct();..      SQL
85b0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
85c0: 6c 65 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64  le statementHand
85d0: 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  le = null;..    
85e0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a    try..      {..
85f0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 28          while ((
8600: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
8610: 43 6f 64 65 2e 53 63 68 65 6d 61 20 7c 7c 20 6e  Code.Schema || n
8620: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
8630: 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20  ode.Locked || n 
8640: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
8650: 64 65 2e 42 75 73 79 29 20 26 26 20 72 65 74 72  de.Busy) && retr
8660: 69 65 73 20 3c 20 6d 61 78 69 6d 75 6d 52 65 74  ies < maximumRet
8670: 72 69 65 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  ries)..        {
8680: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 72 79 0d  ..          try.
8690: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
86a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
86b0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
86c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
86d0: 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45   finally /* NOTE
86e0: 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29  : Thread.Abort()
86f0: 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d   protection. */.
8700: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
8710: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d            stmt =
8720: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
8730: 20 20 20 20 20 20 20 20 20 20 20 70 74 72 20 3d             ptr =
8740: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
8750: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
8760: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
8770: 20 20 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20     len = 0;..   
8780: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
8790: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
87a0: 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  .sqlite3_prepare
87b0: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 70  _interop(_sql, p
87c0: 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  sql, b.Length - 
87d0: 31 2c 20 72 65 66 20 73 74 6d 74 2c 20 72 65 66  1, ref stmt, ref
87e0: 20 70 74 72 2c 20 72 65 66 20 6c 65 6e 29 3b 0d   ptr, ref len);.
87f0: 0a 23 65 6c 73 65 0d 0a 23 69 66 20 55 53 45 5f  .#else..#if USE_
8800: 50 52 45 50 41 52 45 5f 56 32 0d 0a 20 20 20 20  PREPARE_V2..    
8810: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
8820: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8830: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
8840: 76 32 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62  v2(_sql, psql, b
8850: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72 65 66  .Length - 1, ref
8860: 20 73 74 6d 74 2c 20 72 65 66 20 70 74 72 29 3b   stmt, ref ptr);
8870: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
8880: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
8890: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
88a0: 69 74 65 33 5f 70 72 65 70 61 72 65 28 5f 73 71  ite3_prepare(_sq
88b0: 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74  l, psql, b.Lengt
88c0: 68 20 2d 20 31 2c 20 72 65 66 20 73 74 6d 74 2c  h - 1, ref stmt,
88d0: 20 72 65 66 20 70 74 72 29 3b 0d 0a 23 65 6e 64   ref ptr);..#end
88e0: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
88f0: 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69  len = -1;..#endi
8900: 66 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  f....#if !NET_CO
8910: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
8920: 45 5f 53 54 41 54 45 4d 45 4e 54 0d 0a 20 20 20  E_STATEMENT..   
8930: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
8940: 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e  riteLine(String.
8950: 46 6f 72 6d 61 74 28 22 50 72 65 70 61 72 65 20  Format("Prepare 
8960: 28 7b 30 7d 29 3a 20 7b 31 7d 22 2c 20 6e 2c 20  ({0}): {1}", n, 
8970: 73 74 6d 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  stmt));..#endif.
8980: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
8990: 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  f ((n == SQLiteE
89a0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20  rrorCode.Ok) && 
89b0: 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e  (stmt != IntPtr.
89c0: 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20  Zero))..        
89d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
89e0: 20 20 20 20 20 69 66 20 28 73 74 61 74 65 6d 65       if (stateme
89f0: 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c  ntHandle != null
8a00: 29 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  ) statementHandl
8a10: 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20  e.Dispose();..  
8a20: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
8a30: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 65  ementHandle = ne
8a40: 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  w SQLiteStatemen
8a50: 74 48 61 6e 64 6c 65 28 5f 73 71 6c 2c 20 73 74  tHandle(_sql, st
8a60: 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mt);..          
8a70: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
8a80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
8a90: 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c   (statementHandl
8aa0: 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
8ab0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8ac0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
8ad0: 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28  ction.OnChanged(
8ae0: 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63  null, new Connec
8af0: 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a  tionEventArgs(..
8b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
8b10: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  LiteConnectionEv
8b20: 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69  entType.NewCriti
8b30: 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c  calHandle, null,
8b40: 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
8b50: 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c        null, null
8b60: 2c 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  , statementHandl
8b70: 65 2c 20 73 74 72 53 71 6c 2c 20 6e 65 77 20 6f  e, strSql, new o
8b80: 62 6a 65 63 74 5b 5d 20 7b 20 63 6e 6e 2c 0d 0a  bject[] { cnn,..
8b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
8ba0: 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20  rSql, previous, 
8bb0: 74 69 6d 65 6f 75 74 4d 53 20 7d 29 29 3b 0d 0a  timeoutMS }));..
8bc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8bd0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d           if (n =
8be0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
8bf0: 65 2e 49 6e 74 65 72 72 75 70 74 29 0d 0a 20 20  e.Interrupt)..  
8c00: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
8c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
8c20: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
8c30: 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61  ErrorCode.Schema
8c40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
8c50: 65 74 72 69 65 73 2b 2b 3b 0d 0a 20 20 20 20 20  etries++;..     
8c60: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
8c70: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
8c80: 64 65 2e 45 72 72 6f 72 29 0d 0a 20 20 20 20 20  de.Error)..     
8c90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8ca0: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43      if (String.C
8cb0: 6f 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45 72  ompare(GetLastEr
8cc0: 72 6f 72 28 29 2c 20 22 6e 65 61 72 20 5c 22 54  ror(), "near \"T
8cd0: 59 50 45 53 5c 22 3a 20 73 79 6e 74 61 78 20 65  YPES\": syntax e
8ce0: 72 72 6f 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d  rror", StringCom
8cf0: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
8d00: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
8d10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
8d30: 6e 74 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e  nt pos = strSql.
8d40: 49 6e 64 65 78 4f 66 28 27 3b 27 29 3b 0d 0a 20  IndexOf(';');.. 
8d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
8d60: 28 70 6f 73 20 3d 3d 20 2d 31 29 20 70 6f 73 20  (pos == -1) pos 
8d70: 3d 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  = strSql.Length 
8d80: 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  - 1;....        
8d90: 20 20 20 20 20 20 74 79 70 65 64 65 66 73 20 3d        typedefs =
8da0: 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e   strSql.Substrin
8db0: 67 28 30 2c 20 70 6f 73 20 2b 20 31 29 3b 0d 0a  g(0, pos + 1);..
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
8dd0: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 53 75  rSql = strSql.Su
8de0: 62 73 74 72 69 6e 67 28 70 6f 73 20 2b 20 31 29  bstring(pos + 1)
8df0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8e00: 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22     strRemain = "
8e10: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
8e20: 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d      while (cmd =
8e30: 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c  = null && strSql
8e40: 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20  .Length > 0)..  
8e50: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
8e70: 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e  md = Prepare(cnn
8e80: 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f  , strSql, previo
8e90: 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72  us, timeoutMS, r
8ea0: 65 66 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a  ef strRemain);..
8eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ec0: 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61  strSql = strRema
8ed0: 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in;..           
8ee0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8ef0: 20 20 20 20 20 20 69 66 20 28 63 6d 64 20 21 3d        if (cmd !=
8f00: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
8f10: 20 20 20 20 20 20 20 20 63 6d 64 2e 53 65 74 54          cmd.SetT
8f20: 79 70 65 73 28 74 79 70 65 64 65 66 73 29 3b 0d  ypes(typedefs);.
8f30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8f40: 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20   return cmd;..  
8f50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66            }..#if
8f60: 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f   (NET_35 || NET_
8f70: 34 30 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20  40 || NET_45 || 
8f80: 4e 45 54 5f 34 35 31 29 20 26 26 20 21 50 4c 41  NET_451) && !PLA
8f90: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
8fa0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
8fb0: 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 62 75      else if (_bu
8fc0: 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 3d 20  ildingSchema == 
8fd0: 66 61 6c 73 65 20 26 26 20 53 74 72 69 6e 67 2e  false && String.
8fe0: 43 6f 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45  Compare(GetLastE
8ff0: 72 72 6f 72 28 29 2c 20 30 2c 20 22 6e 6f 20 73  rror(), 0, "no s
9000: 75 63 68 20 74 61 62 6c 65 3a 20 54 45 4d 50 2e  uch table: TEMP.
9010: 53 43 48 45 4d 41 22 2c 20 30 2c 20 32 36 2c 20  SCHEMA", 0, 26, 
9020: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
9030: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
9040: 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  se) == 0)..     
9050: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9060: 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61 69          strRemai
9070: 6e 20 3d 20 22 22 3b 0d 0a 20 20 20 20 20 20 20  n = "";..       
9080: 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e 67         _building
9090: 53 63 68 65 6d 61 20 3d 20 74 72 75 65 3b 0d 0a  Schema = true;..
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
90b0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
90c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
90d0: 20 20 20 20 49 53 51 4c 69 74 65 53 63 68 65 6d      ISQLiteSchem
90e0: 61 45 78 74 65 6e 73 69 6f 6e 73 20 65 78 74 20  aExtensions ext 
90f0: 3d 20 28 28 49 53 65 72 76 69 63 65 50 72 6f 76  = ((IServiceProv
9100: 69 64 65 72 29 53 51 4c 69 74 65 46 61 63 74 6f  ider)SQLiteFacto
9110: 72 79 2e 49 6e 73 74 61 6e 63 65 29 2e 47 65 74  ry.Instance).Get
9120: 53 65 72 76 69 63 65 28 74 79 70 65 6f 66 28 49  Service(typeof(I
9130: 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65  SQLiteSchemaExte
9140: 6e 73 69 6f 6e 73 29 29 20 61 73 20 49 53 51 4c  nsions)) as ISQL
9150: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
9160: 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ons;....        
9170: 20 20 20 20 20 20 20 20 69 66 20 28 65 78 74 20          if (ext 
9180: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
9190: 20 20 20 20 20 20 20 20 20 20 20 20 65 78 74 2e              ext.
91a0: 42 75 69 6c 64 54 65 6d 70 53 63 68 65 6d 61 28  BuildTempSchema(
91b0: 63 6e 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  cnn);....       
91c0: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
91d0: 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73  cmd == null && s
91e0: 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30  trSql.Length > 0
91f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9200: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9210: 20 20 20 20 20 20 20 20 63 6d 64 20 3d 20 50 72          cmd = Pr
9220: 65 70 61 72 65 28 63 6e 6e 2c 20 73 74 72 53 71  epare(cnn, strSq
9230: 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d  l, previous, tim
9240: 65 6f 75 74 4d 53 2c 20 72 65 66 20 73 74 72 52  eoutMS, ref strR
9250: 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20  emain);..       
9260: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71             strSq
9270: 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a  l = strRemain;..
9280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9290: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
92a0: 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b       return cmd;
92b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
92c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
92d0: 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
92e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
92f0: 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c             _buil
9300: 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 66 61 6c  dingSchema = fal
9310: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
9320: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
9330: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20    }..#endif..   
9340: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9350: 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d      else if (n =
9360: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
9370: 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d  e.Locked || n ==
9380: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9390: 2e 42 75 73 79 29 20 2f 2f 20 4c 6f 63 6b 65 64  .Busy) // Locked
93a0: 20 2d 2d 20 64 65 6c 61 79 20 61 20 73 6d 61 6c   -- delay a smal
93b0: 6c 20 61 6d 6f 75 6e 74 20 62 65 66 6f 72 65 20  l amount before 
93c0: 72 65 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20  retrying..      
93d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
93e0: 20 20 20 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e     // Keep tryin
93f0: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  g..            i
9400: 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20  f (rnd == null) 
9410: 2f 2f 20 46 69 72 73 74 20 74 69 6d 65 20 77 65  // First time we
9420: 27 76 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  've encountered 
9430: 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20  the lock..      
9440: 20 20 20 20 20 20 20 20 72 6e 64 20 3d 20 6e 65          rnd = ne
9450: 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20  w Random();.... 
9460: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66             // If
9470: 20 77 65 27 76 65 20 65 78 63 65 65 64 65 64 20   we've exceeded 
9480: 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69  the command's ti
9490: 6d 65 6f 75 74 2c 20 67 69 76 65 20 75 70 20 61  meout, give up a
94a0: 6e 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f  nd throw an erro
94b0: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  r..            i
94c0: 66 20 28 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e  f ((uint)Environ
94d0: 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d  ment.TickCount -
94e0: 20 73 74 61 72 74 74 69 63 6b 20 3e 20 74 69 6d   starttick > tim
94f0: 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20 20 20 20  eoutMS)..       
9500: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9510: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
9520: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
9530: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
9540: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
9550: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
9560: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
9570: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9580: 20 20 20 2f 2f 20 4f 74 68 65 72 77 69 73 65 20     // Otherwise 
9590: 73 6c 65 65 70 20 66 6f 72 20 61 20 72 61 6e 64  sleep for a rand
95a0: 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d  om amount of tim
95b0: 65 20 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20  e up to 150ms.. 
95c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
95d0: 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54 68  tem.Threading.Th
95e0: 72 65 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e  read.Sleep(rnd.N
95f0: 65 78 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20  ext(1, 150));.. 
9600: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9610: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9620: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
9630: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
9640: 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75  rrorCode.Interru
9650: 70 74 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b  pt) return null;
9660: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
9670: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
9680: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
9690: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
96a0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
96b0: 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ());....        
96c0: 73 74 72 52 65 6d 61 69 6e 20 3d 20 55 54 46 38  strRemain = UTF8
96d0: 54 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 6c 65  ToString(ptr, le
96e0: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  n);....        i
96f0: 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e 64  f (statementHand
9700: 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 63 6d 64 20  le != null) cmd 
9710: 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74  = new SQLiteStat
9720: 65 6d 65 6e 74 28 74 68 69 73 2c 20 66 6c 61 67  ement(this, flag
9730: 73 2c 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64  s, statementHand
9740: 6c 65 2c 20 73 74 72 53 71 6c 2e 53 75 62 73 74  le, strSql.Subst
9750: 72 69 6e 67 28 30 2c 20 73 74 72 53 71 6c 2e 4c  ring(0, strSql.L
9760: 65 6e 67 74 68 20 2d 20 73 74 72 52 65 6d 61 69  ength - strRemai
9770: 6e 2e 4c 65 6e 67 74 68 29 2c 20 70 72 65 76 69  n.Length), previ
9780: 6f 75 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ous);....       
9790: 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20   return cmd;..  
97a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 66 69 6e      }..      fin
97b0: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ally..      {.. 
97c0: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 46 72         handle.Fr
97d0: 65 65 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  ee();..      }..
97e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f      }....    pro
97f0: 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f  tected static vo
9800: 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74  id LogBind(SQLit
9810: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
9820: 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64   handle, int ind
9830: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
9840: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
9850: 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65  eIntPtr = handle
9860: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
9870: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
9880: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
9890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 75  ..            Cu
98a0: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
98b0: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
98c0: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
98d0: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
98e0: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 4e  ramter #{1} as N
98f0: 55 4c 4c 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  ULL...",..      
9900: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
9910: 74 72 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20  tr, index));..  
9920: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
9930: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
9940: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
9950: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
9960: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
9970: 2c 20 56 61 6c 75 65 54 79 70 65 20 76 61 6c 75  , ValueType valu
9980: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
9990: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
99a0: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
99b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
99c0: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
99d0: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
99e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69  .            "Bi
99f0: 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  nding statement 
9a00: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31  {0} paramter #{1
9a10: 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69  } as type {2} wi
9a20: 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d  th value {{{3}}}
9a30: 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
9a40: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
9a50: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 2e 47 65   index, value.Ge
9a60: 74 54 79 70 65 28 29 2c 20 76 61 6c 75 65 29 29  tType(), value))
9a70: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9a80: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
9a90: 74 72 69 6e 67 20 46 6f 72 6d 61 74 44 61 74 65  tring FormatDate
9aa0: 54 69 6d 65 28 44 61 74 65 54 69 6d 65 20 76 61  Time(DateTime va
9ab0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
9ac0: 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64       StringBuild
9ad0: 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  er result = new 
9ae0: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b  StringBuilder();
9af0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  ....        resu
9b00: 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e  lt.Append(value.
9b10: 54 6f 53 74 72 69 6e 67 28 22 79 79 79 79 2d 4d  ToString("yyyy-M
9b20: 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46 46  M-ddTHH:mm:ss.FF
9b30: 46 46 46 46 46 4b 22 29 29 3b 0d 0a 20 20 20 20  FFFFFK"));..    
9b40: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
9b50: 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20 20 20  d(' ');..       
9b60: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76   result.Append(v
9b70: 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d 0a 20 20 20  alue.Kind);..   
9b80: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
9b90: 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20 20  nd(' ');..      
9ba0: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
9bb0: 76 61 6c 75 65 2e 54 69 63 6b 73 29 3b 0d 0a 0d  value.Ticks);...
9bc0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
9bd0: 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28  result.ToString(
9be0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
9bf0: 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69   protected stati
9c00: 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53  c void LogBind(S
9c10: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
9c20: 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74  ndle handle, int
9c30: 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65   index, DateTime
9c40: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
9c50: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
9c60: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
9c70: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
9c80: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
9c90: 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72  ssage(String.For
9ca0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
9cb0: 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65    "Binding state
9cc0: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
9cd0: 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b  r #{1} as type {
9ce0: 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b  2} with value {{
9cf0: 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20  {3}}}...",..    
9d00: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
9d10: 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70  tPtr, index, typ
9d20: 65 6f 66 28 44 61 74 65 54 69 6d 65 29 2c 20 46  eof(DateTime), F
9d30: 6f 72 6d 61 74 44 61 74 65 54 69 6d 65 28 76 61  ormatDateTime(va
9d40: 6c 75 65 29 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  lue)));..    }..
9d50: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
9d60: 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42  static void LogB
9d70: 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ind(SQLiteStatem
9d80: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
9d90: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72  , int index, str
9da0: 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ing value)..    
9db0: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
9dc0: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
9dd0: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
9de0: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
9df0: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
9e00: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
9e10: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
9e20: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
9e30: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
9e40: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
9e50: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
9e60: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
9e70: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
9e80: 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 2c 20  typeof(String), 
9e90: 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20  (value != null) 
9ea0: 3f 20 76 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c  ? value : "<null
9eb0: 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  >"));..    }....
9ec0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
9ed0: 69 63 20 73 74 72 69 6e 67 20 54 6f 48 65 78 61  ic string ToHexa
9ee0: 64 65 63 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a  decimalString(..
9ef0: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 61          byte[] a
9f00: 72 72 61 79 0d 0a 20 20 20 20 20 20 20 20 29 0d  rray..        ).
9f10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
9f20: 69 66 20 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c  if (array == nul
9f30: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
9f40: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
9f50: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75          StringBu
9f60: 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e  ilder result = n
9f70: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
9f80: 28 61 72 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20  (array.Length * 
9f90: 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  2);....        i
9fa0: 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61 72 72 61  nt length = arra
9fb0: 79 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20  y.Length;....   
9fc0: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
9fd0: 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
9fe0: 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b   length; index++
9ff0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
a000: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 61 72 72  esult.Append(arr
a010: 61 79 5b 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69  ay[index].ToStri
a020: 6e 67 28 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20  ng("x2"));....  
a030: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
a040: 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  ult.ToString();.
a050: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
a060: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
a070: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
a080: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
a090: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
a0a0: 64 65 78 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75  dex, byte[] valu
a0b0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
a0c0: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
a0d0: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
a0e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
a0f0: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
a100: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
a110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69  .            "Bi
a120: 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  nding statement 
a130: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31  {0} paramter #{1
a140: 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69  } as type {2} wi
a150: 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d  th value {{{3}}}
a160: 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
a170: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
a180: 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 42   index, typeof(B
a190: 79 74 65 5b 5d 29 2c 20 28 76 61 6c 75 65 20 21  yte[]), (value !
a1a0: 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 48 65 78 61  = null) ? ToHexa
a1b0: 64 65 63 69 6d 61 6c 53 74 72 69 6e 67 28 76 61  decimalString(va
a1c0: 6c 75 65 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29  lue) : "<null>")
a1d0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
a1e0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a1f0: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 6f 75  de void Bind_Dou
a200: 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
a210: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
a220: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
a230: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
a240: 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d  , double value).
a250: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
a260: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
a270: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
a280: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
a290: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
a2a0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
a2b0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
a2c0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
a2d0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
a2e0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
a2f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a300: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
a310: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
a320: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
a330: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
a340: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
a350: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
a360: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
a370: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a380: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75  sqlite3_bind_dou
a390: 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ble(handle, inde
a3a0: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69  x, value);..#eli
a3b0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
a3c0: 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  RD..        SQLi
a3d0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
a3e0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a3f0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
a400: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
a410: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
a420: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
a430: 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  e..        throw
a440: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
a450: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
a460: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
a470: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
a480: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
a490: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
a4a0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
a4b0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
a4c0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
a4d0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
a4e0: 20 42 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69   Bind_Int32(SQLi
a4f0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
a500: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
a510: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
a520: 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 76 61  nt index, int va
a530: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
a540: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
a550: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
a560: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
a570: 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  _stmt;....      
a580: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
a590: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
a5a0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
a5b0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
a5c0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
a5d0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
a5e0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
a5f0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
a600: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
a610: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
a620: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
a630: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
a640: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
a650: 64 5f 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e  d_int(handle, in
a660: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
a670: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
a680: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
a690: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
a6a0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
a6b0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
a6c0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
a6d0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
a6e0: 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 33   void Bind_UInt3
a6f0: 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  2(SQLiteStatemen
a700: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
a710: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
a720: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
a730: 75 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20  uint value)..   
a740: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
a750: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
a760: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
a770: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
a780: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
a790: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
a7a0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
a7b0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
a7c0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
a7d0: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
a7e0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
a7f0: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
a800: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
a810: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
a820: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
a830: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
a840: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
a850: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a  teErrorCode n;..
a860: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
a870: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
a880: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e  nectionFlags.Bin
a890: 64 55 49 6e 74 33 32 41 73 49 6e 74 36 34 29 20  dUInt32AsInt64) 
a8a0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
a8b0: 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e  ionFlags.BindUIn
a8c0: 74 33 32 41 73 49 6e 74 36 34 29 0d 0a 20 20 20  t32AsInt64)..   
a8d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a8e0: 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 32 20      long value2 
a8f0: 3d 20 76 61 6c 75 65 3b 0d 0a 0d 0a 23 69 66 20  = value;....#if 
a900: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
a910: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
a920: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
a930: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a940: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
a950: 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  64(handle, index
a960: 2c 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 69  , value2);..#eli
a970: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
a980: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
a990: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
a9a0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a9b0: 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72  bind_int64_inter
a9c0: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
a9d0: 2c 20 72 65 66 20 76 61 6c 75 65 32 29 3b 0d 0a  , ref value2);..
a9e0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
a9f0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
aa00: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
aa10: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
aa20: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
aa30: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
aa40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
aa50: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
aa60: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
aa70: 5f 62 69 6e 64 5f 75 69 6e 74 28 68 61 6e 64 6c  _bind_uint(handl
aa80: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
aa90: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
aaa0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
aab0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
aac0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
aad0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
aae0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
aaf0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
ab00: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
ab10: 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74 36 34   void Bind_Int64
ab20: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
ab30: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
ab40: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
ab50: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 6c  gs, int index, l
ab60: 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ong value)..    
ab70: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
ab80: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
ab90: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
aba0: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
abb0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
abc0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
abd0: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
abe0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
abf0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
ac00: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
ac10: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
ac20: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
ac30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
ac40: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
ac50: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
ac60: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ac70: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
ac80: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
ac90: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
aca0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61  e3_bind_int64(ha
acb0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
acc0: 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
acd0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
ace0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
acf0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
ad00: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ad10: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
ad20: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
ad30: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
ad40: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
ad50: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
ad60: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
ad70: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
ad80: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
ad90: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
ada0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
adb0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
adc0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
add0: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
ade0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
adf0: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55  ride void Bind_U
ae00: 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74  Int64(SQLiteStat
ae10: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
ae20: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
ae30: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
ae40: 65 78 2c 20 75 6c 6f 6e 67 20 76 61 6c 75 65 29  ex, ulong value)
ae50: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
ae60: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
ae70: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
ae80: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
ae90: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
aea0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
aeb0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
aec0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
aed0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
aee0: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
aef0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
af00: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
af10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
af20: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
af30: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
af40: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
af50: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
af60: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
af70: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
af80: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69  .sqlite3_bind_ui
af90: 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64  nt64(handle, ind
afa0: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ex, value);..#el
afb0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
afc0: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ARD..        SQL
afd0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
afe0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
aff0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
b000: 64 5f 75 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  d_uint64_interop
b010: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
b020: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
b030: 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  se..        thro
b040: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
b050: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
b060: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
b070: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
b080: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
b090: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
b0a0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
b0b0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
b0c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
b0d0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
b0e0: 64 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c 69  d Bind_Text(SQLi
b0f0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
b100: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
b110: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
b120: 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67  nt index, string
b130: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
b140: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
b150: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
b160: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
b170: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
b180: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
b190: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
b1a0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
b1b0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
b1c0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
b1d0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
b1e0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
b1f0: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
b200: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
b210: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
b220: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
b230: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
b240: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
b250: 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29   = ToUTF8(value)
b260: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
b270: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
b280: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
b290: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
b2a0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
b2b0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
b2c0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
b2d0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
b2e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b2f0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
b300: 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20  e, index, b);.. 
b310: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
b320: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
b330: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
b340: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
b350: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
b360: 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e  _text(handle, in
b370: 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68  dex, b, b.Length
b380: 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d   - 1, (IntPtr)(-
b390: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  1));..        if
b3a0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
b3b0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
b3c0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
b3d0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
b3e0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
b3f0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
b400: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
b410: 6e 64 5f 44 61 74 65 54 69 6d 65 28 53 51 4c 69  nd_DateTime(SQLi
b420: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
b430: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
b440: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
b450: 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69  nt index, DateTi
b460: 6d 65 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  me dt)..    {.. 
b470: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
b480: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
b490: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
b4a0: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
b4b0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
b4c0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
b4d0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
b4e0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
b4f0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
b500: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
b510: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
b520: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
b530: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
b540: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
b550: 20 64 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d   dt);..        }
b560: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
b570: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
b580: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
b590: 6e 46 6c 61 67 73 2e 42 69 6e 64 44 61 74 65 54  nFlags.BindDateT
b5a0: 69 6d 65 57 69 74 68 4b 69 6e 64 29 20 3d 3d 20  imeWithKind) == 
b5b0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
b5c0: 46 6c 61 67 73 2e 42 69 6e 64 44 61 74 65 54 69  Flags.BindDateTi
b5d0: 6d 65 57 69 74 68 4b 69 6e 64 29 0d 0a 20 20 20  meWithKind)..   
b5e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b5f0: 20 20 20 20 69 66 20 28 28 5f 64 61 74 65 74 69      if ((_dateti
b600: 6d 65 4b 69 6e 64 20 21 3d 20 44 61 74 65 54 69  meKind != DateTi
b610: 6d 65 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66 69  meKind.Unspecifi
b620: 65 64 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ed) &&..        
b630: 20 20 20 20 20 20 20 20 28 64 74 2e 4b 69 6e 64          (dt.Kind
b640: 20 21 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64   != DateTimeKind
b650: 2e 55 6e 73 70 65 63 69 66 69 65 64 29 20 26 26  .Unspecified) &&
b660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b670: 20 20 28 64 74 2e 4b 69 6e 64 20 21 3d 20 5f 64    (dt.Kind != _d
b680: 61 74 65 74 69 6d 65 4b 69 6e 64 29 29 0d 0a 20  atetimeKind)).. 
b690: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
b6b0: 20 28 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 20   (_datetimeKind 
b6c0: 3d 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e  == DateTimeKind.
b6d0: 55 74 63 29 0d 0a 20 20 20 20 20 20 20 20 20 20  Utc)..          
b6e0: 20 20 20 20 20 20 20 20 20 20 64 74 20 3d 20 64            dt = d
b6f0: 74 2e 54 6f 55 6e 69 76 65 72 73 61 6c 54 69 6d  t.ToUniversalTim
b700: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
b710: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f        else if (_
b720: 64 61 74 65 74 69 6d 65 4b 69 6e 64 20 3d 3d 20  datetimeKind == 
b730: 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 4c 6f 63  DateTimeKind.Loc
b740: 61 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  al)..           
b750: 20 20 20 20 20 20 20 20 20 64 74 20 3d 20 64 74           dt = dt
b760: 2e 54 6f 4c 6f 63 61 6c 54 69 6d 65 28 29 3b 0d  .ToLocalTime();.
b770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b780: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b790: 20 20 20 20 20 73 77 69 74 63 68 20 28 5f 64 61       switch (_da
b7a0: 74 65 74 69 6d 65 46 6f 72 6d 61 74 29 0d 0a 20  tetimeFormat).. 
b7b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b7c0: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74        case SQLit
b7d0: 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63  eDateFormats.Tic
b7e0: 6b 73 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ks:..           
b7f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b800: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67              long
b810: 20 76 61 6c 75 65 20 3d 20 64 74 2e 54 69 63 6b   value = dt.Tick
b820: 73 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  s;....#if !PLATF
b830: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
b840: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
b850: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66            if ((f
b860: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
b870: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
b880: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
b890: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
b8a0: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
b8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
b8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8d0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
b8e0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
b8f0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
b900: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
b910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b920: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
b930: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
b940: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
b950: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28  ite3_bind_int64(
b960: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
b970: 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53  alue);..#elif !S
b980: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
b990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9a0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
b9b0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
b9c0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b9d0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69  te3_bind_int64_i
b9e0: 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69  nterop(handle, i
b9f0: 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29  ndex, ref value)
ba00: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
ba10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
ba20: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
ba30: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
ba40: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba60: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
ba70: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
ba80: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
ba90: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
baa0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bac0: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
bad0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
bae0: 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
baf0: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75  teDateFormats.Ju
bb00: 6c 69 61 6e 44 61 79 3a 0d 0a 20 20 20 20 20 20  lianDay:..      
bb10: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb30: 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 20 3d 20   double value = 
bb40: 54 6f 4a 75 6c 69 61 6e 44 61 79 28 64 74 29 3b  ToJulianDay(dt);
bb50: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
bb60: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
bb70: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
bb80: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
bb90: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
bba0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
bbb0: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
bbc0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
bbd0: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20  Bind)..         
bbe0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
bbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc00: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
bc10: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
bc20: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
bc30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
bc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc50: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
bc60: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
bc70: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
bc80: 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68  e3_bind_double(h
bc90: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
bca0: 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
bcb0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
bcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bcd0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
bce0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
bcf0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
bd00: 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69  e3_bind_double_i
bd10: 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69  nterop(handle, i
bd20: 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29  ndex, ref value)
bd30: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
bd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
bd50: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
bd60: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
bd70: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
bd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd90: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
bda0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
bdb0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
bdc0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
bdd0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdf0: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
be00: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
be10: 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
be20: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e  teDateFormats.Un
be30: 69 78 45 70 6f 63 68 3a 0d 0a 20 20 20 20 20 20  ixEpoch:..      
be40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
be50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be60: 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20 43 6f   long value = Co
be70: 6e 76 65 72 74 2e 54 6f 49 6e 74 36 34 28 64 74  nvert.ToInt64(dt
be80: 2e 53 75 62 74 72 61 63 74 28 55 6e 69 78 45 70  .Subtract(UnixEp
be90: 6f 63 68 29 2e 54 6f 74 61 6c 53 65 63 6f 6e 64  och).TotalSecond
bea0: 73 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  s);....#if !PLAT
beb0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
bec0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
bed0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
bee0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
bef0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
bf00: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
bf10: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
bf20: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
bf40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bf50: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
bf60: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
bf70: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
bf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
bf90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bfa0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
bfb0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
bfc0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
bfd0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
bfe0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
bff0: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
c000: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
c010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c020: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
c030: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
c040: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
c050: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f  ite3_bind_int64_
c060: 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20  interop(handle, 
c070: 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65  index, ref value
c080: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
c090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
c0a0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
c0b0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
c0c0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
c0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0e0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
c0f0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
c100: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
c110: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
c120: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
c130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c140: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
c150: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
c160: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a          default:
c170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c180: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c190: 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
c1a0: 62 20 3d 20 54 6f 55 54 46 38 28 64 74 29 3b 0d  b = ToUTF8(dt);.
c1b0: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
c1c0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
c1d0: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  K..             
c1e0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
c1f0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
c200: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
c210: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
c220: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
c230: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ind)..          
c240: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c260: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
c270: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d  dle, index, b);.
c280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c290: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
c2a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c2b0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
c2c0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
c2d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c2e0: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
c2f0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
c300: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
c310: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
c320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c330: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
c340: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
c350: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
c360: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
c370: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
c380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c390: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
c3b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
c3c0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
c3d0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
c3e0: 6e 64 5f 42 6c 6f 62 28 53 51 4c 69 74 65 53 74  nd_Blob(SQLiteSt
c3f0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
c400: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
c410: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
c420: 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 62 6c 6f  ndex, byte[] blo
c430: 62 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d 0a 20  bData)..    {.. 
c440: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
c450: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
c460: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
c470: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
c480: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
c490: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
c4a0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
c4b0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
c4c0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
c4d0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
c4e0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
c4f0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
c500: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
c510: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
c520: 20 62 6c 6f 62 44 61 74 61 29 3b 0d 0a 20 20 20   blobData);..   
c530: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
c540: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
c550: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
c560: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
c570: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62  s.sqlite3_bind_b
c580: 6c 6f 62 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  lob(handle, inde
c590: 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20 62 6c 6f  x, blobData, blo
c5a0: 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c 20 28 49  bData.Length, (I
c5b0: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
c5c0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
c5d0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
c5e0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
c5f0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
c600: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
c610: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
c620: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
c630: 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c 6c 28   void Bind_Null(
c640: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
c650: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
c660: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
c670: 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  s, int index).. 
c680: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
c690: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
c6a0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
c6b0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
c6c0: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
c6d0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
c6e0: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
c6f0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
c700: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
c710: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
c720: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
c730: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
c740: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c750: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
c760: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
c770: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
c780: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
c790: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
c7a0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c7b0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c  qlite3_bind_null
c7c0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b  (handle, index);
c7d0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
c7e0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
c7f0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
c800: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
c810: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
c820: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
c830: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
c840: 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61  ride int Bind_Pa
c850: 72 61 6d 43 6f 75 6e 74 28 53 51 4c 69 74 65 53  ramCount(SQLiteS
c860: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
c870: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
c880: 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20  lags flags)..   
c890: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
c8a0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
c8b0: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
c8c0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20  _sqlite_stmt;.. 
c8d0: 20 20 20 20 20 20 20 69 6e 74 20 76 61 6c 75 65         int value
c8e0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
c8f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
c900: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f  ind_parameter_co
c910: 75 6e 74 28 68 61 6e 64 6c 65 29 3b 0d 0a 0d 0a  unt(handle);....
c920: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
c930: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
c940: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
c950: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
c960: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
c970: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
c980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
c990: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
c9a0: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
c9b0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
c9c0: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
c9d0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9f0: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
ca00: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74               "St
ca20: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
ca30: 6d 74 65 72 20 63 6f 75 6e 74 20 69 73 20 7b 31  mter count is {1
ca40: 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
ca50: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
ca60: 74 72 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20  tr, value));..  
ca70: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ca80: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b     return value;
ca90: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
caa0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
cab0: 20 73 74 72 69 6e 67 20 42 69 6e 64 5f 50 61 72   string Bind_Par
cac0: 61 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61  amName(SQLiteSta
cad0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
cae0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
caf0: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
cb00: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
cb10: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
cb20: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
cb30: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
cb40: 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20  _stmt;..        
cb50: 73 74 72 69 6e 67 20 6e 61 6d 65 3b 0d 0a 0d 0a  string name;....
cb60: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
cb70: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 69 6e  DARD..        in
cb80: 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  t len = 0;..    
cb90: 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54      name = UTF8T
cba0: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
cbb0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
cbc0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
cbd0: 65 72 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  er_name_interop(
cbe0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
cbf0: 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ef len), len);..
cc00: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 6e  #else..        n
cc10: 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ame = UTF8ToStri
cc20: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
cc30: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
cc40: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
cc50: 6d 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  me(handle, index
cc60: 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  ), -1);..#endif.
cc70: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
cc80: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
cc90: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
cca0: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
ccb0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
ccc0: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
ccd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cce0: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
ccf0: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
cd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
cd10: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
cd20: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
cd30: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
cd40: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
cd50: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
cd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd70: 22 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70  "Statement {0} p
cd80: 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 6e 61 6d  aramter #{1} nam
cd90: 65 20 69 73 20 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d  e is {{{2}}}.",.
cda0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cdb0: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69   handleIntPtr, i
cdc0: 6e 64 65 78 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20  ndex, name));.. 
cdd0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
cde0: 20 20 20 20 72 65 74 75 72 6e 20 6e 61 6d 65 3b      return name;
cdf0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
ce00: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
ce10: 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 49   int Bind_ParamI
ce20: 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61 74 65  ndex(SQLiteState
ce30: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
ce40: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
ce50: 20 66 6c 61 67 73 2c 20 73 74 72 69 6e 67 20 70   flags, string p
ce60: 61 72 61 6d 4e 61 6d 65 29 0d 0a 20 20 20 20 7b  aramName)..    {
ce70: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
ce80: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
ce90: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
cea0: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20  qlite_stmt;..   
ceb0: 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d       int index =
cec0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ced0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
cee0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65  d_parameter_inde
cef0: 78 28 68 61 6e 64 6c 65 2c 20 54 6f 55 54 46 38  x(handle, ToUTF8
cf00: 28 70 61 72 61 6d 4e 61 6d 65 29 29 3b 0d 0a 0d  (paramName));...
cf10: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
cf20: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
cf30: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
cf40: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
cf50: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
cf60: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
cf70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  {..            I
cf80: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
cf90: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
cfa0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
cfb0: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
cfc0: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
cfd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cfe0: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
cff0: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
d010: 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72  tatement {0} par
d020: 61 6d 74 65 72 20 69 6e 64 65 78 20 6f 66 20 6e  amter index of n
d030: 61 6d 65 20 7b 7b 7b 31 7d 7d 7d 20 69 73 20 23  ame {{{1}}} is #
d040: 7b 32 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  {2}.",..        
d050: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
d060: 74 50 74 72 2c 20 70 61 72 61 6d 4e 61 6d 65 2c  tPtr, paramName,
d070: 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 20   index));..     
d080: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
d090: 72 65 74 75 72 6e 20 69 6e 64 65 78 3b 0d 0a 20  return index;.. 
d0a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d0b0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
d0c0: 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51  t ColumnCount(SQ
d0d0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
d0e0: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
d0f0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
d100: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d110: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
d120: 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
d130: 74 6d 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  tmt);..    }....
d140: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d150: 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
d160: 75 6d 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  umnName(SQLiteSt
d170: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
d180: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
d190: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
d1a0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
d1b0: 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
d1c0: 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61   IntPtr p = Unsa
d1d0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
d1e0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
d1f0: 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ame_interop(stmt
d200: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
d210: 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 3b 0d  ndex, ref len);.
d220: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 49 6e  .#else..      In
d230: 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
d240: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d250: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
d260: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
d270: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e  mt, index);..#en
d280: 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28 70  dif..      if (p
d290: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
d2a0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
d2b0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
d2c0: 69 6f 6e 28 53 51 4c 69 74 65 45 72 72 6f 72 43  ion(SQLiteErrorC
d2d0: 6f 64 65 2e 4e 6f 4d 65 6d 2c 20 47 65 74 4c 61  ode.NoMem, GetLa
d2e0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 69 66  stError());..#if
d2f0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
d300: 44 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  D..      return 
d310: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20  UTF8ToString(p, 
d320: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
d330: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
d340: 6f 53 74 72 69 6e 67 28 70 2c 20 2d 31 29 3b 0d  oString(p, -1);.
d350: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
d360: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
d370: 76 65 72 72 69 64 65 20 54 79 70 65 41 66 66 69  verride TypeAffi
d380: 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66 66 69 6e  nity ColumnAffin
d390: 69 74 79 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ity(SQLiteStatem
d3a0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
d3b0: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
d3c0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
d3d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d3e0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70  lite3_column_typ
d3f0: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
d400: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
d410: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
d420: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
d430: 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70 65 28 53  ing ColumnType(S
d440: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
d450: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
d460: 72 65 66 20 54 79 70 65 41 66 66 69 6e 69 74 79  ref TypeAffinity
d470: 20 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20   nAffinity)..   
d480: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65   {..      int le
d490: 6e 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  n;..#if !SQLITE_
d4a0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
d4b0: 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  len = 0;..      
d4c0: 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66  IntPtr p = Unsaf
d4d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
d4e0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
d4f0: 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f 70 28 73  cltype_interop(s
d500: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
d510: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e  , index, ref len
d520: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
d530: 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20   len = -1;..    
d540: 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73    IntPtr p = Uns
d550: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d560: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
d570: 64 65 63 6c 74 79 70 65 28 73 74 6d 74 2e 5f 73  decltype(stmt._s
d580: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
d590: 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  x);..#endif..   
d5a0: 20 20 20 6e 41 66 66 69 6e 69 74 79 20 3d 20 43     nAffinity = C
d5b0: 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74  olumnAffinity(st
d5c0: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20  mt, index);.... 
d5d0: 20 20 20 20 20 69 66 20 28 70 20 21 3d 20 49 6e       if (p != In
d5e0: 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72  tPtr.Zero) retur
d5f0: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  n UTF8ToString(p
d600: 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 65  , len);..      e
d610: 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  lse..      {..  
d620: 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
d630: 72 20 3d 20 73 74 6d 74 2e 54 79 70 65 44 65 66  r = stmt.TypeDef
d640: 69 6e 69 74 69 6f 6e 73 3b 0d 0a 20 20 20 20 20  initions;..     
d650: 20 20 20 69 66 20 28 61 72 20 21 3d 20 6e 75 6c     if (ar != nul
d660: 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
d670: 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e 64           if (ind
d680: 65 78 20 3c 20 61 72 2e 4c 65 6e 67 74 68 20 26  ex < ar.Length &
d690: 26 20 61 72 5b 69 6e 64 65 78 5d 20 21 3d 20 6e  & ar[index] != n
d6a0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
d6b0: 20 20 72 65 74 75 72 6e 20 61 72 5b 69 6e 64 65    return ar[inde
d6c0: 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  x];..        }..
d6d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
d6e0: 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a  tring.Empty;....
d6f0: 20 20 20 20 20 20 20 20 2f 2f 73 77 69 74 63 68          //switch
d700: 20 28 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20 20   (nAffinity)..  
d710: 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20        //{..     
d720: 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65     //  case Type
d730: 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d  Affinity.Int64:.
d740: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72  .        //    r
d750: 65 74 75 72 6e 20 22 42 49 47 49 4e 54 22 3b 0d  eturn "BIGINT";.
d760: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73  .        //  cas
d770: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44  e TypeAffinity.D
d780: 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20  ouble:..        
d790: 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 44 4f  //    return "DO
d7a0: 55 42 4c 45 22 3b 0d 0a 20 20 20 20 20 20 20 20  UBLE";..        
d7b0: 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41 66 66  //  case TypeAff
d7c0: 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20  inity.Blob:..   
d7d0: 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72       //    retur
d7e0: 6e 20 22 42 4c 4f 42 22 3b 0d 0a 20 20 20 20 20  n "BLOB";..     
d7f0: 20 20 20 2f 2f 20 20 64 65 66 61 75 6c 74 3a 0d     //  default:.
d800: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72  .        //    r
d810: 65 74 75 72 6e 20 22 54 45 58 54 22 3b 0d 0a 20  eturn "TEXT";.. 
d820: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 20 20 20 20         //}..    
d830: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
d840: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
d850: 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 49 6e  ide int ColumnIn
d860: 64 65 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d  dex(SQLiteStatem
d870: 65 6e 74 20 73 74 6d 74 2c 20 73 74 72 69 6e 67  ent stmt, string
d880: 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 0d 0a 20 20   columnName)..  
d890: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 78    {..      int x
d8a0: 20 3d 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73   = ColumnCount(s
d8b0: 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66  tmt);....      f
d8c0: 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e  or (int n = 0; n
d8d0: 20 3c 20 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20   < x; n++)..    
d8e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
d8f0: 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28  (String.Compare(
d900: 63 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 43 6f 6c 75  columnName, Colu
d910: 6d 6e 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 2c  mnName(stmt, n),
d920: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
d930: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
d940: 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20  ase) == 0)..    
d950: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d        return n;.
d960: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
d970: 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20  return -1;..    
d980: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
d990: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
d9a0: 67 20 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c  g ColumnOriginal
d9b0: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
d9c0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
d9d0: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
d9e0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
d9f0: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
da00: 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65  n = 0;..      re
da10: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
da20: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
da30: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
da40: 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
da50: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
da60: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
da70: 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e  x, ref len), len
da80: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
da90: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
daa0: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
dab0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
dac0: 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
dad0: 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ame(stmt._sqlite
dae0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d  _stmt, index), -
daf0: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
db00: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
db10: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
db20: 6e 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73  ng ColumnDatabas
db30: 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eName(SQLiteStat
db40: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
db50: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
db60: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
db70: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
db80: 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72  en = 0;..      r
db90: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
dba0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
dbb0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
dbc0: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
dbd0: 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ame_interop(stmt
dbe0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
dbf0: 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20  ndex, ref len), 
dc00: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
dc10: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
dc20: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
dc30: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
dc40: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62  te3_column_datab
dc50: 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73  ase_name(stmt._s
dc60: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
dc70: 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  x), -1);..#endif
dc80: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
dc90: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
dca0: 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61   string ColumnTa
dcb0: 62 6c 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  bleName(SQLiteSt
dcc0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
dcd0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
dce0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
dcf0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
dd00: 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
dd10: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
dd20: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
dd30: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
dd40: 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
dd50: 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  me_interop(stmt.
dd60: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
dd70: 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c  dex, ref len), l
dd80: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
dd90: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
dda0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
ddb0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
ddc0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f  e3_column_table_
ddd0: 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  name(stmt._sqlit
dde0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e_stmt, index), 
ddf0: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
de00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
de10: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
de20: 64 20 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61  d ColumnMetaData
de30: 28 73 74 72 69 6e 67 20 64 61 74 61 42 61 73 65  (string dataBase
de40: 2c 20 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20  , string table, 
de50: 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 72  string column, r
de60: 65 66 20 73 74 72 69 6e 67 20 64 61 74 61 54 79  ef string dataTy
de70: 70 65 2c 20 72 65 66 20 73 74 72 69 6e 67 20 63  pe, ref string c
de80: 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20  ollateSequence, 
de90: 72 65 66 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c  ref bool notNull
dea0: 2c 20 72 65 66 20 62 6f 6f 6c 20 70 72 69 6d 61  , ref bool prima
deb0: 72 79 4b 65 79 2c 20 72 65 66 20 62 6f 6f 6c 20  ryKey, ref bool 
dec0: 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a  autoIncrement)..
ded0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74      {..      Int
dee0: 50 74 72 20 64 61 74 61 54 79 70 65 50 74 72 20  Ptr dataTypePtr 
def0: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
df00: 20 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c        IntPtr col
df10: 6c 53 65 71 50 74 72 20 3d 20 49 6e 74 50 74 72  lSeqPtr = IntPtr
df20: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e  .Zero;..      in
df30: 74 20 6e 6e 6f 74 4e 75 6c 6c 20 3d 20 30 3b 0d  t nnotNull = 0;.
df40: 0a 20 20 20 20 20 20 69 6e 74 20 6e 70 72 69 6d  .      int nprim
df50: 61 72 79 4b 65 79 20 3d 20 30 3b 0d 0a 20 20 20  aryKey = 0;..   
df60: 20 20 20 69 6e 74 20 6e 61 75 74 6f 49 6e 63 20     int nautoInc 
df70: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  = 0;..      SQLi
df80: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a  teErrorCode n;..
df90: 20 20 20 20 20 20 69 6e 74 20 64 74 4c 65 6e 3b        int dtLen;
dfa0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 73 4c 65  ..      int csLe
dfb0: 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  n;....#if !SQLIT
dfc0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
dfd0: 20 20 64 74 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20    dtLen = 0;..  
dfe0: 20 20 20 20 63 73 4c 65 6e 20 3d 20 30 3b 0d 0a      csLen = 0;..
dff0: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
e000: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e010: 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
e020: 6d 6e 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74 65  mn_metadata_inte
e030: 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  rop(_sql, ToUTF8
e040: 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54  (dataBase), ToUT
e050: 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46  F8(table), ToUTF
e060: 38 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 64  8(column), ref d
e070: 61 74 61 54 79 70 65 50 74 72 2c 20 72 65 66 20  ataTypePtr, ref 
e080: 63 6f 6c 6c 53 65 71 50 74 72 2c 20 72 65 66 20  collSeqPtr, ref 
e090: 6e 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 6e 70  nnotNull, ref np
e0a0: 72 69 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 6e  rimaryKey, ref n
e0b0: 61 75 74 6f 49 6e 63 2c 20 72 65 66 20 64 74 4c  autoInc, ref dtL
e0c0: 65 6e 2c 20 72 65 66 20 63 73 4c 65 6e 29 3b 0d  en, ref csLen);.
e0d0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 64 74  .#else..      dt
e0e0: 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  Len = -1;..     
e0f0: 20 63 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a   csLen = -1;....
e100: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
e110: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e120: 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
e130: 6d 6e 5f 6d 65 74 61 64 61 74 61 28 5f 73 71 6c  mn_metadata(_sql
e140: 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42 61 73  , ToUTF8(dataBas
e150: 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65  e), ToUTF8(table
e160: 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e  ), ToUTF8(column
e170: 29 2c 20 72 65 66 20 64 61 74 61 54 79 70 65 50  ), ref dataTypeP
e180: 74 72 2c 20 72 65 66 20 63 6f 6c 6c 53 65 71 50  tr, ref collSeqP
e190: 74 72 2c 20 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c  tr, ref nnotNull
e1a0: 2c 20 72 65 66 20 6e 70 72 69 6d 61 72 79 4b 65  , ref nprimaryKe
e1b0: 79 2c 20 72 65 66 20 6e 61 75 74 6f 49 6e 63 29  y, ref nautoInc)
e1c0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
e1d0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
e1e0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
e1f0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
e200: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
e210: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
e220: 20 20 20 20 20 64 61 74 61 54 79 70 65 20 3d 20       dataType = 
e230: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 64 61 74  UTF8ToString(dat
e240: 61 54 79 70 65 50 74 72 2c 20 64 74 4c 65 6e 29  aTypePtr, dtLen)
e250: 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 65  ;..      collate
e260: 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54  Sequence = UTF8T
e270: 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 53 65 71 50  oString(collSeqP
e280: 74 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20  tr, csLen);.... 
e290: 20 20 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28       notNull = (
e2a0: 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d  nnotNull == 1);.
e2b0: 0a 20 20 20 20 20 20 70 72 69 6d 61 72 79 4b 65  .      primaryKe
e2c0: 79 20 3d 20 28 6e 70 72 69 6d 61 72 79 4b 65 79  y = (nprimaryKey
e2d0: 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 61   == 1);..      a
e2e0: 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 28  utoIncrement = (
e2f0: 6e 61 75 74 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d  nautoInc == 1);.
e300: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
e310: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
e320: 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65  double GetDouble
e330: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
e340: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
e350: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
e360: 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23  double value;..#
e370: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
e380: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
e390: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73       value = Uns
e3a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
e3b0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
e3c0: 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c  double(stmt._sql
e3d0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
e3e0: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
e3f0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
e400: 20 76 61 6c 75 65 20 3d 20 30 2e 30 3b 0d 0a 20   value = 0.0;.. 
e410: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
e420: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
e430: 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69  _column_double_i
e440: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
e450: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
e460: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
e470: 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
e480: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
e490: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
e4a0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72  .#endif..      r
e4b0: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20  eturn value;..  
e4c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
e4d0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 62 79  nal override sby
e4e0: 74 65 20 47 65 74 53 42 79 74 65 28 53 51 4c 69  te GetSByte(SQLi
e4f0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
e500: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
e510: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
e520: 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 73 62 79  n unchecked((sby
e530: 74 65 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d  te)(GetInt32(stm
e540: 74 2c 20 69 6e 64 65 78 29 20 26 20 62 79 74 65  t, index) & byte
e550: 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20  .MaxValue));..  
e560: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
e570: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 79 74  nal override byt
e580: 65 20 47 65 74 42 79 74 65 28 53 51 4c 69 74 65  e GetByte(SQLite
e590: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
e5a0: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
e5b0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
e5c0: 75 6e 63 68 65 63 6b 65 64 28 28 62 79 74 65 29  unchecked((byte)
e5d0: 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20  (GetInt32(stmt, 
e5e0: 69 6e 64 65 78 29 20 26 20 62 79 74 65 2e 4d 61  index) & byte.Ma
e5f0: 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d  xValue));..    }
e600: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
e610: 20 6f 76 65 72 72 69 64 65 20 73 68 6f 72 74 20   override short 
e620: 47 65 74 49 6e 74 31 36 28 53 51 4c 69 74 65 53  GetInt16(SQLiteS
e630: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
e640: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
e650: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75  ..      return u
e660: 6e 63 68 65 63 6b 65 64 28 28 73 68 6f 72 74 29  nchecked((short)
e670: 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20  (GetInt32(stmt, 
e680: 69 6e 64 65 78 29 20 26 20 75 73 68 6f 72 74 2e  index) & ushort.
e690: 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20  MaxValue));..   
e6a0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
e6b0: 61 6c 20 6f 76 65 72 72 69 64 65 20 75 73 68 6f  al override usho
e6c0: 72 74 20 47 65 74 55 49 6e 74 31 36 28 53 51 4c  rt GetUInt16(SQL
e6d0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
e6e0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
e6f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
e700: 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75 73  rn unchecked((us
e710: 68 6f 72 74 29 28 47 65 74 49 6e 74 33 32 28 73  hort)(GetInt32(s
e720: 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 75 73  tmt, index) & us
e730: 68 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29 29 3b  hort.MaxValue));
e740: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
e750: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
e760: 20 69 6e 74 20 47 65 74 49 6e 74 33 32 28 53 51   int GetInt32(SQ
e770: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
e780: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
e790: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
e7a0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
e7b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
e7c0: 63 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e  column_int(stmt.
e7d0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
e7e0: 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  dex);..    }....
e7f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
e800: 72 72 69 64 65 20 75 69 6e 74 20 47 65 74 55 49  rride uint GetUI
e810: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
e820: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
e830: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
e840: 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65      return unche
e850: 63 6b 65 64 28 28 75 69 6e 74 29 47 65 74 49 6e  cked((uint)GetIn
e860: 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
e870: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
e880: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
e890: 64 65 20 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34  de long GetInt64
e8a0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
e8b0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
e8c0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
e8d0: 6c 6f 6e 67 20 76 61 6c 75 65 3b 0d 0a 23 69 66  long value;..#if
e8e0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
e8f0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
e900: 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66     value = Unsaf
e910: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
e920: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
e930: 74 36 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  t64(stmt._sqlite
e940: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
e950: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
e960: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 76 61  ANDARD..      va
e970: 6c 75 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  lue = 0;..      
e980: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
e990: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
e9a0: 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  mn_int64_interop
e9b0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
e9c0: 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  mt, index, ref v
e9d0: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
e9e0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
e9f0: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
ea00: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
ea10: 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  f..      return 
ea20: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  value;..    }...
ea30: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
ea40: 65 72 72 69 64 65 20 75 6c 6f 6e 67 20 47 65 74  erride ulong Get
ea50: 55 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61  UInt64(SQLiteSta
ea60: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
ea70: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
ea80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63        return unc
ea90: 68 65 63 6b 65 64 28 28 75 6c 6f 6e 67 29 47 65  hecked((ulong)Ge
eaa0: 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
eab0: 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ex));..    }....
eac0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
ead0: 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74  rride string Get
eae0: 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74 65  Text(SQLiteState
eaf0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
eb00: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
eb10: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
eb20: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
eb30: 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65  n = 0;..      re
eb40: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
eb50: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
eb60: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
eb70: 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f  lumn_text_intero
eb80: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
eb90: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  tmt, index, ref 
eba0: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
ebb0: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
ebc0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
ebd0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
ebe0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
ebf0: 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69  _text(stmt._sqli
ec00: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
ec10: 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65  ..        Unsafe
ec20: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ec30: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
ec40: 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  es(stmt._sqlite_
ec50: 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
ec60: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
ec70: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
ec80: 65 72 72 69 64 65 20 44 61 74 65 54 69 6d 65 20  erride DateTime 
ec90: 47 65 74 44 61 74 65 54 69 6d 65 28 53 51 4c 69  GetDateTime(SQLi
eca0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
ecb0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
ecc0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f    {..      if (_
ecd0: 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d  datetimeFormat =
ece0: 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  = SQLiteDateForm
ecf0: 61 74 73 2e 54 69 63 6b 73 29 0d 0a 20 20 20 20  ats.Ticks)..    
ed00: 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74      return ToDat
ed10: 65 54 69 6d 65 28 47 65 74 49 6e 74 36 34 28 73  eTime(GetInt64(s
ed20: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61  tmt, index), _da
ed30: 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20  tetimeKind);..  
ed40: 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64 61      else if (_da
ed50: 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20  tetimeFormat == 
ed60: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
ed70: 73 2e 4a 75 6c 69 61 6e 44 61 79 29 0d 0a 20 20  s.JulianDay)..  
ed80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44        return ToD
ed90: 61 74 65 54 69 6d 65 28 47 65 74 44 6f 75 62 6c  ateTime(GetDoubl
eda0: 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e(stmt, index), 
edb0: 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d  _datetimeKind);.
edc0: 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28  .      else if (
edd0: 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20  _datetimeFormat 
ede0: 3d 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  == SQLiteDateFor
edf0: 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 29 0d  mats.UnixEpoch).
ee00: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
ee10: 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74 49 6e  ToDateTime(GetIn
ee20: 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
ee30: 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29  , _datetimeKind)
ee40: 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
ee50: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
ee60: 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
ee70: 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61       return ToDa
ee80: 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74  teTime(UnsafeNat
ee90: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
eea0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69  e3_column_text_i
eeb0: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
eec0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
eed0: 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   ref len), len);
eee0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
eef0: 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65  eturn ToDateTime
ef00: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
ef10: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
ef20: 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73  umn_text(stmt._s
ef30: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
ef40: 78 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73  x),..        Uns
ef50: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
ef60: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
ef70: 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69  bytes(stmt._sqli
ef80: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  te_stmt, index))
ef90: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
efa0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
efb0: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
efc0: 65 74 42 79 74 65 73 28 53 51 4c 69 74 65 53 74  etBytes(SQLiteSt
efd0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
efe0: 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61  t index, int nDa
eff0: 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d  taOffset, byte[]
f000: 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61   bDest, int nSta
f010: 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29  rt, int nLength)
f020: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
f030: 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65  nt nlen = Unsafe
f040: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f050: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
f060: 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  es(stmt._sqlite_
f070: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d  stmt, index);...
f080: 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20  .      // If no 
f090: 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66  destination buff
f0a0: 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73  er, return the s
f0b0: 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20  ize needed...   
f0c0: 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20     if (bDest == 
f0d0: 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65  null) return nle
f0e0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20  n;....      int 
f0f0: 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74  nCopied = nLengt
f100: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  h;....      if (
f110: 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74  nCopied + nStart
f120: 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29   > bDest.Length)
f130: 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74   nCopied = bDest
f140: 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74  .Length - nStart
f150: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ;..      if (nCo
f160: 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73  pied + nDataOffs
f170: 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69  et > nlen) nCopi
f180: 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74  ed = nlen - nDat
f190: 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20  aOffset;....    
f1a0: 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20    if (nCopied > 
f1b0: 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  0)..      {..   
f1c0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20       IntPtr ptr 
f1d0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
f1e0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
f1f0: 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74 6d 74 2e 5f  lumn_blob(stmt._
f200: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
f210: 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ex);....        
f220: 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e  Marshal.Copy((In
f230: 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e 74 36  tPtr)(ptr.ToInt6
f240: 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66 73 65  4() + nDataOffse
f250: 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72  t), bDest, nStar
f260: 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20  t, nCopied);..  
f270: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73      }..      els
f280: 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  e..      {..    
f290: 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b      nCopied = 0;
f2a0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
f2b0: 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65     return nCopie
f2c0: 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  d;..    }....   
f2d0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
f2e0: 64 65 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73  de long GetChars
f2f0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
f300: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
f310: 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65  , int nDataOffse
f320: 74 2c 20 63 68 61 72 5b 5d 20 62 44 65 73 74 2c  t, char[] bDest,
f330: 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74   int nStart, int
f340: 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b   nLength)..    {
f350: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e  ..      int nlen
f360: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f  ;..      int nCo
f370: 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d  pied = nLength;.
f380: 0a 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ...      string 
f390: 73 74 72 20 3d 20 47 65 74 54 65 78 74 28 73 74  str = GetText(st
f3a0: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
f3b0: 20 20 20 6e 6c 65 6e 20 3d 20 73 74 72 2e 4c 65     nlen = str.Le
f3c0: 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ngth;....      i
f3d0: 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c  f (bDest == null
f3e0: 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a  ) return nlen;..
f3f0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
f400: 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62  ied + nStart > b
f410: 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f  Dest.Length) nCo
f420: 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e  pied = bDest.Len
f430: 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20  gth - nStart;.. 
f440: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
f450: 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e   + nDataOffset >
f460: 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d   nlen) nCopied =
f470: 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66   nlen - nDataOff
f480: 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  set;....      if
f490: 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a   (nCopied > 0)..
f4a0: 20 20 20 20 20 20 20 20 73 74 72 2e 43 6f 70 79          str.Copy
f4b0: 54 6f 28 6e 44 61 74 61 4f 66 66 73 65 74 2c 20  To(nDataOffset, 
f4c0: 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e  bDest, nStart, n
f4d0: 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20  Copied);..      
f4e0: 65 6c 73 65 20 6e 43 6f 70 69 65 64 20 3d 20 30  else nCopied = 0
f4f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
f500: 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20  n nCopied;..    
f510: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
f520: 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
f530: 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61  IsNull(SQLiteSta
f540: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
f550: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
f560: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 43 6f        return (Co
f570: 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d  lumnAffinity(stm
f580: 74 2c 20 69 6e 64 65 78 29 20 3d 3d 20 54 79 70  t, index) == Typ
f590: 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b  eAffinity.Null);
f5a0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
f5b0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
f5c0: 20 69 6e 74 20 41 67 67 72 65 67 61 74 65 43 6f   int AggregateCo
f5d0: 75 6e 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  unt(IntPtr conte
f5e0: 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  xt)..    {..    
f5f0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
f600: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
f610: 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63  ite3_aggregate_c
f620: 6f 75 6e 74 28 63 6f 6e 74 65 78 74 29 3b 0d 0a  ount(context);..
f630: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
f640: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
f650: 6f 69 64 20 43 72 65 61 74 65 46 75 6e 63 74 69  oid CreateFuncti
f660: 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 46 75 6e  on(string strFun
f670: 63 74 69 6f 6e 2c 20 69 6e 74 20 6e 41 72 67 73  ction, int nArgs
f680: 2c 20 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53  , bool needCollS
f690: 65 71 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61  eq, SQLiteCallba
f6a0: 63 6b 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43  ck func, SQLiteC
f6b0: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 73 74 65 70  allback funcstep
f6c0: 2c 20 53 51 4c 69 74 65 46 69 6e 61 6c 43 61 6c  , SQLiteFinalCal
f6d0: 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e 61 6c 29  lback funcfinal)
f6e0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
f6f0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
f700: 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
f710: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
f720: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
f730: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
f740: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
f750: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54  _interop(_sql, T
f760: 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f  oUTF8(strFunctio
f770: 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e  n), nArgs, 4, In
f780: 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c  tPtr.Zero, func,
f790: 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66   funcstep, funcf
f7a0: 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53  inal, (needCollS
f7b0: 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20  eq == true) ? 1 
f7c0: 3a 20 30 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  : 0);..      if 
f7d0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
f7e0: 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e  rCode.Ok) n = Un
f7f0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f800: 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
f810: 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f  _function_intero
f820: 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  p(_sql, ToUTF8(s
f830: 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72  trFunction), nAr
f840: 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65  gs, 1, IntPtr.Ze
f850: 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74  ro, func, funcst
f860: 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28  ep, funcfinal, (
f870: 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74  needCollSeq == t
f880: 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a  rue) ? 1 : 0);..
f890: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d  #else..      n =
f8a0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f8b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
f8c0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71  ate_function(_sq
f8d0: 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
f8e0: 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34  ction), nArgs, 4
f8f0: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
f900: 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
f910: 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20  uncfinal);..    
f920: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
f930: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e  eErrorCode.Ok) n
f940: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
f950: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
f960: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f  reate_function(_
f970: 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46  sql, ToUTF8(strF
f980: 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c  unction), nArgs,
f990: 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   1, IntPtr.Zero,
f9a0: 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c   func, funcstep,
f9b0: 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23 65   funcfinal);..#e
f9c0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28  ndif..      if (
f9d0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
f9e0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
f9f0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
fa00: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
fa10: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
fa20: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
fa30: 65 72 72 69 64 65 20 76 6f 69 64 20 43 72 65 61  erride void Crea
fa40: 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69  teCollation(stri
fa50: 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c  ng strCollation,
fa60: 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e   SQLiteCollation
fa70: 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c   func, SQLiteCol
fa80: 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36 29 0d 0a  lation func16)..
fa90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
faa0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
fab0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
fac0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
fad0: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73  ate_collation(_s
fae0: 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f  ql, ToUTF8(strCo
faf0: 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c 20 49 6e 74  llation), 2, Int
fb00: 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 31 36  Ptr.Zero, func16
fb10: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
fb20: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
fb30: 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66  de.Ok) n = Unsaf
fb40: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
fb50: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
fb60: 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f  llation(_sql, To
fb70: 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f  UTF8(strCollatio
fb80: 6e 29 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65  n), 1, IntPtr.Ze
fb90: 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20  ro, func);..    
fba0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
fbb0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
fbc0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
fbd0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
fbe0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
fbf0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
fc00: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
fc10: 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43   ContextCollateC
fc20: 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e  ompare(Collation
fc30: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63  EncodingEnum enc
fc40: 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  , IntPtr context
fc50: 2c 20 73 74 72 69 6e 67 20 73 31 2c 20 73 74 72  , string s1, str
fc60: 69 6e 67 20 73 32 29 0d 0a 20 20 20 20 7b 0d 0a  ing s2)..    {..
fc70: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
fc80: 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65  DARD..      byte
fc90: 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79  [] b1;..      by
fca0: 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20  te[] b2;..      
fcb0: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
fcc0: 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d  ding converter =
fcd0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
fce0: 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20  switch (enc)..  
fcf0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63      {..        c
fd00: 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
fd10: 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d  odingEnum.UTF8:.
fd20: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
fd30: 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
fd40: 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38  xt.Encoding.UTF8
fd50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
fd60: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
fd70: 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
fd80: 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a  ingEnum.UTF16LE:
fd90: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
fda0: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
fdb0: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69  ext.Encoding.Uni
fdc0: 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
fdd0: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
fde0: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
fdf0: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31  ncodingEnum.UTF1
fe00: 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  6BE:..          
fe10: 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
fe20: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
fe30: 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64  .BigEndianUnicod
fe40: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  e;..          br
fe50: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  eak;..      }...
fe60: 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76  .      b1 = conv
fe70: 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 73  erter.GetBytes(s
fe80: 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20  1);..      b2 = 
fe90: 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  converter.GetByt
fea0: 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20 20 20 20  es(s2);....     
feb0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
fec0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
fed0: 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c  te3_context_coll
fee0: 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  compare_interop(
fef0: 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e  context, b1, b1.
ff00: 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c  Length, b2, b2.L
ff10: 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ength);..#else..
ff20: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
ff30: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
ff40: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
ff50: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
ff60: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
ff70: 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f  de int ContextCo
ff80: 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c  llateCompare(Col
ff90: 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
ffa0: 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63  um enc, IntPtr c
ffb0: 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b 5d 20 63  ontext, char[] c
ffc0: 31 2c 20 63 68 61 72 5b 5d 20 63 32 29 0d 0a 20  1, char[] c2).. 
ffd0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
ffe0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
fff0: 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20    byte[] b1;..  
10000 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a      byte[] b2;..
10010 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78        System.Tex
10020 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65  t.Encoding conve
10030 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rter = null;....
10040 20 20 20 20 20 20 73 77 69 74 63 68 20 28 65 6e        switch (en
10050 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  c)..      {..   
10060 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
10070 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
10080 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20  UTF8:..         
10090 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
100a0 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
100b0 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20  g.UTF8;..       
100c0 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
100d0 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
100e0 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
100f0 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16LE:..        
10100 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
10110 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
10120 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20  ng.Unicode;..   
10130 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
10140 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
10150 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
10160 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20  m.UTF16BE:..    
10170 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
10180 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
10190 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e  coding.BigEndian
101a0 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
101b0 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
101c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20    }....      b1 
101d0 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
101e0 79 74 65 73 28 63 31 29 3b 0d 0a 20 20 20 20 20  ytes(c1);..     
101f0 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e   b2 = converter.
10200 47 65 74 42 79 74 65 73 28 63 32 29 3b 0d 0a 0d  GetBytes(c2);...
10210 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
10220 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10230 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  s.sqlite3_contex
10240 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e  t_collcompare_in
10250 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62  terop(context, b
10260 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32  1, b1.Length, b2
10270 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23  , b2.Length);..#
10280 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
10290 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
102a0 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
102b0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
102c0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
102d0 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c 61 74 69  override Collati
102e0 6f 6e 53 65 71 75 65 6e 63 65 20 47 65 74 43 6f  onSequence GetCo
102f0 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28  llationSequence(
10300 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66  SQLiteFunction f
10310 75 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  unc, IntPtr cont
10320 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  ext)..    {..#if
10330 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
10340 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c 61 74 69  D..      Collati
10350 6f 6e 53 65 71 75 65 6e 63 65 20 73 65 71 20 3d  onSequence seq =
10360 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f 6e 53 65   new CollationSe
10370 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20 20 20 20  quence();..     
10380 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
10390 20 20 20 20 20 69 6e 74 20 74 79 70 65 20 3d 20       int type = 
103a0 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 65 6e  0;..      int en
103b0 63 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e  c = 0;..      In
103c0 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
103d0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
103e0 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c  ite3_context_col
103f0 6c 73 65 71 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  lseq_interop(con
10400 74 65 78 74 2c 20 72 65 66 20 74 79 70 65 2c 20  text, ref type, 
10410 72 65 66 20 65 6e 63 2c 20 72 65 66 20 6c 65 6e  ref enc, ref len
10420 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
10430 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e  p != null) seq.N
10440 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ame = UTF8ToStri
10450 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20  ng(p, len);..   
10460 20 20 20 73 65 71 2e 54 79 70 65 20 3d 20 28 43     seq.Type = (C
10470 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d  ollationTypeEnum
10480 29 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 73 65  )type;..      se
10490 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d  q._func = func;.
104a0 0a 20 20 20 20 20 20 73 65 71 2e 45 6e 63 6f 64  .      seq.Encod
104b0 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e  ing = (Collation
104c0 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63  EncodingEnum)enc
104d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
104e0 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20  n seq;..#else.. 
104f0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
10500 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
10510 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
10520 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
10530 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
10540 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56  e long GetParamV
10550 61 6c 75 65 42 79 74 65 73 28 49 6e 74 50 74 72  alueBytes(IntPtr
10560 20 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66   p, int nDataOff
10570 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73  set, byte[] bDes
10580 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69  t, int nStart, i
10590 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20  nt nLength)..   
105a0 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c   {..      int nl
105b0 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  en = UnsafeNativ
105c0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
105d0 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 29 3b  _value_bytes(p);
105e0 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20  ....      // If 
105f0 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62  no destination b
10600 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68  uffer, return th
10610 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a  e size needed...
10620 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20        if (bDest 
10630 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
10640 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  nlen;....      i
10650 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65  nt nCopied = nLe
10660 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ngth;....      i
10670 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74  f (nCopied + nSt
10680 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67  art > bDest.Leng
10690 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44  th) nCopied = bD
106a0 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74  est.Length - nSt
106b0 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  art;..      if (
106c0 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f  nCopied + nDataO
106d0 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43  ffset > nlen) nC
106e0 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e  opied = nlen - n
106f0 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20  DataOffset;.... 
10700 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
10710 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   > 0)..      {..
10720 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
10730 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  tr = UnsafeNativ
10740 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10750 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b 0d  _value_blob(p);.
10760 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68  ...        Marsh
10770 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29  al.Copy((IntPtr)
10780 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b  (ptr.ToInt64() +
10790 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62   nDataOffset), b
107a0 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43  Dest, nStart, nC
107b0 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d  opied);..      }
107c0 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20  ..      else..  
107d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e      {..        n
107e0 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20  Copied = 0;..   
107f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
10800 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20  turn nCopied;.. 
10810 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
10820 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f  rnal override do
10830 75 62 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c  uble GetParamVal
10840 75 65 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20  ueDouble(IntPtr 
10850 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
10860 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b     double value;
10870 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
10880 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
10890 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
108a0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
108b0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
108c0 65 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a  e_double(ptr);..
108d0 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
108e0 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 76 61  ANDARD..      va
108f0 6c 75 65 20 3d 20 30 2e 30 3b 0d 0a 20 20 20 20  lue = 0.0;..    
10900 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
10910 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
10920 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  lue_double_inter
10930 6f 70 28 70 74 72 2c 20 72 65 66 20 76 61 6c 75  op(ptr, ref valu
10940 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
10950 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
10960 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
10970 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
10980 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
10990 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ue;..    }....  
109a0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
109b0 69 64 65 20 69 6e 74 20 47 65 74 50 61 72 61 6d  ide int GetParam
109c0 56 61 6c 75 65 49 6e 74 33 32 28 49 6e 74 50 74  ValueInt32(IntPt
109d0 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20  r ptr)..    {.. 
109e0 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
109f0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10a00 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
10a10 74 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a  t(ptr);..    }..
10a20 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10a30 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
10a40 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 36 34 28  ParamValueInt64(
10a50 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20  IntPtr ptr)..   
10a60 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 36 34 20   {..      Int64 
10a70 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41  value;..#if !PLA
10a80 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
10a90 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61  MEWORK..      va
10aa0 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  lue = UnsafeNati
10ab0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10ac0 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 74  3_value_int64(pt
10ad0 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  r);..#elif !SQLI
10ae0 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
10af0 20 20 20 76 61 6c 75 65 20 3d 20 30 3b 0d 0a 20     value = 0;.. 
10b00 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
10b10 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10b20 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74  _value_int64_int
10b30 65 72 6f 70 28 70 74 72 2c 20 72 65 66 20 76 61  erop(ptr, ref va
10b40 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
10b50 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
10b60 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
10b70 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
10b80 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
10b90 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alue;..    }....
10ba0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10bb0 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74  rride string Get
10bc0 50 61 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49  ParamValueText(I
10bd0 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
10be0 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
10bf0 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
10c00 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
10c10 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
10c20 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
10c30 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10c40 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e  e3_value_text_in
10c50 74 65 72 6f 70 28 70 74 72 2c 20 72 65 66 20 6c  terop(ptr, ref l
10c60 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
10c70 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
10c80 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
10c90 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10ca0 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  .sqlite3_value_t
10cb0 65 78 74 28 70 74 72 29 2c 0d 0a 20 20 20 20 20  ext(ptr),..     
10cc0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
10cd0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
10ce0 61 6c 75 65 5f 62 79 74 65 73 28 70 74 72 29 29  alue_bytes(ptr))
10cf0 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
10d00 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
10d10 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41 66   override TypeAf
10d20 66 69 6e 69 74 79 20 47 65 74 50 61 72 61 6d 56  finity GetParamV
10d30 61 6c 75 65 54 79 70 65 28 49 6e 74 50 74 72 20  alueType(IntPtr 
10d40 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
10d50 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
10d60 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10d70 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
10d80 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  (ptr);..    }...
10d90 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
10da0 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
10db0 72 6e 42 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f  rnBlob(IntPtr co
10dc0 6e 74 65 78 74 2c 20 62 79 74 65 5b 5d 20 76 61  ntext, byte[] va
10dd0 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
10de0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
10df0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
10e00 65 73 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e 74 65  esult_blob(conte
10e10 78 74 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75 65  xt, value, value
10e20 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72  .Length, (IntPtr
10e30 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  )(-1));..    }..
10e40 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10e50 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
10e60 75 72 6e 44 6f 75 62 6c 65 28 49 6e 74 50 74 72  urnDouble(IntPtr
10e70 20 63 6f 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65   context, double
10e80 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
10e90 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
10ea0 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
10eb0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
10ec0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10ed0 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28  3_result_double(
10ee0 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  context, value);
10ef0 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
10f00 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
10f10 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10f20 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
10f30 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f  lt_double_intero
10f40 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76  p(context, ref v
10f50 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
10f60 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
10f70 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
10f80 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
10f90 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
10fa0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
10fb0 65 20 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72  e void ReturnErr
10fc0 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  or(IntPtr contex
10fd0 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29  t, string value)
10fe0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
10ff0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
11000 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
11010 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c  t_error(context,
11020 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20   ToUTF8(value), 
11030 76 61 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a  value.Length);..
11040 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
11050 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
11060 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 33 32 28  oid ReturnInt32(
11070 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
11080 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  int value)..    
11090 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
110a0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
110b0 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28  ite3_result_int(
110c0 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  context, value);
110d0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
110e0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
110f0 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36   void ReturnInt6
11100 34 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  4(IntPtr context
11110 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20  , long value).. 
11120 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
11130 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
11140 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61  WORK..      Unsa
11150 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
11160 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
11170 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20 76 61  nt64(context, va
11180 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
11190 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
111a0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
111b0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
111c0 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e  _result_int64_in
111d0 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72  terop(context, r
111e0 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
111f0 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
11200 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
11210 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
11220 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
11230 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
11240 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
11250 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e  nNull(IntPtr con
11260 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  text)..    {..  
11270 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
11280 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
11290 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74  result_null(cont
112a0 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ext);..    }....
112b0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
112c0 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
112d0 6e 54 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e  nText(IntPtr con
112e0 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c  text, string val
112f0 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
11300 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
11310 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20  TF8(value);..   
11320 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
11330 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
11340 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65  esult_text(conte
11350 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65  xt, ToUTF8(value
11360 29 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c  ), b.Length - 1,
11370 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
11380 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e  .    }....#if IN
11390 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
113a0 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  BLE..    /// <su
113b0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
113c0 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65  Calls the native
113d0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
113e0 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f  rary in order to
113f0 20 63 72 65 61 74 65 20 61 20 64 69 73 70 6f 73   create a dispos
11400 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 6d 6f  able..    /// mo
11410 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  dule containing 
11420 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
11430 6f 6e 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  on of a virtual 
11440 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  table...    /// 
11450 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
11460 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
11470 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f  "module">..    /
11480 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62  // The module ob
11490 6a 65 63 74 20 74 6f 20 62 65 20 75 73 65 64 20  ject to be used 
114a0 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 74 68  when creating th
114b0 65 20 6e 61 74 69 76 65 20 64 69 73 70 6f 73 61  e native disposa
114c0 62 6c 65 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20  ble module...   
114d0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
114e0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
114f0 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20  me="flags">..   
11500 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 66   /// The flags f
11510 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  or the associate
11520 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  d <see cref="SQL
11530 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f  iteConnection" /
11540 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
11550 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
11560 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
11570 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
11580 20 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 53 51   CreateModule(SQ
11590 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
115a0 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  e, SQLiteConnect
115b0 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d  ionFlags flags).
115c0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
115d0 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
115e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
115f0 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
11600 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
11610 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20  ("module");.... 
11620 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
11630 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
11640 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d  tionFlags.NoLogM
11650 6f 64 75 6c 65 29 20 21 3d 20 53 51 4c 69 74 65  odule) != SQLite
11660 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
11670 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 29 0d 0a 20 20  NoLogModule)..  
11680 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11690 20 20 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45       module.LogE
116a0 72 72 6f 72 73 20 3d 20 28 28 66 6c 61 67 73 20  rrors = ((flags 
116b0 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
116c0 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c  onFlags.LogModul
116d0 65 45 72 72 6f 72 29 20 3d 3d 20 53 51 4c 69 74  eError) == SQLit
116e0 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
116f0 2e 4c 6f 67 4d 6f 64 75 6c 65 45 72 72 6f 72 29  .LogModuleError)
11700 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d  ;..            m
11710 6f 64 75 6c 65 2e 4c 6f 67 45 78 63 65 70 74 69  odule.LogExcepti
11720 6f 6e 73 20 3d 20 28 28 66 6c 61 67 73 20 26 20  ons = ((flags & 
11730 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
11740 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45  Flags.LogModuleE
11750 78 63 65 70 74 69 6f 6e 29 20 3d 3d 20 53 51 4c  xception) == SQL
11760 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
11770 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65  gs.LogModuleExce
11780 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20  ption);..       
11790 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
117a0 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
117b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
117c0 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
117d0 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69  eption("connecti
117e0 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  on has an invali
117f0 64 20 68 61 6e 64 6c 65 22 29 3b 0d 0a 0d 0a 20  d handle");.... 
11800 20 20 20 20 20 20 20 53 65 74 4c 6f 61 64 45 78         SetLoadEx
11810 74 65 6e 73 69 6f 6e 28 74 72 75 65 29 3b 0d 0a  tension(true);..
11820 20 20 20 20 20 20 20 20 4c 6f 61 64 45 78 74 65          LoadExte
11830 6e 73 69 6f 6e 28 55 6e 73 61 66 65 4e 61 74 69  nsion(UnsafeNati
11840 76 65 4d 65 74 68 6f 64 73 2e 53 51 4c 49 54 45  veMethods.SQLITE
11850 5f 44 4c 4c 2c 20 22 73 71 6c 69 74 65 33 5f 76  _DLL, "sqlite3_v
11860 74 73 68 69 6d 5f 69 6e 69 74 22 29 3b 0d 0a 0d  tshim_init");...
11870 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64  .        if (mod
11880 75 6c 65 2e 43 72 65 61 74 65 44 69 73 70 6f 73  ule.CreateDispos
11890 61 62 6c 65 4d 6f 64 75 6c 65 28 5f 73 71 6c 29  ableModule(_sql)
118a0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
118b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d            if (_m
118c0 6f 64 75 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  odules == null).
118d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
118e0 20 5f 6d 6f 64 75 6c 65 73 20 3d 20 6e 65 77 20   _modules = new 
118f0 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
11900 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e  g, SQLiteModule>
11910 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
11920 20 20 20 5f 6d 6f 64 75 6c 65 73 2e 41 64 64 28     _modules.Add(
11930 6d 6f 64 75 6c 65 2e 4e 61 6d 65 2c 20 6d 6f 64  module.Name, mod
11940 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ule);....       
11950 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f       if (_usePoo
11960 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
11970 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11980 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61     _usePool = fa
11990 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54  lse;....#if !NET
119a0 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
119b0 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
119c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
119d0 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
119e0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
119f0 43 72 65 61 74 65 4d 6f 64 75 6c 65 20 28 50 6f  CreateModule (Po
11a00 6f 6c 29 20 44 69 73 61 62 6c 65 64 3a 20 7b 30  ol) Disabled: {0
11a10 7d 22 2c 20 5f 73 71 6c 29 29 3b 0d 0a 23 65 6e  }", _sql));..#en
11a20 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
11a30 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
11a40 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
11a50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11a60 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
11a70 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 47 65  LiteException(Ge
11a80 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
11a90 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
11aa0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
11ab0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
11ac0 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20  alls the native 
11ad0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
11ae0 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ary in order to 
11af0 63 6c 65 61 6e 75 70 20 74 68 65 20 72 65 73 6f  cleanup the reso
11b00 75 72 63 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 61  urces..    /// a
11b10 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
11b20 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69   module containi
11b30 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  ng the implement
11b40 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75  ation of a virtu
11b50 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f  al table...    /
11b60 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
11b70 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
11b80 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20  me="module">..  
11b90 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65    /// The module
11ba0 20 6f 62 6a 65 63 74 20 70 72 65 76 69 6f 75 73   object previous
11bb0 6c 79 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  ly passed to the
11bc0 20 3c 73 65 65 20 63 72 65 66 3d 22 43 72 65 61   <see cref="Crea
11bd0 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20  teModule" />..  
11be0 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20    /// method... 
11bf0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
11c00 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
11c10 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20  name="flags">.. 
11c20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73     /// The flags
11c30 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61   for the associa
11c40 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ted <see cref="S
11c50 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22  QLiteConnection"
11c60 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
11c70 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  nce...    /// </
11c80 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
11c90 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
11ca0 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65  id DisposeModule
11cb0 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f  (SQLiteModule mo
11cc0 64 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  dule, SQLiteConn
11cd0 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
11ce0 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
11cf0 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
11d00 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
11d10 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
11d20 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
11d30 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a  ion("module");..
11d40 0d 0a 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65  ..        module
11d50 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
11d60 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
11d70 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
11d80 69 64 65 20 49 6e 74 50 74 72 20 41 67 67 72 65  ide IntPtr Aggre
11d90 67 61 74 65 43 6f 6e 74 65 78 74 28 49 6e 74 50  gateContext(IntP
11da0 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20  tr context)..   
11db0 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
11dc0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11dd0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67  hods.sqlite3_agg
11de0 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63  regate_context(c
11df0 6f 6e 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20  ontext, 1);..   
11e00 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f   }....#if INTERO
11e10 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
11e20 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
11e30 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c  y>..    /// Call
11e40 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c  s the native SQL
11e50 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
11e60 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63   in order to dec
11e70 6c 61 72 65 20 61 20 76 69 72 74 75 61 6c 20 74  lare a virtual t
11e80 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e  able..    /// in
11e90 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 63   response to a c
11ea0 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73 65  all into the <se
11eb0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
11ec0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65  ativeModule.xCre
11ed0 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f  ate" />..    ///
11ee0 20 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22 49   or <see cref="I
11ef0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
11f00 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20  le.xConnect" /> 
11f10 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65  virtual table me
11f20 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  thods...    /// 
11f30 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
11f40 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
11f50 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f  "module">..    /
11f60 2f 2f 20 54 68 65 20 76 69 72 74 75 61 6c 20 74  // The virtual t
11f70 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61 74  able module that
11f80 20 69 73 20 74 6f 20 62 65 20 72 65 73 70 6f 6e   is to be respon
11f90 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 76 69  sible for the vi
11fa0 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
11fb0 20 2f 2f 2f 20 62 65 69 6e 67 20 64 65 63 6c 61   /// being decla
11fc0 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  red...    /// </
11fd0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
11fe0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72  <param name="str
11ff0 53 71 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  Sql">..    /// T
12000 68 65 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  he string contai
12010 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
12020 74 65 6d 65 6e 74 20 64 65 73 63 72 69 62 69 6e  tement describin
12030 67 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  g the virtual ta
12040 62 6c 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20  ble to..    /// 
12050 62 65 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20  be declared...  
12060 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
12070 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
12080 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20  ame="error">..  
12090 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65    /// Upon succe
120a0 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73  ss, the contents
120b0 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65 74   of this paramet
120c0 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  er are undefined
120d0 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c  .  Upon failure,
120e0 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f  ..    /// it sho
120f0 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61  uld contain an a
12100 70 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72  ppropriate error
12110 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f   message...    /
12120 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
12130 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
12140 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
12150 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
12160 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   code...    /// 
12170 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
12180 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
12190 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
121a0 65 20 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c  e DeclareVirtual
121b0 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  Table(..        
121c0 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64  SQLiteModule mod
121d0 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ule,..        st
121e0 72 69 6e 67 20 73 74 72 53 71 6c 2c 0d 0a 20 20  ring strSql,..  
121f0 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
12200 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
12210 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
12220 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75    if (_sql == nu
12230 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ll)..        {..
12240 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
12250 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20  r = "connection 
12260 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
12270 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20  andle";..       
12280 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
12290 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
122a0 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  r;..        }...
122b0 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
122c0 70 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65  pSql = IntPtr.Ze
122d0 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ro;....        t
122e0 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
122f0 20 20 20 20 20 20 20 20 20 20 20 70 53 71 6c 20             pSql 
12300 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55  = SQLiteString.U
12310 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
12320 69 6e 67 28 73 74 72 53 71 6c 29 3b 0d 0a 0d 0a  ing(strSql);....
12330 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
12340 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
12350 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
12360 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 65 63 6c  ods.sqlite3_decl
12370 61 72 65 5f 76 74 61 62 28 0d 0a 20 20 20 20 20  are_vtab(..     
12380 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c             _sql,
12390 20 70 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20   pSql);....     
123a0 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d         if ((n ==
123b0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
123c0 2e 4f 6b 29 20 26 26 20 28 6d 6f 64 75 6c 65 20  .Ok) && (module 
123d0 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  != null))..     
123e0 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
123f0 65 2e 44 65 63 6c 61 72 65 64 20 3d 20 74 72 75  e.Declared = tru
12400 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
12410 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
12420 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65  eErrorCode.Ok) e
12430 72 72 6f 72 20 3d 20 47 65 74 4c 61 73 74 45 72  rror = GetLastEr
12440 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ror();....      
12450 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d        return n;.
12460 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
12470 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
12480 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12490 20 20 20 20 69 66 20 28 70 53 71 6c 20 21 3d 20      if (pSql != 
124a0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
124b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
124c0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
124d0 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70  iteMemory.Free(p
124e0 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  Sql);..         
124f0 20 20 20 20 20 20 20 70 53 71 6c 20 3d 20 49 6e         pSql = In
12500 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
12510 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
12520 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
12530 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
12540 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20  ..    /// Calls 
12550 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74  the native SQLit
12560 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69  e core library i
12570 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61  n order to decla
12580 72 65 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  re a virtual tab
12590 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63  le..    /// func
125a0 74 69 6f 6e 20 69 6e 20 72 65 73 70 6f 6e 73 65  tion in response
125b0 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20   to a call into 
125c0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
125d0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
125e0 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a  le.xCreate" />..
125f0 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20      /// or <see 
12600 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
12610 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65  iveModule.xConne
12620 63 74 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 74  ct" /> virtual t
12630 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20  able methods... 
12640 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
12650 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
12660 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e  m name="module">
12670 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69  ..    /// The vi
12680 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75  rtual table modu
12690 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65  le that is to be
126a0 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
126b0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
126c0 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63  le..    /// func
126d0 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61  tion being decla
126e0 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  red...    /// </
126f0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
12700 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
12710 75 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d 0a 20 20  umentCount">..  
12720 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
12730 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
12740 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65   the function be
12750 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20  ing declared... 
12760 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
12770 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
12780 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20  name="name">..  
12790 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f    /// The name o
127a0 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62  f the function b
127b0 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a  eing declared...
127c0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
127d0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
127e0 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a   name="error">..
127f0 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63      /// Upon suc
12800 63 65 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e  cess, the conten
12810 74 73 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d  ts of this param
12820 65 74 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e  eter are undefin
12830 65 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72  ed.  Upon failur
12840 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73  e,..    /// it s
12850 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e  hould contain an
12860 20 61 70 70 72 6f 70 72 69 61 74 65 20 65 72 72   appropriate err
12870 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20  or message...   
12880 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
12890 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
128a0 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e  ..    /// A stan
128b0 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
128c0 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f  rn code...    //
128d0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
128e0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
128f0 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
12900 6f 64 65 20 44 65 63 6c 61 72 65 56 69 72 74 75  ode DeclareVirtu
12910 61 6c 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  alFunction(..   
12920 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
12930 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20  e module,..     
12940 20 20 20 69 6e 74 20 61 72 67 75 6d 65 6e 74 43     int argumentC
12950 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 73  ount,..        s
12960 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
12970 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
12980 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29  error..        )
12990 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
129a0 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c   if (_sql == nul
129b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
129c0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
129d0 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68   = "connection h
129e0 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
129f0 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  ndle";..        
12a00 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
12a10 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
12a20 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
12a30 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
12a40 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65  Name = IntPtr.Ze
12a50 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ro;....        t
12a60 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
12a70 20 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65             pName
12a80 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e   = SQLiteString.
12a90 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
12aa0 72 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20  ring(name);.... 
12ab0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
12ac0 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
12ad0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12ae0 64 73 2e 73 71 6c 69 74 65 33 5f 6f 76 65 72 6c  ds.sqlite3_overl
12af0 6f 61 64 5f 66 75 6e 63 74 69 6f 6e 28 0d 0a 20  oad_function(.. 
12b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
12b10 73 71 6c 2c 20 70 4e 61 6d 65 2c 20 61 72 67 75  sql, pName, argu
12b20 6d 65 6e 74 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  mentCount);.... 
12b30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
12b40 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
12b50 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20  ode.Ok) error = 
12b60 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d  GetLastError();.
12b70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
12b80 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20  eturn n;..      
12b90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
12ba0 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ally..        {.
12bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
12bc0 28 70 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74 72  (pName != IntPtr
12bd0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
12be0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12bf0 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d         SQLiteMem
12c00 6f 72 79 2e 46 72 65 65 28 70 4e 61 6d 65 29 3b  ory.Free(pName);
12c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12c20 20 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72    pName = IntPtr
12c30 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
12c40 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
12c50 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  ..    }..#endif.
12c60 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
12c70 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e  ary>..    /// En
12c80 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65  ables or disable
12c90 64 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64  d extension load
12ca0 69 6e 67 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a  ing by SQLite...
12cb0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
12cc0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
12cd0 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22  am name="bOnOff"
12ce0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20  >..    /// True 
12cf0 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e  to enable loadin
12d00 67 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c  g of extensions,
12d10 20 66 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c   false to disabl
12d20 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
12d30 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
12d40 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
12d50 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f   SetLoadExtensio
12d60 6e 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a  n(bool bOnOff)..
12d70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
12d80 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
12d90 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
12da0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
12db0 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e  nable_load_exten
12dc0 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
12dd0 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66     _sql, (bOnOff
12de0 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a   ? -1 : 0));....
12df0 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
12e00 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12e10 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
12e20 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
12e30 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
12e40 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
12e50 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
12e60 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20      /// Loads a 
12e70 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e  SQLite extension
12e80 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 20 74 68   library from th
12e90 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a 20  e named file... 
12ea0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
12eb0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
12ec0 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65  m name="fileName
12ed0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
12ee0 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 79 6e 61  name of the dyna
12ef0 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72 79  mic link library
12f00 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67   file containing
12f10 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d   the extension..
12f20 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
12f30 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
12f40 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d 65  m name="procName
12f50 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
12f60 6e 61 6d 65 20 6f 66 20 74 68 65 20 65 78 70 6f  name of the expo
12f70 72 74 65 64 20 66 75 6e 63 74 69 6f 6e 20 75 73  rted function us
12f80 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65  ed to initialize
12f90 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d   the extension..
12fa0 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c  .    /// If null
12fb0 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 22 73  , the default "s
12fc0 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e  qlite3_extension
12fd0 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62 65 20 75  _init" will be u
12fe0 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  sed...    /// </
12ff0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
13000 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
13010 69 64 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  id LoadExtension
13020 28 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65  (string fileName
13030 2c 20 73 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d  , string procNam
13040 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
13050 20 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20     if (fileName 
13060 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
13070 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
13080 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
13090 70 74 69 6f 6e 28 22 66 69 6c 65 4e 61 6d 65 22  ption("fileName"
130a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
130b0 74 50 74 72 20 70 45 72 72 6f 72 20 3d 20 49 6e  tPtr pError = In
130c0 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
130d0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
130e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
130f0 20 20 62 79 74 65 5b 5d 20 75 74 66 38 46 69 6c    byte[] utf8Fil
13100 65 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f  eName = UTF8Enco
13110 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74  ding.UTF8.GetByt
13120 65 73 28 66 69 6c 65 4e 61 6d 65 20 2b 20 27 5c  es(fileName + '\
13130 30 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  0');..          
13140 20 20 62 79 74 65 5b 5d 20 75 74 66 38 50 72 6f    byte[] utf8Pro
13150 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  cName = null;...
13160 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
13170 28 70 72 6f 63 4e 61 6d 65 20 21 3d 20 6e 75 6c  (procName != nul
13180 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
13190 20 20 20 20 75 74 66 38 50 72 6f 63 4e 61 6d 65      utf8ProcName
131a0 20 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e   = UTF8Encoding.
131b0 55 54 46 38 2e 47 65 74 42 79 74 65 73 28 70 72  UTF8.GetBytes(pr
131c0 6f 63 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d  ocName + '\0');.
131d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
131e0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
131f0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
13200 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c  ethods.sqlite3_l
13210 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a  oad_extension(..
13220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13230 5f 73 71 6c 2c 20 75 74 66 38 46 69 6c 65 4e 61  _sql, utf8FileNa
13240 6d 65 2c 20 75 74 66 38 50 72 6f 63 4e 61 6d 65  me, utf8ProcName
13250 2c 20 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a  , ref pError);..
13260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
13270 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
13280 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
13290 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
132a0 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
132b0 70 74 69 6f 6e 28 6e 2c 20 55 54 46 38 54 6f 53  ption(n, UTF8ToS
132c0 74 72 69 6e 67 28 70 45 72 72 6f 72 2c 20 2d 31  tring(pError, -1
132d0 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
132e0 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
132f0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
13300 20 20 20 20 20 20 20 20 69 66 20 28 70 45 72 72          if (pErr
13310 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  or != IntPtr.Zer
13320 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
13330 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
13340 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
13350 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66  ethods.sqlite3_f
13360 72 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20  ree(pError);..  
13370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45                pE
13380 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  rror = IntPtr.Ze
13390 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
133a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
133b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
133c0 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62  Enables or disab
133d0 6c 65 64 20 65 78 74 65 6e 64 65 64 20 72 65 73  led extended res
133e0 75 6c 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e  ult codes return
133f0 65 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20  ed by SQLite..  
13400 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
13410 69 64 65 20 76 6f 69 64 20 53 65 74 45 78 74 65  ide void SetExte
13420 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28  ndedResultCodes(
13430 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20  bool bOnOff)..  
13440 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
13450 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
13460 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
13470 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e  ds.sqlite3_exten
13480 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73  ded_result_codes
13490 28 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71  (..          _sq
134a0 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20  l, (bOnOff ? -1 
134b0 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  : 0));....      
134c0 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
134d0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
134e0 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
134f0 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
13500 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
13510 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20  }..    /// Gets 
13520 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20  the last SQLite 
13530 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20  error code..    
13540 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
13550 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
13560 65 20 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a  e ResultCode()..
13570 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
13580 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
13590 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
135a0 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a  errcode(_sql);..
135b0 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47      }..    /// G
135c0 65 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c  ets the last SQL
135d0 69 74 65 20 65 78 74 65 6e 64 65 64 20 65 72 72  ite extended err
135e0 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74  or code..    int
135f0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
13600 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 45  QLiteErrorCode E
13610 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64  xtendedResultCod
13620 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  e()..    {..    
13630 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
13640 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
13650 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72  ite3_extended_er
13660 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20  rcode(_sql);..  
13670 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41    }....    /// A
13680 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65  dd a log message
13690 20 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20   via the SQLite 
136a0 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65  sqlite3_log inte
136b0 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65  rface...    inte
136c0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
136d0 69 64 20 4c 6f 67 4d 65 73 73 61 67 65 28 53 51  id LogMessage(SQ
136e0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 69 45  LiteErrorCode iE
136f0 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a  rrCode, string z
13700 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d  Message)..    {.
13710 0a 20 20 20 20 20 20 53 74 61 74 69 63 4c 6f 67  .      StaticLog
13720 4d 65 73 73 61 67 65 28 69 45 72 72 43 6f 64 65  Message(iErrCode
13730 2c 20 7a 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20  , zMessage);..  
13740 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41    }....    /// A
13750 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65  dd a log message
13760 20 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20   via the SQLite 
13770 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65  sqlite3_log inte
13780 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65  rface...    inte
13790 72 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69 64  rnal static void
137a0 20 53 74 61 74 69 63 4c 6f 67 4d 65 73 73 61 67   StaticLogMessag
137b0 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e(SQLiteErrorCod
137c0 65 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69  e iErrCode, stri
137d0 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20  ng zMessage)..  
137e0 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
137f0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
13800 71 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72 72 43  qlite3_log(iErrC
13810 6f 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65 73  ode, ToUTF8(zMes
13820 73 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  sage));..    }..
13830 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f  ..#if INTEROP_CO
13840 44 45 43 20 7c 7c 20 49 4e 54 45 52 4f 50 5f 49  DEC || INTEROP_I
13850 4e 43 4c 55 44 45 5f 53 45 45 0d 0a 20 20 20 20  NCLUDE_SEE..    
13860 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
13870 65 20 76 6f 69 64 20 53 65 74 50 61 73 73 77 6f  e void SetPasswo
13880 72 64 28 62 79 74 65 5b 5d 20 70 61 73 73 77 6f  rd(byte[] passwo
13890 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d  rdBytes)..    {.
138a0 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
138b0 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
138c0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
138d0 71 6c 69 74 65 33 5f 6b 65 79 28 5f 73 71 6c 2c  qlite3_key(_sql,
138e0 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20   passwordBytes, 
138f0 70 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65  passwordBytes.Le
13900 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66  ngth);..      if
13910 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
13920 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
13930 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
13940 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
13950 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
13960 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
13970 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 68  override void Ch
13980 61 6e 67 65 50 61 73 73 77 6f 72 64 28 62 79 74  angePassword(byt
13990 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f 72 64 42  e[] newPasswordB
139a0 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ytes)..    {..  
139b0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
139c0 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
139d0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
139e0 74 65 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c 20  te3_rekey(_sql, 
139f0 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73  newPasswordBytes
13a00 2c 20 28 6e 65 77 50 61 73 73 77 6f 72 64 42 79  , (newPasswordBy
13a10 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30  tes == null) ? 0
13a20 20 3a 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79   : newPasswordBy
13a30 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  tes.Length);..  
13a40 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
13a50 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
13a60 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
13a70 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
13a80 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
13a90 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
13aa0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
13ab0 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 50  erride void SetP
13ac0 72 6f 67 72 65 73 73 48 6f 6f 6b 28 69 6e 74 20  rogressHook(int 
13ad0 6e 4f 70 73 2c 20 53 51 4c 69 74 65 50 72 6f 67  nOps, SQLiteProg
13ae0 72 65 73 73 43 61 6c 6c 62 61 63 6b 20 66 75 6e  ressCallback fun
13af0 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
13b00 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
13b10 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70  ethods.sqlite3_p
13b20 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72 28  rogress_handler(
13b30 5f 73 71 6c 2c 20 6e 4f 70 73 2c 20 66 75 6e 63  _sql, nOps, func
13b40 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
13b50 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
13b60 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
13b70 76 6f 69 64 20 53 65 74 41 75 74 68 6f 72 69 7a  void SetAuthoriz
13b80 65 72 48 6f 6f 6b 28 53 51 4c 69 74 65 41 75 74  erHook(SQLiteAut
13b90 68 6f 72 69 7a 65 72 43 61 6c 6c 62 61 63 6b 20  horizerCallback 
13ba0 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
13bb0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
13bc0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
13bd0 73 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 28 5f  set_authorizer(_
13be0 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
13bf0 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
13c00 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
13c10 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
13c20 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c 69  tUpdateHook(SQLi
13c30 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  teUpdateCallback
13c40 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
13c50 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
13c60 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
13c70 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f 73 71  _update_hook(_sq
13c80 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
13c90 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
13ca0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
13cb0 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 43  erride void SetC
13cc0 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74 65  ommitHook(SQLite
13cd0 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20 66  CommitCallback f
13ce0 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  unc)..    {..   
13cf0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
13d00 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
13d10 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c 2c  ommit_hook(_sql,
13d20 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
13d30 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
13d40 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
13d50 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 72 61  ride void SetTra
13d60 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74  ceCallback(SQLit
13d70 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 66  eTraceCallback f
13d80 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  unc)..    {..   
13d90 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
13da0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74  ethods.sqlite3_t
13db0 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  race(_sql, func,
13dc0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
13dd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
13de0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
13df0 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48  oid SetRollbackH
13e00 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61  ook(SQLiteRollba
13e10 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ckCallback func)
13e20 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
13e30 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
13e40 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62  ds.sqlite3_rollb
13e50 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66  ack_hook(_sql, f
13e60 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
13e70 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
13e80 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
13e90 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74      /// Allows t
13ea0 68 65 20 73 65 74 74 69 6e 67 20 6f 66 20 61 20  he setting of a 
13eb0 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b  logging callback
13ec0 20 69 6e 76 6f 6b 65 64 20 62 79 20 53 51 4c 69   invoked by SQLi
13ed0 74 65 20 77 68 65 6e 20 61 0d 0a 20 20 20 20 2f  te when a..    /
13ee0 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f 63 63  // log event occ
13ef0 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20 63  urs.  Only one c
13f00 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65 20 73  allback may be s
13f10 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69 73 20  et.  If NULL is 
13f20 70 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f  passed,..    ///
13f30 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 61 6c   the logging cal
13f40 6c 62 61 63 6b 20 69 73 20 75 6e 72 65 67 69 73  lback is unregis
13f50 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  tered...    /// 
13f60 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
13f70 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
13f80 22 66 75 6e 63 22 3e 54 68 65 20 63 61 6c 6c 62  "func">The callb
13f90 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  ack function to 
13fa0 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d  invoke.</param>.
13fb0 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
13fc0 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65 73 75  s>Returns a resu
13fd0 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73  lt code</returns
13fe0 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
13ff0 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
14000 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f 67 43  rrorCode SetLogC
14010 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c 6f  allback(SQLiteLo
14020 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  gCallback func).
14030 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
14040 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
14050 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
14060 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
14070 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a 20 20  _config_log(..  
14080 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
14090 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51  ConfigOpsEnum.SQ
140a0 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c  LITE_CONFIG_LOG,
140b0 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
140c0 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ro);....        
140d0 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
140e0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
140f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14140 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
14150 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
14160 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61     /// Creates a
14170 20 6e 65 77 20 53 51 4c 69 74 65 20 62 61 63 6b   new SQLite back
14180 75 70 20 6f 62 6a 65 63 74 20 62 61 73 65 64 20  up object based 
14190 6f 6e 20 74 68 65 20 70 72 6f 76 69 64 65 64 20  on the provided 
141a0 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20  destination..   
141b0 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 63 6f   /// database co
141c0 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 73  nnection.  The s
141d0 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20 63  ource database c
141e0 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74 68 65  onnection is the
141f0 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 61 73   one..    /// as
14200 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
14210 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 65 20  is object.  The 
14220 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73 74 69  source and desti
14230 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 0d  nation database.
14240 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74  .    /// connect
14250 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 74  ions cannot be t
14260 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f  he same...    //
14270 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
14280 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
14290 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68 65 20  e="destCnn">The 
142a0 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61  destination data
142b0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
142c0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
142d0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
142e0 65 73 74 4e 61 6d 65 22 3e 54 68 65 20 64 65 73  estName">The des
142f0 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73  tination databas
14300 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d  e name.</param>.
14310 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
14320 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d 65  name="sourceName
14330 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64 61 74  ">The source dat
14340 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72  abase name.</par
14350 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
14360 74 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c 79 20  turns>The newly 
14370 63 72 65 61 74 65 64 20 62 61 63 6b 75 70 20 6f  created backup o
14380 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e  bject.</returns>
14390 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
143a0 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 42 61  verride SQLiteBa
143b0 63 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a 65 42  ckup InitializeB
143c0 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
143d0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
143e0 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20 20 20   destCnn,..     
143f0 20 20 20 73 74 72 69 6e 67 20 64 65 73 74 4e 61     string destNa
14400 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  me,..        str
14410 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65 0d 0a  ing sourceName..
14420 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
14430 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
14440 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  stCnn == null)..
14450 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
14460 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
14470 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73  llException("des
14480 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tCnn");....     
14490 20 20 20 69 66 20 28 64 65 73 74 4e 61 6d 65 20     if (destName 
144a0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
144b0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
144c0 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
144d0 70 74 69 6f 6e 28 22 64 65 73 74 4e 61 6d 65 22  ption("destName"
144e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
144f0 20 28 73 6f 75 72 63 65 4e 61 6d 65 20 3d 3d 20   (sourceName == 
14500 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
14510 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
14520 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
14530 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d 65 22 29  on("sourceName")
14540 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
14550 69 74 65 33 20 64 65 73 74 53 71 6c 69 74 65 33  ite3 destSqlite3
14560 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73 71 6c 20   = destCnn._sql 
14570 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a 20  as SQLite3;.... 
14580 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74 53         if (destS
14590 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c 29 0d  qlite3 == null).
145a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
145b0 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45  ow new ArgumentE
145c0 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
145d0 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73 74             "Dest
145e0 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  ination connecti
145f0 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61 70 70 65  on has no wrappe
14600 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  r.",..          
14610 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29        "destCnn")
14620 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
14630 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
14640 64 6c 65 20 64 65 73 74 48 61 6e 64 6c 65 20 3d  dle destHandle =
14650 20 64 65 73 74 53 71 6c 69 74 65 33 2e 5f 73 71   destSqlite3._sq
14660 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  l;....        if
14670 20 28 64 65 73 74 48 61 6e 64 6c 65 20 3d 3d 20   (destHandle == 
14680 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
14690 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
146a0 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d  umentException(.
146b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
146c0 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f   "Destination co
146d0 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
146e0 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
146f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14700 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a     "destCnn");..
14710 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
14720 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
14730 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 20   sourceHandle = 
14740 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  _sql;....       
14750 20 69 66 20 28 73 6f 75 72 63 65 48 61 6e 64 6c   if (sourceHandl
14760 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
14770 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
14780 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
14790 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
147a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
147b0 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  ource connection
147c0 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
147d0 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20  handle.");....  
147e0 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 44 65        byte[] zDe
147f0 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28  stName = ToUTF8(
14800 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  destName);..    
14810 20 20 20 20 62 79 74 65 5b 5d 20 7a 53 6f 75 72      byte[] zSour
14820 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28  ceName = ToUTF8(
14830 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  sourceName);....
14840 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
14850 63 6b 75 70 48 61 6e 64 6c 65 20 62 61 63 6b 75  ckupHandle backu
14860 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d  pHandle = null;.
14870 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  ...        try..
14880 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14890 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
148a0 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
148b0 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
148c0 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
148d0 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
148e0 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
148f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14900 20 49 6e 74 50 74 72 20 62 61 63 6b 75 70 20 3d   IntPtr backup =
14910 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
14920 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
14930 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20 20 20 20  kup_init(..     
14940 20 20 20 20 20 20 20 20 20 20 20 64 65 73 74 48             destH
14950 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65  andle, zDestName
14960 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 20  , sourceHandle, 
14970 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d  zSourceName);...
14980 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
14990 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50 74  (backup == IntPt
149a0 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
149b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
149c0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
149d0 72 6f 72 43 6f 64 65 20 72 65 73 75 6c 74 43 6f  rorCode resultCo
149e0 64 65 20 3d 20 52 65 73 75 6c 74 43 6f 64 65 28  de = ResultCode(
149f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14a00 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74        if (result
14a10 43 6f 64 65 20 21 3d 20 53 51 4c 69 74 65 45 72  Code != SQLiteEr
14a20 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
14a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a40 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
14a50 65 45 78 63 65 70 74 69 6f 6e 28 72 65 73 75 6c  eException(resul
14a60 74 43 6f 64 65 2c 20 47 65 74 4c 61 73 74 45 72  tCode, GetLastEr
14a70 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
14a80 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14aa0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
14ab0 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 66 61  iteException("fa
14ac0 69 6c 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69  iled to initiali
14ad0 7a 65 20 62 61 63 6b 75 70 22 29 3b 0d 0a 20 20  ze backup");..  
14ae0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
14af0 20 20 20 20 20 20 20 20 20 20 20 62 61 63 6b 75             backu
14b00 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51  pHandle = new SQ
14b10 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
14b20 28 64 65 73 74 48 61 6e 64 6c 65 2c 20 62 61 63  (destHandle, bac
14b30 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  kup);..        }
14b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
14b50 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43  teConnection.OnC
14b60 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77  hanged(null, new
14b70 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74   ConnectionEvent
14b80 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
14b90 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
14ba0 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77  ionEventType.New
14bb0 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20  CriticalHandle, 
14bc0 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20  null, null,..   
14bd0 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e           null, n
14be0 75 6c 6c 2c 20 62 61 63 6b 75 70 48 61 6e 64 6c  ull, backupHandl
14bf0 65 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a  e, null, new obj
14c00 65 63 74 5b 5d 20 7b 20 64 65 73 74 43 6e 6e 2c  ect[] { destCnn,
14c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65  ..            de
14c20 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 4e 61  stName, sourceNa
14c30 6d 65 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  me }));....     
14c40 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51     return new SQ
14c50 4c 69 74 65 42 61 63 6b 75 70 28 0d 0a 20 20 20  LiteBackup(..   
14c60 20 20 20 20 20 20 20 20 20 74 68 69 73 2c 20 62           this, b
14c70 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64 65 73  ackupHandle, des
14c80 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61  tHandle, zDestNa
14c90 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65  me, sourceHandle
14ca0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a  ,..            z
14cb0 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 20 20  SourceName);..  
14cc0 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
14cd0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
14ce0 2f 20 43 6f 70 69 65 73 20 75 70 20 74 6f 20 4e  / Copies up to N
14cf0 20 70 61 67 65 73 20 66 72 6f 6d 20 74 68 65 20   pages from the 
14d00 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
14d10 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69  to the destinati
14d20 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61  on..    /// data
14d30 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 20  base associated 
14d40 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
14d50 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  ed backup object
14d60 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
14d70 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
14d80 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
14d90 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
14da0 62 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f 70  bject to use.</p
14db0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
14dc0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61 67  param name="nPag
14dd0 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
14de0 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
14df0 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61 74 69   to copy, negati
14e00 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20 72  ve to copy all r
14e10 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73 2e 0d  emaining pages..
14e20 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
14e30 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
14e40 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e 0d  m name="retry">.
14e50 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f 20  .    /// Set to 
14e60 74 72 75 65 20 69 66 20 74 68 65 20 6f 70 65 72  true if the oper
14e70 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62  ation needs to b
14e80 65 20 72 65 74 72 69 65 64 20 64 75 65 20 74 6f  e retried due to
14e90 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f   database..    /
14ea0 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75 65  // locking issue
14eb0 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 73 65  s; otherwise, se
14ec0 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20 20 20  t to false...   
14ed0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
14ee0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
14ef0 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69  ..    /// True i
14f00 66 20 74 68 65 72 65 20 61 72 65 20 6d 6f 72 65  f there are more
14f10 20 70 61 67 65 73 20 74 6f 20 62 65 20 63 6f 70   pages to be cop
14f20 69 65 64 2c 20 66 61 6c 73 65 20 6f 74 68 65 72  ied, false other
14f30 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  wise...    /// <
14f40 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
14f50 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
14f60 20 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75 70   bool StepBackup
14f70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
14f80 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 2c 0d  eBackup backup,.
14f90 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 50 61  .        int nPa
14fa0 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66  ge,..        ref
14fb0 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20 20 20   bool retry..   
14fc0 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
14fd0 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 66         retry = f
14fe0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
14ff0 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e   if (backup == n
15000 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
15010 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
15020 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
15030 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a  n("backup");....
15040 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
15050 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c  ckupHandle handl
15060 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69  e = backup._sqli
15070 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20  te_backup;....  
15080 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
15090 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
150a0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
150b0 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
150c0 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
150e0 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
150f0 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
15100 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
15110 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74   IntPtr handlePt
15120 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
15130 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
15140 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  ePtr == IntPtr.Z
15150 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
15160 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
15170 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
15180 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
15190 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
151a0 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
151b0 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69  valid handle poi
151c0 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  nter.");....    
151d0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
151e0 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
151f0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
15200 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28  te3_backup_step(
15210 68 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61 67 65  handlePtr, nPage
15220 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 61 63 6b  );..        back
15230 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 20 3d  up._stepResult =
15240 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 76   n; /* NOTE: Sav
15250 65 20 66 6f 72 20 75 73 65 20 62 79 20 46 69 6e  e for use by Fin
15260 69 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d  ishBackup. */...
15270 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d  .        if (n =
15280 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
15290 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b  e.Ok)..        {
152a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
152b0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
152c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
152d0 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  lse if (n == SQL
152e0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73  iteErrorCode.Bus
152f0 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  y)..        {.. 
15300 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72 79             retry
15310 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
15320 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
15330 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
15340 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
15350 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
15360 43 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20  Code.Locked)..  
15370 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15380 20 20 20 20 20 72 65 74 72 79 20 3d 20 74 72 75       retry = tru
15390 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
153a0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
153b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
153c0 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
153d0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44  QLiteErrorCode.D
153e0 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  one)..        {.
153f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
15400 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
15410 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
15420 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lse..        {..
15430 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
15440 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
15450 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
15460 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
15470 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
15480 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
15490 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
154a0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
154b0 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20  pages remaining 
154c0 74 6f 20 62 65 20 63 6f 70 69 65 64 20 66 72 6f  to be copied fro
154d0 6d 20 74 68 65 20 73 6f 75 72 63 65 0d 0a 20 20  m the source..  
154e0 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 74    /// database t
154f0 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f  o the destinatio
15500 6e 20 64 61 74 61 62 61 73 65 20 61 73 73 6f 63  n database assoc
15510 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73  iated with the s
15520 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f  pecified..    //
15530 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e  / backup object.
15540 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
15550 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
15560 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75  aram name="backu
15570 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62  p">The backup ob
15580 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f  ject to check.</
15590 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
155a0 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d  <returns>The num
155b0 62 65 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d  ber of pages rem
155c0 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70  aining to be cop
155d0 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ied.</returns>..
155e0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
155f0 72 72 69 64 65 20 69 6e 74 20 52 65 6d 61 69 6e  rride int Remain
15600 69 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  ingBackup(..    
15610 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
15620 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20   backup..       
15630 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
15640 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
15650 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
15660 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
15670 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
15680 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
15690 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
156a0 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
156b0 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
156c0 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
156d0 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
156e0 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
156f0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
15700 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
15710 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
15730 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
15740 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
15750 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
15760 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
15770 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
15780 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
15790 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72  dlePtr == IntPtr
157a0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
157b0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
157c0 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
157d0 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
157e0 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
157f0 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
15800 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
15810 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20  ointer.");....  
15820 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
15830 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
15840 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  .sqlite3_backup_
15850 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64 6c 65  remaining(handle
15860 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  Ptr);..    }....
15870 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
15880 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
15890 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns the total num
158a0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
158b0 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  the source datab
158c0 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  ase associated..
158d0 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 65      /// with the
158e0 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b 75   specified backu
158f0 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f  p object...    /
15900 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
15910 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
15920 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
15930 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
15940 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d   check.</param>.
15950 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
15960 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s>The total numb
15970 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
15980 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
15990 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  se.</returns>.. 
159a0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
159b0 72 69 64 65 20 69 6e 74 20 50 61 67 65 43 6f 75  ride int PageCou
159c0 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  ntBackup(..     
159d0 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20     SQLiteBackup 
159e0 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20  backup..        
159f0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
15a00 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
15a10 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
15a20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
15a30 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
15a40 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
15a50 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
15a60 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
15a70 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
15a80 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
15a90 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
15aa0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
15ab0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
15ac0 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
15ad0 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
15ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
15af0 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
15b00 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
15b10 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
15b20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50    IntPtr handleP
15b30 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
15b40 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
15b50 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e  lePtr == IntPtr.
15b60 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
15b70 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
15b80 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
15b90 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
15ba0 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
15bb0 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
15bc0 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f  nvalid handle po
15bd0 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20  inter.");....   
15be0 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
15bf0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
15c00 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 70  sqlite3_backup_p
15c10 61 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c 65 50  agecount(handleP
15c20 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
15c30 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
15c40 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74 72 6f  ..    /// Destro
15c50 79 73 20 74 68 65 20 62 61 63 6b 75 70 20 6f 62  ys the backup ob
15c60 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62 61  ject, rolling ba
15c70 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20 74 68  ck any backup th
15c80 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20 20  at may be in..  
15c90 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d 0a    /// progess...
15ca0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
15cb0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
15cc0 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22  am name="backup"
15cd0 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65  >The backup obje
15ce0 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c 2f  ct to destroy.</
15cf0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
15d00 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
15d10 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70 28  id FinishBackup(
15d20 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
15d30 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20  Backup backup.. 
15d40 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
15d50 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63  .        if (bac
15d60 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  kup == null)..  
15d70 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
15d80 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
15d90 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75  Exception("backu
15da0 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p");....        
15db0 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
15dc0 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b  le handle = back
15dd0 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75  up._sqlite_backu
15de0 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  p;....        if
15df0 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c   (handle == null
15e00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
15e10 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
15e20 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
15e30 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
15e40 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
15e50 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
15e60 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
15e70 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
15e80 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64  handlePtr = hand
15e90 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  le;....        i
15ea0 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20  f (handlePtr == 
15eb0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
15ec0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
15ed0 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
15ee0 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
15ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f00 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
15f10 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
15f20 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b  ndle pointer.");
15f30 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
15f40 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
15f50 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
15f60 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
15f70 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
15f80 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f  3_backup_finish_
15f90 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 50 74  interop(handlePt
15fa0 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  r);..#else..    
15fb0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
15fc0 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
15fd0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
15fe0 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73  te3_backup_finis
15ff0 68 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 23  h(handlePtr);..#
16000 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 68  endif..        h
16010 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65 41  andle.SetHandleA
16020 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a 23  sInvalid();....#
16030 69 66 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 0d  if COUNT_HANDLE.
16040 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20  .        if ((n 
16050 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
16060 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d 3d 20  de.Ok) || (n == 
16070 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75  backup._stepResu
16080 6c 74 29 29 20 68 61 6e 64 6c 65 2e 57 61 73 52  lt)) handle.WasR
16090 65 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a 23 65  eleasedOk();..#e
160a0 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
160b0 69 66 20 28 28 6e 20 21 3d 20 53 51 4c 69 74 65  if ((n != SQLite
160c0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26  ErrorCode.Ok) &&
160d0 20 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e 5f 73   (n != backup._s
160e0 74 65 70 52 65 73 75 6c 74 29 29 0d 0a 20 20 20  tepResult))..   
160f0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
16100 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
16110 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
16120 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
16130 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
16140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16190 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
161a0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
161b0 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66  // Determines if
161c0 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
161d0 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65   library has bee
161e0 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f  n initialized fo
161f0 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63  r the..    /// c
16200 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d  urrent process..
16210 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
16220 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
16230 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
16240 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61  A boolean indica
16250 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
16260 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  not the SQLite c
16270 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20  ore library has 
16280 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e  been..    /// in
16290 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68  itialized for th
162a0 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
162b0 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  s...    /// </re
162c0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
162d0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
162e0 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a 65 64  ol IsInitialized
162f0 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
16300 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63     return Static
16310 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 3b  IsInitialized();
16320 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
16330 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
16340 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73    /// Determines
16350 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63   if the SQLite c
16360 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20  ore library has 
16370 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
16380 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f   for the..    //
16390 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  / current proces
163a0 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
163b0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
163c0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
163d0 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  // A boolean ind
163e0 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20  icating whether 
163f0 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74  or not the SQLit
16400 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68  e core library h
16410 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f  as been..    ///
16420 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72   initialized for
16430 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
16440 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cess...    /// <
16450 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
16460 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62  nternal static b
16470 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e 69 74  ool StaticIsInit
16480 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b  ialized()..    {
16490 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
164a0 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a        // BUGFIX:
164b0 20 50 72 65 76 65 6e 74 20 72 61 63 65 73 20 77   Prevent races w
164c0 69 74 68 20 6f 74 68 65 72 20 74 68 72 65 61 64  ith other thread
164d0 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74 69 72  s for this entir
164e0 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20 20  e block, due..  
164f0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
16500 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69 6e 61   to the try/fina
16510 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e 20 20  lly semantics.  
16520 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32 39 30  See ticket [7290
16530 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20 20  5c9a77]...      
16540 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c 6f    //..        lo
16550 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20  ck (syncRoot).. 
16560 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16570 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
16580 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
16590 61 76 65 20 74 68 65 20 73 74 61 74 65 20 6f 66  ave the state of
165a0 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c 61   the logging cla
165b0 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65 73 74  ss and then rest
165c0 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20 20 20  ore it..        
165d0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 66 74      //       aft
165e0 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65 20 74  er we are done t
165f0 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67 20  o avoid logging 
16600 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20 65  too many false e
16610 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20 20  rrors...        
16620 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
16630 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 45 6e      bool savedEn
16640 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c 6f  abled = SQLiteLo
16650 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20  g.Enabled;..    
16660 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
16670 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c 73  g.Enabled = fals
16680 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
16690 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
166a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
166b0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
166c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
166d0 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20 5b  E: This method [
166e0 61 62 5d 75 73 65 73 20 74 68 65 20 66 61 63 74  ab]uses the fact
166f0 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c   that SQLite wil
16700 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20  l always..      
16710 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
16720 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
16730 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79 20 75  _ERROR for any u
16740 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72 61  nknown configura
16750 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20 20  tion option..   
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
16770 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20 74        *unless* t
16780 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
16790 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  y has already be
167a0 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0d  en initialized..
167b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
167c0 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74 68 61   //       In tha
167d0 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c 20 61  t case it will a
167e0 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53 51 4c  lways return SQL
167f0 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20 20  ITE_MISUSE...   
16800 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
16810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16820 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
16830 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
16840 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
16850 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d 0a  3_config_none(..
16860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16870 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67      SQLiteConfig
16880 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43  OpsEnum.SQLITE_C
16890 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a  ONFIG_NONE);....
168a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168b0 72 65 74 75 72 6e 20 28 72 63 20 3d 3d 20 53 51  return (rc == SQ
168c0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4d 69  LiteErrorCode.Mi
168d0 73 75 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  suse);..        
168e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
168f0 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
16900 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16910 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
16920 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 73  eLog.Enabled = s
16930 61 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a 20 20  avedEnabled;..  
16940 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
16950 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
16960 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
16970 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70  y>..    /// Help
16980 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72  er function to r
16990 65 74 72 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e  etrieve a column
169a0 20 6f 66 20 64 61 74 61 20 66 72 6f 6d 20 61 6e   of data from an
169b0 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
169c0 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
169d0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
169e0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d  <param name="stm
169f0 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74  t">The statement
16a00 20 62 65 69 6e 67 20 73 74 65 70 28 29 27 64 20   being step()'d 
16a10 74 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d  through</param>.
16a20 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
16a30 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68 65  name="flags">The
16a40 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   flags associate
16a50 64 20 77 69 74 68 20 74 68 65 20 63 6f 6e 6e 65  d with the conne
16a60 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  ction.</param>..
16a70 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
16a80 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68 65 20  ame="index">The 
16a90 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20  column index to 
16aa0 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
16ab0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
16ac0 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20   name="typ">The 
16ad0 74 79 70 65 20 6f 66 20 64 61 74 61 20 63 6f 6e  type of data con
16ae0 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f  tained in the co
16af0 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74  lumn.  If Uninit
16b00 69 61 6c 69 7a 65 64 2c 20 74 68 69 73 20 66 75  ialized, this fu
16b10 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72  nction will retr
16b20 69 65 76 65 20 74 68 65 20 64 61 74 61 74 79 70  ieve the datatyp
16b30 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f  e information.</
16b40 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
16b50 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73  <returns>Returns
16b60 20 74 68 65 20 64 61 74 61 20 69 6e 20 74 68 65   the data in the
16b70 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73   column</returns
16b80 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
16b90 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20  override object 
16ba0 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74 65 53  GetValue(SQLiteS
16bb0 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
16bc0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
16bd0 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
16be0 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54 79 70  index, SQLiteTyp
16bf0 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20  e typ)..    {.. 
16c00 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
16c10 79 20 61 66 66 20 3d 20 74 79 70 2e 41 66 66 69  y aff = typ.Affi
16c20 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 69 66 20  nity;..      if 
16c30 28 61 66 66 20 3d 3d 20 54 79 70 65 41 66 66 69  (aff == TypeAffi
16c40 6e 69 74 79 2e 4e 75 6c 6c 29 20 72 65 74 75 72  nity.Null) retur
16c50 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d  n DBNull.Value;.
16c60 0a 20 20 20 20 20 20 54 79 70 65 20 74 20 3d 20  .      Type t = 
16c70 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  null;....      i
16c80 66 20 28 74 79 70 2e 54 79 70 65 20 21 3d 20 44  f (typ.Type != D
16c90 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20  bType.Object).. 
16ca0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16cb0 74 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72  t = SQLiteConver
16cc0 74 2e 53 51 4c 69 74 65 54 79 70 65 54 6f 54 79  t.SQLiteTypeToTy
16cd0 70 65 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20  pe(typ);..      
16ce0 20 20 61 66 66 20 3d 20 54 79 70 65 54 6f 41 66    aff = TypeToAf
16cf0 66 69 6e 69 74 79 28 74 29 3b 0d 0a 20 20 20 20  finity(t);..    
16d00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if 
16d10 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
16d20 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
16d30 47 65 74 41 6c 6c 41 73 54 65 78 74 29 20 3d 3d  GetAllAsText) ==
16d40 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
16d50 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73 54  nFlags.GetAllAsT
16d60 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ext)..          
16d70 72 65 74 75 72 6e 20 47 65 74 54 65 78 74 28 73  return GetText(s
16d80 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a  tmt, index);....
16d90 20 20 20 20 20 20 73 77 69 74 63 68 20 28 61 66        switch (af
16da0 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  f)..      {..   
16db0 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
16dc0 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20  finity.Blob:..  
16dd0 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 2e          if (typ.
16de0 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47  Type == DbType.G
16df0 75 69 64 20 26 26 20 74 79 70 2e 41 66 66 69 6e  uid && typ.Affin
16e00 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e  ity == TypeAffin
16e10 69 74 79 2e 54 65 78 74 29 0d 0a 20 20 20 20 20  ity.Text)..     
16e20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
16e30 77 20 47 75 69 64 28 47 65 74 54 65 78 74 28 73  w Guid(GetText(s
16e40 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 0d  tmt, index));...
16e50 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e  .          int n
16e60 20 3d 20 28 69 6e 74 29 47 65 74 42 79 74 65 73   = (int)GetBytes
16e70 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c  (stmt, index, 0,
16e80 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20   null, 0, 0);.. 
16e90 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
16ea0 62 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e 5d 3b  b = new byte[n];
16eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 47 65 74 42  ..          GetB
16ec0 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78  ytes(stmt, index
16ed0 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d 0a  , 0, b, 0, n);..
16ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
16ef0 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79  typ.Type == DbTy
16f00 70 65 2e 47 75 69 64 20 26 26 20 6e 20 3d 3d 20  pe.Guid && n == 
16f10 31 36 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  16)..           
16f20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64   return new Guid
16f30 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  (b);....        
16f40 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a 20 20 20    return b;..   
16f50 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
16f60 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65 3a  finity.DateTime:
16f70 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
16f80 72 6e 20 47 65 74 44 61 74 65 54 69 6d 65 28 73  rn GetDateTime(s
16f90 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
16fa0 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
16fb0 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d  ffinity.Double:.
16fc0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
16fd0 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
16fe0 20 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c   GetDouble(stmt,
16ff0 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
17000 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65      return Conve
17010 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65  rt.ChangeType(Ge
17020 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e  tDouble(stmt, in
17030 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d  dex), t, null);.
17040 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
17050 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
17060 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  :..          if 
17070 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75  (t == null) retu
17080 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74 6d 74  rn GetInt64(stmt
17090 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
170a0 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
170b0 70 65 6f 66 28 53 42 79 74 65 29 29 20 72 65 74  peof(SByte)) ret
170c0 75 72 6e 20 47 65 74 53 42 79 74 65 28 73 74 6d  urn GetSByte(stm
170d0 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
170e0 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
170f0 79 70 65 6f 66 28 42 79 74 65 29 29 20 72 65 74  ypeof(Byte)) ret
17100 75 72 6e 20 47 65 74 42 79 74 65 28 73 74 6d 74  urn GetByte(stmt
17110 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
17120 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
17130 70 65 6f 66 28 49 6e 74 31 36 29 29 20 72 65 74  peof(Int16)) ret
17140 75 72 6e 20 47 65 74 49 6e 74 31 36 28 73 74 6d  urn GetInt16(stm
17150 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
17160 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
17170 79 70 65 6f 66 28 55 49 6e 74 31 36 29 29 20 72  ypeof(UInt16)) r
17180 65 74 75 72 6e 20 47 65 74 55 49 6e 74 31 36 28  eturn GetUInt16(
17190 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
171a0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
171b0 3d 20 74 79 70 65 6f 66 28 49 6e 74 33 32 29 29  = typeof(Int32))
171c0 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 33 32   return GetInt32
171d0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
171e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
171f0 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 33 32  == typeof(UInt32
17200 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e  )) return GetUIn
17210 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
17220 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
17230 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e  (t == typeof(UIn
17240 74 36 34 29 29 20 72 65 74 75 72 6e 20 47 65 74  t64)) return Get
17250 55 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  UInt64(stmt, ind
17260 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
17270 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43  return Convert.C
17280 68 61 6e 67 65 54 79 70 65 28 47 65 74 49 6e 74  hangeType(GetInt
17290 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  64(stmt, index),
172a0 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20   t, null);..    
172b0 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20      default:..  
172c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
172d0 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64  etText(stmt, ind
172e0 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ex);..      }.. 
172f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
17300 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
17310 74 20 47 65 74 43 75 72 73 6f 72 46 6f 72 54 61  t GetCursorForTa
17320 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
17330 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 64 62  ent stmt, int db
17340 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67 65 29 0d  , int rootPage).
17350 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
17360 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
17370 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
17380 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
17390 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 75 72  qlite3_table_cur
173a0 73 6f 72 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  sor_interop(stmt
173b0 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 64  ._sqlite_stmt, d
173c0 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a 23  b, rootPage);..#
173d0 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
173e0 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a  rn -1;..#endif..
173f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
17400 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
17410 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 6f 72 43  ong GetRowIdForC
17420 75 72 73 6f 72 28 53 51 4c 69 74 65 53 74 61 74  ursor(SQLiteStat
17430 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
17440 63 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a  cursor)..    {..
17450 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
17460 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67  DARD..      long
17470 20 72 6f 77 69 64 20 3d 20 30 3b 0d 0a 20 20 20   rowid = 0;..   
17480 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
17490 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
174a0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
174b0 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f 77 69 64  te3_cursor_rowid
174c0 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
174d0 71 6c 69 74 65 5f 73 74 6d 74 2c 20 63 75 72 73  qlite_stmt, curs
174e0 6f 72 2c 20 72 65 66 20 72 6f 77 69 64 29 3b 0d  or, ref rowid);.
174f0 0a 20 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d  .      if (rc ==
17500 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
17510 2e 4f 6b 29 20 72 65 74 75 72 6e 20 72 6f 77 69  .Ok) return rowi
17520 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  d;....      retu
17530 72 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  rn 0;..#else..  
17540 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23      return 0;..#
17550 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
17560 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
17570 72 72 69 64 65 20 76 6f 69 64 20 47 65 74 49 6e  rride void GetIn
17580 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e 64 65  dexColumnExtende
17590 64 49 6e 66 6f 28 73 74 72 69 6e 67 20 64 61 74  dInfo(string dat
175a0 61 62 61 73 65 2c 20 73 74 72 69 6e 67 20 69 6e  abase, string in
175b0 64 65 78 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75  dex, string colu
175c0 6d 6e 2c 20 72 65 66 20 69 6e 74 20 73 6f 72 74  mn, ref int sort
175d0 4d 6f 64 65 2c 20 72 65 66 20 69 6e 74 20 6f 6e  Mode, ref int on
175e0 45 72 72 6f 72 2c 20 72 65 66 20 73 74 72 69 6e  Error, ref strin
175f0 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65  g collationSeque
17600 6e 63 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  nce)..    {..#if
17610 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
17620 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  D..      IntPtr 
17630 63 6f 6c 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65  coll = IntPtr.Ze
17640 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63  ro;..      int c
17650 6f 6c 6c 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  olllen = 0;..   
17660 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
17670 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20  de rc;....      
17680 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
17690 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
176a0 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e  _index_column_in
176b0 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c  fo_interop(_sql,
176c0 20 54 6f 55 54 46 38 28 64 61 74 61 62 61 73 65   ToUTF8(database
176d0 29 2c 20 54 6f 55 54 46 38 28 69 6e 64 65 78 29  ), ToUTF8(index)
176e0 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29  , ToUTF8(column)
176f0 2c 20 72 65 66 20 73 6f 72 74 4d 6f 64 65 2c 20  , ref sortMode, 
17700 72 65 66 20 6f 6e 45 72 72 6f 72 2c 20 72 65 66  ref onError, ref
17710 20 63 6f 6c 6c 2c 20 72 65 66 20 63 6f 6c 6c 6c   coll, ref colll
17720 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  en);..      if (
17730 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc != SQLiteErro
17740 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
17750 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
17760 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29 3b 0d 0a  ion(rc, null);..
17770 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f  ..      collatio
17780 6e 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46 38  nSequence = UTF8
17790 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 2c 20 63  ToString(coll, c
177a0 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  olllen);..#else.
177b0 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f 64 65 20  .      sortMode 
177c0 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f 6e 45 72  = 0;..      onEr
177d0 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20 20 20 20  ror = 2;..      
177e0 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  collationSequenc
177f0 65 20 3d 20 22 42 49 4e 41 52 59 22 3b 0d 0a 23  e = "BINARY";..#
17800 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
17810 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
17820 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
17830 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e 74 72 6f  rCode FileContro
17840 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e 61 6d 65  l(string zDbName
17850 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74 50 74 72  , int op, IntPtr
17860 20 70 41 72 67 29 0d 0a 20 20 20 20 7b 0d 0a 20   pArg)..    {.. 
17870 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
17880 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
17890 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
178a0 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44 62 4e  trol(_sql, (zDbN
178b0 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54  ame != null) ? T
178c0 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65 29 20 3a  oUTF8(zDbName) :
178d0 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41 72 67 29   null, op, pArg)
178e0 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d  ;..    }..  }..}
178f0 0d 0a                                            ..