System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact be69c86343870e8585a73d040e787ea7e95705df:


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 37 2e 30  sion = "1.0.97.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 53 51 4c 69 74 65 43 6f 6e  ename, SQLiteCon
5150: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e  nectionFlags con
5160: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51  nectionFlags, SQ
5170: 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75  LiteOpenFlagsEnu
5180: 6d 20 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74  m openFlags, int
5190: 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f   maxPoolSize, bo
51a0: 6f 6c 20 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20  ol usePool)..   
51b0: 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20   {..      //..  
51c0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
51d0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
51e0: 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
51f0: 6e 74 6c 79 20 6f 70 65 6e 2c 20 61 74 74 65 6d  ntly open, attem
5200: 70 74 20 74 6f 0d 0a 20 20 20 20 20 20 2f 2f 20  pt to..      // 
5210: 20 20 20 20 20 20 63 6c 6f 73 65 20 69 74 20 6e        close it n
5220: 6f 77 2e 20 20 54 68 69 73 20 6d 75 73 74 20 62  ow.  This must b
5230: 65 20 64 6f 6e 65 20 62 65 63 61 75 73 65 20 74  e done because t
5240: 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72 0d  he file name or.
5250: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
5260: 6f 74 68 65 72 20 70 61 72 61 6d 65 74 65 72 73  other parameters
5270: 20 74 68 61 74 20 6d 61 79 20 69 6d 70 61 63 74   that may impact
5280: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
5290: 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20  database..      
52a0: 2f 2f 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74  //       connect
52b0: 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63 68 61  ion may have cha
52c0: 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d  nged...      //.
52d0: 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20  .      if (_sql 
52e0: 21 3d 20 6e 75 6c 6c 29 20 43 6c 6f 73 65 28 74  != null) Close(t
52f0: 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  rue);....      /
5300: 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  /..      // NOTE
5310: 3a 20 49 66 20 74 68 65 20 63 6f 6e 6e 65 63 74  : If the connect
5320: 69 6f 6e 20 77 61 73 20 6e 6f 74 20 63 6c 6f 73  ion was not clos
5330: 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c 79 2c  ed successfully,
5340: 20 74 68 72 6f 77 20 61 6e 0d 0a 20 20 20 20 20   throw an..     
5350: 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70 74   //       except
5360: 69 6f 6e 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ion now...      
5370: 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73  //..      if (_s
5380: 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql != null)..   
5390: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
53a0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
53b0: 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  ("connection han
53c0: 64 6c 65 20 69 73 20 73 74 69 6c 6c 20 61 63 74  dle is still act
53d0: 69 76 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ive");....      
53e0: 5f 75 73 65 50 6f 6f 6c 20 3d 20 75 73 65 50 6f  _usePool = usePo
53f0: 6f 6c 3b 0d 0a 20 20 20 20 20 20 5f 66 69 6c 65  ol;..      _file
5400: 4e 61 6d 65 20 3d 20 73 74 72 46 69 6c 65 6e 61  Name = strFilena
5410: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  me;....      if 
5420: 28 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20  (usePool)..     
5430: 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c   {..        _sql
5440: 20 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   = SQLiteConnect
5450: 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28 73  ionPool.Remove(s
5460: 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61 78 50  trFilename, maxP
5470: 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f 70 6f  oolSize, out _po
5480: 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 23  olVersion);....#
5490: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
54a0: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
54b0: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
54c0: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
54d0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 4f  String.Format("O
54e0: 70 65 6e 20 28 50 6f 6f 6c 29 3a 20 7b 30 7d 22  pen (Pool): {0}"
54f0: 2c 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  , (_sql != null)
5500: 20 3f 20 5f 73 71 6c 2e 54 6f 53 74 72 69 6e 67   ? _sql.ToString
5510: 28 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b  () : "<null>"));
5520: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
5530: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  }....      if (_
5540: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
5550: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
5560: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
5570: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
5580: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
5590: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
55a0: 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54  nally /* NOTE: T
55b0: 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72  hread.Abort() pr
55c0: 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20  otection. */..  
55d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
55e0: 20 20 20 49 6e 74 50 74 72 20 64 62 20 3d 20 49     IntPtr db = I
55f0: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
5600: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
5610: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66  orCode n;....#if
5620: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
5630: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  D..          if 
5640: 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  ((connectionFlag
5650: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
5660: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65  tionFlags.NoExte
5670: 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 20  nsionFunctions) 
5680: 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  != SQLiteConnect
5690: 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e  ionFlags.NoExten
56a0: 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 0d 0a  sionFunctions)..
56b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
56c0: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
56d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
56e0: 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e  .sqlite3_open_in
56f0: 74 65 72 6f 70 28 54 6f 55 54 46 38 28 73 74 72  terop(ToUTF8(str
5700: 46 69 6c 65 6e 61 6d 65 29 2c 20 6f 70 65 6e 46  Filename), openF
5710: 6c 61 67 73 2c 20 72 65 66 20 64 62 29 3b 0d 0a  lags, ref db);..
5720: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5730: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e         else..#en
5740: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  dif..          {
5750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
5760: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
5770: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70  thods.sqlite3_op
5780: 65 6e 5f 76 32 28 54 6f 55 54 46 38 28 73 74 72  en_v2(ToUTF8(str
5790: 46 69 6c 65 6e 61 6d 65 29 2c 20 72 65 66 20 64  Filename), ref d
57a0: 62 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 49 6e  b, openFlags, In
57b0: 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
57c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20         }....#if 
57d0: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
57e0: 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
57f0: 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 54  ION..          T
5800: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53  race.WriteLine(S
5810: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 4f 70  tring.Format("Op
5820: 65 6e 3a 20 7b 30 7d 22 2c 20 64 62 29 29 3b 0d  en: {0}", db));.
5830: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
5840: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
5850: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
5860: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
5870: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e  teException(n, n
5880: 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ull);..         
5890: 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69   _sql = new SQLi
58a0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64  teConnectionHand
58b0: 6c 65 28 64 62 2c 20 74 72 75 65 29 3b 0d 0a 20  le(db, true);.. 
58c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
58d0: 20 20 6c 6f 63 6b 20 28 5f 73 71 6c 29 20 7b 20    lock (_sql) { 
58e0: 2f 2a 20 48 41 43 4b 3a 20 46 6f 72 63 65 20 74  /* HACK: Force t
58f0: 68 65 20 53 79 6e 63 42 6c 6f 63 6b 20 74 6f 20  he SyncBlock to 
5900: 62 65 20 22 63 72 65 61 74 65 64 22 20 6e 6f 77  be "created" now
5910: 2e 20 2a 2f 20 7d 0d 0a 0d 0a 20 20 20 20 20 20  . */ }....      
5920: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
5930: 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c  on.OnChanged(nul
5940: 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f  l, new Connectio
5950: 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  nEventArgs(..   
5960: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
5970: 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79  onnectionEventTy
5980: 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48 61  pe.NewCriticalHa
5990: 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  ndle, null, null
59a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ,..            n
59b0: 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c  ull, null, _sql,
59c0: 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6e 65   strFilename, ne
59d0: 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 20 73 74 72  w object[] { str
59e0: 46 69 6c 65 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  Filename,..     
59f0: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
5a00: 6e 46 6c 61 67 73 2c 20 6f 70 65 6e 46 6c 61 67  nFlags, openFlag
5a10: 73 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20  s, maxPoolSize, 
5a20: 75 73 65 50 6f 6f 6c 20 7d 29 29 3b 0d 0a 20 20  usePool }));..  
5a30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f      }....      /
5a40: 2f 20 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e 73  / Bind functions
5a50: 20 74 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63 74   to this connect
5a60: 69 6f 6e 2e 20 20 49 66 20 61 6e 79 20 70 72 65  ion.  If any pre
5a70: 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 20  vious functions 
5a80: 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  of the same name
5a90: 0d 0a 20 20 20 20 20 20 2f 2f 20 77 65 72 65 20  ..      // were 
5aa0: 61 6c 72 65 61 64 79 20 62 6f 75 6e 64 2c 20 74  already bound, t
5ab0: 68 65 6e 20 74 68 65 20 6e 65 77 20 62 69 6e 64  hen the new bind
5ac0: 69 6e 67 73 20 72 65 70 6c 61 63 65 20 74 68 65  ings replace the
5ad0: 20 6f 6c 64 2e 0d 0a 20 20 20 20 20 20 69 66 20   old...      if 
5ae0: 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  ((connectionFlag
5af0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
5b00: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64  tionFlags.NoBind
5b10: 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53 51  Functions) != SQ
5b20: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
5b30: 61 67 73 2e 4e 6f 42 69 6e 64 46 75 6e 63 74 69  ags.NoBindFuncti
5b40: 6f 6e 73 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ons)..      {.. 
5b50: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 66 75           if (_fu
5b60: 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  nctions == null)
5b70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b80: 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77  _functions = new
5b90: 20 4c 69 73 74 3c 53 51 4c 69 74 65 46 75 6e 63   List<SQLiteFunc
5ba0: 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20  tion>();....    
5bb0: 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73        _functions
5bc0: 2e 41 64 64 52 61 6e 67 65 28 6e 65 77 20 4c 69  .AddRange(new Li
5bd0: 73 74 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  st<SQLiteFunctio
5be0: 6e 3e 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  n>(SQLiteFunctio
5bf0: 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28  n.BindFunctions(
5c00: 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e  this, connection
5c10: 46 6c 61 67 73 29 29 29 3b 0d 0a 20 20 20 20 20  Flags)));..     
5c20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 53 65 74 54   }....      SetT
5c30: 69 6d 65 6f 75 74 28 30 29 3b 0d 0a 20 20 20 20  imeout(0);..    
5c40: 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65 28 5f    GC.KeepAlive(_
5c50: 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  sql);..    }....
5c60: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
5c70: 72 72 69 64 65 20 76 6f 69 64 20 43 6c 65 61 72  rride void Clear
5c80: 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Pool()..    {.. 
5c90: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
5ca0: 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50  ctionPool.ClearP
5cb0: 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d  ool(_fileName);.
5cc0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
5cd0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5ce0: 69 6e 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29 0d  int CountPool().
5cf0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5d00: 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
5d10: 67 2c 20 69 6e 74 3e 20 63 6f 75 6e 74 73 20 3d  g, int> counts =
5d20: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
5d30: 69 6e 74 20 6f 70 65 6e 43 6f 75 6e 74 20 3d 20  int openCount = 
5d40: 30 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  0;..        int 
5d50: 63 6c 6f 73 65 43 6f 75 6e 74 20 3d 20 30 3b 0d  closeCount = 0;.
5d60: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 74 6f 74  .        int tot
5d70: 61 6c 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a  alCount = 0;....
5d80: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
5d90: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65 74  nnectionPool.Get
5da0: 43 6f 75 6e 74 73 28 5f 66 69 6c 65 4e 61 6d 65  Counts(_fileName
5db0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
5dc0: 65 66 20 63 6f 75 6e 74 73 2c 20 72 65 66 20 6f  ef counts, ref o
5dd0: 70 65 6e 43 6f 75 6e 74 2c 20 72 65 66 20 63 6c  penCount, ref cl
5de0: 6f 73 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20  oseCount,..     
5df0: 20 20 20 20 20 20 20 72 65 66 20 74 6f 74 61 6c         ref total
5e00: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
5e10: 20 20 20 72 65 74 75 72 6e 20 74 6f 74 61 6c 43     return totalC
5e20: 6f 75 6e 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ount;..    }....
5e30: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
5e40: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 69  rride void SetTi
5e50: 6d 65 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f  meout(int nTimeo
5e60: 75 74 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  utMS)..    {..  
5e70: 20 20 20 20 49 6e 74 50 74 72 20 64 62 20 3d 20      IntPtr db = 
5e80: 5f 73 71 6c 3b 0d 0a 20 20 20 20 20 20 69 66 20  _sql;..      if 
5e90: 28 64 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  (db == IntPtr.Ze
5ea0: 72 6f 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  ro) throw new SQ
5eb0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6e  LiteException("n
5ec0: 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  o connection han
5ed0: 64 6c 65 20 61 76 61 69 6c 61 62 6c 65 22 29 3b  dle available");
5ee0: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
5ef0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
5f00: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5f10: 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d  sqlite3_busy_tim
5f20: 65 6f 75 74 28 64 62 2c 20 6e 54 69 6d 65 6f 75  eout(db, nTimeou
5f30: 74 4d 53 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  tMS);..      if 
5f40: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
5f50: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
5f60: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
5f70: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
5f80: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
5f90: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
5fa0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53 74 65  verride bool Ste
5fb0: 70 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  p(SQLiteStatemen
5fc0: 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a  t stmt)..    {..
5fd0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
5fe0: 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20  rCode n;..      
5ff0: 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c  Random rnd = nul
6000: 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 73  l;..      uint s
6010: 74 61 72 74 74 69 63 6b 20 3d 20 28 75 69 6e 74  tarttick = (uint
6020: 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63  )Environment.Tic
6030: 6b 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 75  kCount;..      u
6040: 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 75  int timeout = (u
6050: 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61  int)(stmt._comma
6060: 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f  nd._commandTimeo
6070: 75 74 20 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a 20  ut * 1000);.... 
6080: 20 20 20 20 20 77 68 69 6c 65 20 28 74 72 75 65       while (true
6090: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
60a0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
60b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
60c0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
60d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
60e0: 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f     finally /* NO
60f0: 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74  TE: Thread.Abort
6100: 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a  () protection. *
6110: 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  /..        {..  
6120: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
6130: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6140: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 73 74 6d  sqlite3_step(stm
6150: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b  t._sqlite_stmt);
6160: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
6170: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
6180: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
6190: 52 6f 77 29 20 72 65 74 75 72 6e 20 74 72 75 65  Row) return true
61a0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
61b0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
61c0: 6f 64 65 2e 44 6f 6e 65 29 20 72 65 74 75 72 6e  ode.Done) return
61d0: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
61e0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
61f0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
6200: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
6210: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
6220: 72 43 6f 64 65 20 72 3b 0d 0a 0d 0a 20 20 20 20  rCode r;....    
6230: 20 20 20 20 20 20 2f 2f 20 41 6e 20 65 72 72 6f        // An erro
6240: 72 20 6f 63 63 75 72 72 65 64 2c 20 61 74 74 65  r occurred, atte
6250: 6d 70 74 20 74 6f 20 72 65 73 65 74 20 74 68 65  mpt to reset the
6260: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 66 20   statement.  If 
6270: 74 68 65 20 72 65 73 65 74 20 77 6f 72 6b 65 64  the reset worked
6280: 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20   because the..  
6290: 20 20 20 20 20 20 20 20 2f 2f 20 73 63 68 65 6d          // schem
62a0: 61 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 72  a has changed, r
62b0: 65 2d 74 72 79 20 74 68 65 20 73 74 65 70 20 61  e-try the step a
62c0: 67 61 69 6e 2e 20 20 49 66 20 69 74 20 65 72 72  gain.  If it err
62d0: 6f 72 65 64 20 6f 75 72 20 62 65 63 61 75 73 65  ored our because
62e0: 20 74 68 65 20 64 61 74 61 62 61 73 65 0d 0a 20   the database.. 
62f0: 20 20 20 20 20 20 20 20 20 2f 2f 20 69 73 20 6c           // is l
6300: 6f 63 6b 65 64 2c 20 74 68 65 6e 20 6b 65 65 70  ocked, then keep
6310: 20 72 65 74 72 79 69 6e 67 20 75 6e 74 69 6c 20   retrying until 
6320: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 69 6d 65  the command time
6330: 6f 75 74 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20  out occurs...   
6340: 20 20 20 20 20 20 20 72 20 3d 20 52 65 73 65 74         r = Reset
6350: 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (stmt);....     
6360: 20 20 20 20 20 69 66 20 28 72 20 3d 3d 20 53 51       if (r == SQ
6370: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
6380: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
6390: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
63a0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
63b0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a  astError());....
63c0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
63d0: 66 20 28 28 72 20 3d 3d 20 53 51 4c 69 74 65 45  f ((r == SQLiteE
63e0: 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20  rrorCode.Locked 
63f0: 7c 7c 20 72 20 3d 3d 20 53 51 4c 69 74 65 45 72  || r == SQLiteEr
6400: 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 26 26  rorCode.Busy) &&
6410: 20 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21   stmt._command !
6420: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6430: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6440: 20 20 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67    // Keep trying
6450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
6460: 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f   (rnd == null) /
6470: 2f 20 46 69 72 73 74 20 74 69 6d 65 20 77 65 27  / First time we'
6480: 76 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74  ve encountered t
6490: 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20  he lock..       
64a0: 20 20 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77         rnd = new
64b0: 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20   Random();....  
64c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20            // If 
64d0: 77 65 27 76 65 20 65 78 63 65 65 64 65 64 20 74  we've exceeded t
64e0: 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d  he command's tim
64f0: 65 6f 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e  eout, give up an
6500: 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72  d throw an error
6510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
6520: 20 28 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d   ((uint)Environm
6530: 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20  ent.TickCount - 
6540: 73 74 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65  starttick > time
6550: 6f 75 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  out)..          
6560: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6570: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
6580: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 2c 20  iteException(r, 
6590: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
65a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
65b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
65c0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
65d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
65e0: 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65  // Otherwise sle
65f0: 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20  ep for a random 
6600: 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75  amount of time u
6610: 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20  p to 150ms..    
6620: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
6630: 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61  .Threading.Threa
6640: 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74  d.Sleep(rnd.Next
6650: 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20  (1, 150));..    
6660: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6670: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6680: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..    
6690: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
66a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
66b0: 48 61 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f  Has the sqlite3_
66c0: 65 72 72 73 74 72 28 29 20 63 6f 72 65 20 6c 69  errstr() core li
66d0: 62 72 61 72 79 20 41 50 49 20 62 65 65 6e 20 63  brary API been c
66e0: 68 65 63 6b 65 64 20 66 6f 72 20 79 65 74 3f 0d  hecked for yet?.
66f0: 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73 6f 2c 20  .    /// If so, 
6700: 69 73 20 69 74 20 70 72 65 73 65 6e 74 3f 0d 0a  is it present?..
6710: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
6720: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
6730: 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 68 61 76  static bool? hav
6740: 65 5f 65 72 72 73 74 72 20 3d 20 6e 75 6c 6c 3b  e_errstr = null;
6750: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
6760: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
6770: 65 74 75 72 6e 73 20 74 68 65 20 65 72 72 6f 72  eturns the error
6780: 20 6d 65 73 73 61 67 65 20 66 6f 72 20 74 68 65   message for the
6790: 20 73 70 65 63 69 66 69 65 64 20 53 51 4c 69 74   specified SQLit
67a0: 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 75 73  e return code us
67b0: 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65  ing..    /// the
67c0: 20 73 71 6c 69 74 65 33 5f 65 72 72 73 74 72 28   sqlite3_errstr(
67d0: 29 20 66 75 6e 63 74 69 6f 6e 2c 20 66 61 6c 6c  ) function, fall
67e0: 69 6e 67 20 62 61 63 6b 20 74 6f 20 74 68 65 20  ing back to the 
67f0: 69 6e 74 65 72 6e 61 6c 20 6c 6f 6f 6b 75 70 0d  internal lookup.
6800: 0a 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 20 69  .    /// table i
6810: 66 20 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20  f necessary...  
6820: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6830: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
6840: 20 6e 61 6d 65 3d 22 72 63 22 3e 54 68 65 20 53   name="rc">The S
6850: 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
6860: 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  e.</param>..    
6870: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
6880: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6f   error message o
6890: 72 20 6e 75 6c 6c 20 69 66 20 69 74 20 63 61 6e  r null if it can
68a0: 6e 6f 74 20 62 65 20 66 6f 75 6e 64 2e 3c 2f 72  not be found.</r
68b0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
68c0: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72  ernal static str
68d0: 69 6e 67 20 47 65 74 45 72 72 6f 72 53 74 72 69  ing GetErrorStri
68e0: 6e 67 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ng(SQLiteErrorCo
68f0: 64 65 20 72 63 29 0d 0a 20 20 20 20 7b 0d 0a 20  de rc)..    {.. 
6900: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
6910: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6920: 20 20 20 69 66 20 28 68 61 76 65 5f 65 72 72 73     if (have_errs
6930: 74 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  tr == null)..   
6940: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6950: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
6960: 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3d 20  versionNumber = 
6970: 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d  SQLiteVersionNum
6980: 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ber;..          
6990: 20 20 20 20 20 20 68 61 76 65 5f 65 72 72 73 74        have_errst
69a0: 72 20 3d 20 28 76 65 72 73 69 6f 6e 4e 75 6d 62  r = (versionNumb
69b0: 65 72 20 3e 3d 20 33 30 30 37 30 31 35 29 3b 0d  er >= 3007015);.
69c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
69d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
69e0: 20 28 28 62 6f 6f 6c 29 68 61 76 65 5f 65 72 72   ((bool)have_err
69f0: 73 74 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20  str)..          
6a00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6a10: 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20       IntPtr ptr 
6a20: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6a30: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 72  thods.sqlite3_er
6a40: 72 73 74 72 28 72 63 29 3b 0d 0a 0d 0a 20 20 20  rstr(rc);....   
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6a60: 28 70 74 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a  (ptr != IntPtr.Z
6a70: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
6a80: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c        {..#if !PL
6a90: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
6aa0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
6ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
6ac0: 75 72 6e 20 4d 61 72 73 68 61 6c 2e 50 74 72 54  urn Marshal.PtrT
6ad0: 6f 53 74 72 69 6e 67 41 6e 73 69 28 70 74 72 29  oStringAnsi(ptr)
6ae0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
6af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6b00: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
6b10: 67 28 70 74 72 2c 20 2d 31 29 3b 0d 0a 23 65 6e  g(ptr, -1);..#en
6b20: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
6b30: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6b40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
6b50: 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch 
6b60: 28 45 6e 74 72 79 50 6f 69 6e 74 4e 6f 74 46 6f  (EntryPointNotFo
6b70: 75 6e 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20  undException).. 
6b80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6b90: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
6ba0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
6bb0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
6bc0: 6e 20 46 61 6c 6c 62 61 63 6b 47 65 74 45 72 72  n FallbackGetErr
6bd0: 6f 72 53 74 72 69 6e 67 28 72 63 29 3b 0d 0a 20  orString(rc);.. 
6be0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
6bf0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
6c00: 2f 2f 20 48 61 73 20 74 68 65 20 73 71 6c 69 74  // Has the sqlit
6c10: 65 33 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79  e3_stmt_readonly
6c20: 28 29 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  () core library 
6c30: 41 50 49 20 62 65 65 6e 20 63 68 65 63 6b 65 64  API been checked
6c40: 20 66 6f 72 20 79 65 74 3f 0d 0a 20 20 20 20 2f   for yet?..    /
6c50: 2f 2f 20 49 66 20 73 6f 2c 20 69 73 20 69 74 20  // If so, is it 
6c60: 70 72 65 73 65 6e 74 3f 0d 0a 20 20 20 20 2f 2f  present?..    //
6c70: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
6c80: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
6c90: 20 62 6f 6f 6c 3f 20 68 61 76 65 5f 73 74 6d 74   bool? have_stmt
6ca0: 5f 72 65 61 64 6f 6e 6c 79 20 3d 20 6e 75 6c 6c  _readonly = null
6cb0: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
6cc0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
6cd0: 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  Returns non-zero
6ce0: 20 69 66 20 74 68 65 20 73 70 65 63 69 66 69 65   if the specifie
6cf0: 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 72  d statement is r
6d00: 65 61 64 2d 6f 6e 6c 79 20 69 6e 20 6e 61 74 75  ead-only in natu
6d10: 72 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  re...    /// </s
6d20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
6d30: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74   <param name="st
6d40: 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e  mt">The statemen
6d50: 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72  t to check.</par
6d60: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
6d70: 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20 74 68  turns>True if th
6d80: 65 20 6f 75 74 65 72 20 71 75 65 72 79 20 69 73  e outer query is
6d90: 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c 2f 72 65 74   read-only.</ret
6da0: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
6db0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
6dc0: 6c 20 49 73 52 65 61 64 4f 6e 6c 79 28 0d 0a 20  l IsReadOnly(.. 
6dd0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
6de0: 74 65 6d 65 6e 74 20 73 74 6d 74 0d 0a 20 20 20  tement stmt..   
6df0: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
6e00: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
6e10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6e20: 20 20 20 69 66 20 28 68 61 76 65 5f 73 74 6d 74     if (have_stmt
6e30: 5f 72 65 61 64 6f 6e 6c 79 20 3d 3d 20 6e 75 6c  _readonly == nul
6e40: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
6e50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6e60: 20 20 20 69 6e 74 20 76 65 72 73 69 6f 6e 4e 75     int versionNu
6e70: 6d 62 65 72 20 3d 20 53 51 4c 69 74 65 56 65 72  mber = SQLiteVer
6e80: 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20  sionNumber;..   
6e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 76               hav
6ea0: 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 20  e_stmt_readonly 
6eb0: 3d 20 28 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72  = (versionNumber
6ec0: 20 3e 3d 20 33 30 30 37 30 30 34 29 3b 0d 0a 20   >= 3007004);.. 
6ed0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
6ee0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6ef0: 28 62 6f 6f 6c 29 68 61 76 65 5f 73 74 6d 74 5f  (bool)have_stmt_
6f00: 72 65 61 64 6f 6e 6c 79 29 0d 0a 20 20 20 20 20  readonly)..     
6f10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6f20: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6f30: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6f40: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 74 6d  hods.sqlite3_stm
6f50: 74 5f 72 65 61 64 6f 6e 6c 79 28 0d 0a 20 20 20  t_readonly(..   
6f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f70: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
6f80: 6d 74 29 20 21 3d 20 30 3b 0d 0a 20 20 20 20 20  mt) != 0;..     
6f90: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6fa0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 63 61 74    }..        cat
6fb0: 63 68 20 28 45 6e 74 72 79 50 6f 69 6e 74 4e 6f  ch (EntryPointNo
6fc0: 74 46 6f 75 6e 64 45 78 63 65 70 74 69 6f 6e 29  tFoundException)
6fd0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
6fe0: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
6ff0: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
7000: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
7010: 74 75 72 6e 20 66 61 6c 73 65 3b 20 2f 2a 20 4e  turn false; /* N
7020: 4f 54 45 3a 20 55 6e 6b 6e 6f 77 6e 2c 20 61 73  OTE: Unknown, as
7030: 73 75 6d 65 20 66 61 6c 73 65 2e 20 2a 2f 0d 0a  sume false. */..
7040: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
7050: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
7060: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52  QLiteErrorCode R
7070: 65 73 65 74 28 53 51 4c 69 74 65 53 74 61 74 65  eset(SQLiteState
7080: 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20  ment stmt)..    
7090: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
70a0: 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23  rrorCode n;....#
70b0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
70c0: 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  ARD..      n = U
70d0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
70e0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74  ds.sqlite3_reset
70f0: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
7100: 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65  qlite_stmt);..#e
7110: 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  lse..      n = U
7120: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
7130: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74  ds.sqlite3_reset
7140: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
7150: 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  mt);..#endif....
7160: 20 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20        // If the 
7170: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 64 2c 20  schema changed, 
7180: 74 72 79 20 61 6e 64 20 72 65 2d 70 72 65 70 61  try and re-prepa
7190: 72 65 20 69 74 0d 0a 20 20 20 20 20 20 69 66 20  re it..      if 
71a0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
71b0: 72 43 6f 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20  rCode.Schema).. 
71c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
71d0: 2f 2f 20 52 65 63 72 65 61 74 65 20 61 20 64 75  // Recreate a du
71e0: 6d 6d 79 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20  mmy statement.. 
71f0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74         string st
7200: 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  r = null;..     
7210: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
7220: 53 74 61 74 65 6d 65 6e 74 20 74 6d 70 20 3d 20  Statement tmp = 
7230: 50 72 65 70 61 72 65 28 6e 75 6c 6c 2c 20 73 74  Prepare(null, st
7240: 6d 74 2e 5f 73 71 6c 53 74 61 74 65 6d 65 6e 74  mt._sqlStatement
7250: 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e 74 29 28 73  , null, (uint)(s
7260: 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f  tmt._command._co
7270: 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31  mmandTimeout * 1
7280: 30 30 30 29 2c 20 72 65 66 20 73 74 72 29 29 0d  000), ref str)).
7290: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
72a0: 20 20 20 20 20 20 2f 2f 20 46 69 6e 61 6c 69 7a        // Finaliz
72b0: 65 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 73  e the existing s
72c0: 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20  tatement..      
72d0: 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65      stmt._sqlite
72e0: 5f 73 74 6d 74 2e 44 69 73 70 6f 73 65 28 29 3b  _stmt.Dispose();
72f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52  ..          // R
7300: 65 61 73 73 69 67 6e 20 61 20 6e 65 77 20 73 74  eassign a new st
7310: 61 74 65 6d 65 6e 74 20 70 6f 69 6e 74 65 72 20  atement pointer 
7320: 74 6f 20 74 68 65 20 6f 6c 64 20 73 74 61 74 65  to the old state
7330: 6d 65 6e 74 20 61 6e 64 20 63 6c 65 61 72 20 74  ment and clear t
7340: 68 65 20 74 65 6d 70 6f 72 61 72 79 20 6f 6e 65  he temporary one
7350: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d 74  ..          stmt
7360: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20  ._sqlite_stmt = 
7370: 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmp._sqlite_stmt
7380: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 6d 70  ;..          tmp
7390: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20  ._sqlite_stmt = 
73a0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
73b0: 20 20 20 2f 2f 20 52 65 61 70 70 6c 79 20 70 61     // Reapply pa
73c0: 72 61 6d 65 74 65 72 73 0d 0a 20 20 20 20 20 20  rameters..      
73d0: 20 20 20 20 73 74 6d 74 2e 42 69 6e 64 50 61 72      stmt.BindPar
73e0: 61 6d 65 74 65 72 73 28 29 3b 0d 0a 20 20 20 20  ameters();..    
73f0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72      }..        r
7400: 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
7410: 72 43 6f 64 65 2e 55 6e 6b 6e 6f 77 6e 3b 20 2f  rCode.Unknown; /
7420: 2f 20 52 65 73 65 74 20 77 61 73 20 4f 4b 2c 20  / Reset was OK, 
7430: 77 69 74 68 20 73 63 68 65 6d 61 20 63 68 61 6e  with schema chan
7440: 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  ge..      }..   
7450: 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
7460: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
7470: 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20  .Locked || n == 
7480: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
7490: 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20 20 72  Busy)..        r
74a0: 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a 20 20 20 20  eturn n;....    
74b0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
74c0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
74d0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
74e0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
74f0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
7500: 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  r());....      r
7510: 65 74 75 72 6e 20 6e 3b 20 2f 2f 20 57 65 20 72  eturn n; // We r
7520: 65 73 65 74 20 4f 4b 2c 20 6e 6f 20 73 63 68 65  eset OK, no sche
7530: 6d 61 20 63 68 61 6e 67 65 73 0d 0a 20 20 20 20  ma changes..    
7540: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
7550: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
7560: 67 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  g GetLastError()
7570: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
7580: 20 72 65 74 75 72 6e 20 47 65 74 4c 61 73 74 45   return GetLastE
7590: 72 72 6f 72 28 6e 75 6c 6c 29 3b 0d 0a 20 20 20  rror(null);..   
75a0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
75b0: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
75c0: 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  ng GetLastError(
75d0: 73 74 72 69 6e 67 20 64 65 66 56 61 6c 75 65 29  string defValue)
75e0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
75f0: 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d   string result =
7600: 20 53 51 4c 69 74 65 42 61 73 65 2e 47 65 74 4c   SQLiteBase.GetL
7610: 61 73 74 45 72 72 6f 72 28 5f 73 71 6c 2c 20 5f  astError(_sql, _
7620: 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  sql);..        i
7630: 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
7640: 4f 72 45 6d 70 74 79 28 72 65 73 75 6c 74 29 29  OrEmpty(result))
7650: 20 72 65 73 75 6c 74 20 3d 20 64 65 66 56 61 6c   result = defVal
7660: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ue;..        ret
7670: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
7680: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
7690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
76a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
76b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
76c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
76d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
76e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
76f0: 20 23 72 65 67 69 6f 6e 20 51 75 65 72 79 20 44   #region Query D
7700: 69 61 67 6e 6f 73 74 69 63 73 20 53 75 70 70 6f  iagnostics Suppo
7710: 72 74 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  rt..#if !PLATFOR
7720: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
7730: 52 4b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  RK..    /// <sum
7740: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
7750: 68 69 73 20 66 69 65 6c 64 20 69 73 20 75 73 65  his field is use
7760: 64 20 74 6f 20 6b 65 65 70 20 74 72 61 63 6b 20  d to keep track 
7770: 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
7780: 74 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 22  t the..    /// "
7790: 53 51 4c 69 74 65 5f 46 6f 72 63 65 4c 6f 67 50  SQLite_ForceLogP
77a0: 72 65 70 61 72 65 22 20 65 6e 76 69 72 6f 6e 6d  repare" environm
77b0: 65 6e 74 20 76 61 72 69 61 62 6c 65 20 68 61 73  ent variable has
77c0: 20 62 65 65 6e 20 71 75 65 72 69 65 64 2e 20 20   been queried.  
77d0: 49 66 20 73 6f 2c 0d 0a 20 20 20 20 2f 2f 2f 20  If so,..    /// 
77e0: 69 74 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20  it will only be 
77f0: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
7800: 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69  environment vari
7810: 61 62 6c 65 20 77 61 73 20 70 72 65 73 65 6e 74  able was present
7820: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
7830: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
7840: 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20  te static bool? 
7850: 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 20  forceLogPrepare 
7860: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f  = null;....    /
7870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
78d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
78e0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74  ry>..    /// Det
78f0: 65 72 6d 69 6e 65 73 20 69 66 20 61 6c 6c 20 63  ermines if all c
7900: 61 6c 6c 73 20 74 6f 20 70 72 65 70 61 72 65 20  alls to prepare 
7910: 61 20 53 51 4c 20 71 75 65 72 79 20 77 69 6c 6c  a SQL query will
7920: 20 62 65 20 6c 6f 67 67 65 64 2c 0d 0a 20 20 20   be logged,..   
7930: 20 2f 2f 2f 20 72 65 67 61 72 64 6c 65 73 73 20   /// regardless 
7940: 6f 66 20 74 68 65 20 66 6c 61 67 73 20 66 6f 72  of the flags for
7950: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
7960: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
7970: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
7980: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
7990: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d  s>..    /// Non-
79a0: 7a 65 72 6f 20 74 6f 20 6c 6f 67 20 61 6c 6c 20  zero to log all 
79b0: 63 61 6c 6c 73 20 74 6f 20 70 72 65 70 61 72 65  calls to prepare
79c0: 20 61 20 53 51 4c 20 71 75 65 72 79 2e 0d 0a 20   a SQL query... 
79d0: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
79e0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  >..    private s
79f0: 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 63 65  tatic bool Force
7a00: 4c 6f 67 50 72 65 70 61 72 65 28 29 0d 0a 20 20  LogPrepare()..  
7a10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63    {..        loc
7a20: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20  k (syncRoot)..  
7a30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7a40: 20 20 20 20 20 69 66 20 28 66 6f 72 63 65 4c 6f       if (forceLo
7a50: 67 50 72 65 70 61 72 65 20 3d 3d 20 6e 75 6c 6c  gPrepare == null
7a60: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
7a70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7a80: 20 20 69 66 20 28 55 6e 73 61 66 65 4e 61 74 69    if (UnsafeNati
7a90: 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 53 65 74  veMethods.GetSet
7aa0: 74 69 6e 67 56 61 6c 75 65 28 0d 0a 20 20 20 20  tingValue(..    
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ac0: 20 20 20 20 22 53 51 4c 69 74 65 5f 46 6f 72 63      "SQLite_Forc
7ad0: 65 4c 6f 67 50 72 65 70 61 72 65 22 2c 20 6e 75  eLogPrepare", nu
7ae0: 6c 6c 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ll) != null)..  
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
7b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7b10: 20 20 20 20 20 66 6f 72 63 65 4c 6f 67 50 72 65       forceLogPre
7b20: 70 61 72 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20  pare = true;..  
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7b50: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
7b60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
7b80: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 20  rceLogPrepare = 
7b90: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
7ba0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7bb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7bc0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
7bd0: 62 6f 6f 6c 29 66 6f 72 63 65 4c 6f 67 50 72 65  bool)forceLogPre
7be0: 70 61 72 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  pare;..        }
7bf0: 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  ..    }..#endif.
7c00: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
7c10: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
7c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c70: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e  //////....    in
7c80: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
7c90: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
7ca0: 50 72 65 70 61 72 65 28 53 51 4c 69 74 65 43 6f  Prepare(SQLiteCo
7cb0: 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74  nnection cnn, st
7cc0: 72 69 6e 67 20 73 74 72 53 71 6c 2c 20 53 51 4c  ring strSql, SQL
7cd0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 70 72 65  iteStatement pre
7ce0: 76 69 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d 65  vious, uint time
7cf0: 6f 75 74 4d 53 2c 20 72 65 66 20 73 74 72 69 6e  outMS, ref strin
7d00: 67 20 73 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20  g strRemain)..  
7d10: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 21    {..      if (!
7d20: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
7d30: 6d 70 74 79 28 73 74 72 53 71 6c 29 29 0d 0a 20  mpty(strSql)).. 
7d40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7d50: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e  //..        // N
7d60: 4f 54 45 3a 20 53 51 4c 69 74 65 20 64 6f 65 73  OTE: SQLite does
7d70: 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 74 68 65   not support the
7d80: 20 63 6f 6e 63 65 70 74 20 6f 66 20 73 65 70 61   concept of sepa
7d90: 72 61 74 65 20 73 63 68 65 6d 61 73 0d 0a 20 20  rate schemas..  
7da0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
7db0: 6e 20 6f 6e 65 20 64 61 74 61 62 61 73 65 3b 20  n one database; 
7dc0: 74 68 65 72 65 66 6f 72 65 2c 20 72 65 6d 6f 76  therefore, remov
7dd0: 65 20 74 68 65 20 62 61 73 65 20 73 63 68 65 6d  e the base schem
7de0: 61 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  a name..        
7df0: 2f 2f 20 20 20 20 20 20 20 75 73 65 64 20 74 6f  //       used to
7e00: 20 73 6d 6f 6f 74 68 20 69 6e 74 65 67 72 61 74   smooth integrat
7e10: 69 6f 6e 20 77 69 74 68 20 74 68 65 20 62 61 73  ion with the bas
7e20: 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
7e30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
7e40: 20 20 20 64 61 74 61 20 63 6c 61 73 73 65 73 2e     data classes.
7e50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
7e60: 20 20 20 20 20 20 73 74 72 69 6e 67 20 62 61 73        string bas
7e70: 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 28 63  eSchemaName = (c
7e80: 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e  nn != null) ? cn
7e90: 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  n._baseSchemaNam
7ea0: 65 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  e : null;....   
7eb0: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
7ec0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 62  .IsNullOrEmpty(b
7ed0: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 29 0d  aseSchemaName)).
7ee0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
7ef0: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
7f00: 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a  trSql.Replace(..
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
7f20: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74  ring.Format(Cult
7f30: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
7f40: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
7f50: 20 20 20 20 20 20 20 20 20 22 5b 7b 30 7d 5d 2e           "[{0}].
7f60: 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  ", baseSchemaNam
7f70: 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  e), String.Empty
7f80: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
7f90: 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e  strSql = strSql.
7fa0: 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20  Replace(..      
7fb0: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
7fc0: 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
7fd0: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
7fe0: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
7ff0: 20 20 20 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53     "{0}.", baseS
8000: 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69  chemaName), Stri
8010: 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20  ng.Empty);..    
8020: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
8030: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f  ..      SQLiteCo
8040: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
8050: 61 67 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ags =..         
8060: 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f   (cnn != null) ?
8070: 20 63 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51 4c   cnn.Flags : SQL
8080: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
8090: 67 73 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20  gs.Default;.... 
80a0: 20 20 20 20 20 69 66 20 28 0d 0a 23 69 66 20 21       if (..#if !
80b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
80c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
80d0: 20 20 20 20 20 46 6f 72 63 65 4c 6f 67 50 72 65       ForceLogPre
80e0: 70 61 72 65 28 29 20 7c 7c 0d 0a 23 65 6e 64 69  pare() ||..#endi
80f0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 28 28 66  f..          ((f
8100: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
8110: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
8120: 50 72 65 70 61 72 65 29 20 3d 3d 20 53 51 4c 69  Prepare) == SQLi
8130: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8140: 73 2e 4c 6f 67 50 72 65 70 61 72 65 29 29 0d 0a  s.LogPrepare))..
8150: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8160: 20 20 20 69 66 20 28 28 73 74 72 53 71 6c 20 3d     if ((strSql =
8170: 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 74 72 53  = null) || (strS
8180: 71 6c 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 20  ql.Length == 0) 
8190: 7c 7c 20 28 73 74 72 53 71 6c 2e 54 72 69 6d 28  || (strSql.Trim(
81a0: 29 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 29 0d  ).Length == 0)).
81b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
81c0: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
81d0: 61 67 65 28 22 50 72 65 70 61 72 69 6e 67 20 7b  age("Preparing {
81e0: 3c 6e 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22 29 3b  <nothing>}...");
81f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
8200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8210: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
8220: 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  sage(String.Form
8230: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
8240: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
8250: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
8260: 65 2c 20 22 50 72 65 70 61 72 69 6e 67 20 7b 7b  e, "Preparing {{
8270: 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72 53 71  {0}}}...", strSq
8280: 6c 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  l));..      }...
8290: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 73 74  .      IntPtr st
82a0: 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  mt = IntPtr.Zero
82b0: 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
82c0: 70 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ptr = IntPtr.Zer
82d0: 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  o;..      int le
82e0: 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51  n = 0;..      SQ
82f0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
8300: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
8310: 65 2e 53 63 68 65 6d 61 3b 0d 0a 20 20 20 20 20  e.Schema;..     
8320: 20 69 6e 74 20 72 65 74 72 69 65 73 20 3d 20 30   int retries = 0
8330: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 78  ;..      int max
8340: 69 6d 75 6d 52 65 74 72 69 65 73 20 3d 20 28 63  imumRetries = (c
8350: 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e  nn != null) ? cn
8360: 6e 2e 5f 70 72 65 70 61 72 65 52 65 74 72 69 65  n._prepareRetrie
8370: 73 20 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s : SQLiteConnec
8380: 74 69 6f 6e 2e 44 65 66 61 75 6c 74 50 72 65 70  tion.DefaultPrep
8390: 61 72 65 52 65 74 72 69 65 73 3b 0d 0a 20 20 20  areRetries;..   
83a0: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
83b0: 55 54 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20  UTF8(strSql);.. 
83c0: 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65       string type
83d0: 64 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  defs = null;..  
83e0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
83f0: 65 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d  ent cmd = null;.
8400: 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e  .      Random rn
8410: 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  d = null;..     
8420: 20 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20   uint starttick 
8430: 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d  = (uint)Environm
8440: 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a  ent.TickCount;..
8450: 0d 0a 20 20 20 20 20 20 47 43 48 61 6e 64 6c 65  ..      GCHandle
8460: 20 68 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e 64   handle = GCHand
8470: 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48 61  le.Alloc(b, GCHa
8480: 6e 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64 29  ndleType.Pinned)
8490: 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
84a0: 70 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41 64  psql = handle.Ad
84b0: 64 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63 74  drOfPinnedObject
84c0: 28 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74  ();..      SQLit
84d0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
84e0: 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65   statementHandle
84f0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
8500: 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  try..      {..  
8510: 20 20 20 20 20 20 77 68 69 6c 65 20 28 28 6e 20        while ((n 
8520: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
8530: 64 65 2e 53 63 68 65 6d 61 20 7c 7c 20 6e 20 3d  de.Schema || n =
8540: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
8550: 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d  e.Locked || n ==
8560: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8570: 2e 42 75 73 79 29 20 26 26 20 72 65 74 72 69 65  .Busy) && retrie
8580: 73 20 3c 20 6d 61 78 69 6d 75 6d 52 65 74 72 69  s < maximumRetri
8590: 65 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  es)..        {..
85a0: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
85b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
85c0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
85d0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
85e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 66    }..          f
85f0: 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20  inally /* NOTE: 
8600: 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70  Thread.Abort() p
8610: 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20  rotection. */.. 
8620: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8630: 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20 49          stmt = I
8640: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
8650: 20 20 20 20 20 20 20 20 20 70 74 72 20 3d 20 49           ptr = I
8660: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 23  ntPtr.Zero;....#
8670: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
8680: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ARD..           
8690: 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
86a0: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
86b0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
86c0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69  qlite3_prepare_i
86d0: 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 70 73 71  nterop(_sql, psq
86e0: 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c  l, b.Length - 1,
86f0: 20 72 65 66 20 73 74 6d 74 2c 20 72 65 66 20 70   ref stmt, ref p
8700: 74 72 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23  tr, ref len);..#
8710: 65 6c 73 65 0d 0a 23 69 66 20 55 53 45 5f 50 52  else..#if USE_PR
8720: 45 50 41 52 45 5f 56 32 0d 0a 20 20 20 20 20 20  EPARE_V2..      
8730: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
8740: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
8750: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
8760: 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c  (_sql, psql, b.L
8770: 65 6e 67 74 68 20 2d 20 31 2c 20 72 65 66 20 73  ength - 1, ref s
8780: 74 6d 74 2c 20 72 65 66 20 70 74 72 29 3b 0d 0a  tmt, ref ptr);..
8790: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
87a0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
87b0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
87c0: 65 33 5f 70 72 65 70 61 72 65 28 5f 73 71 6c 2c  e3_prepare(_sql,
87d0: 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20   psql, b.Length 
87e0: 2d 20 31 2c 20 72 65 66 20 73 74 6d 74 2c 20 72  - 1, ref stmt, r
87f0: 65 66 20 70 74 72 29 3b 0d 0a 23 65 6e 64 69 66  ef ptr);..#endif
8800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65  ..            le
8810: 6e 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d  n = -1;..#endif.
8820: 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  ...#if !NET_COMP
8830: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
8840: 53 54 41 54 45 4d 45 4e 54 0d 0a 20 20 20 20 20  STATEMENT..     
8850: 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
8860: 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f  teLine(String.Fo
8870: 72 6d 61 74 28 22 50 72 65 70 61 72 65 20 28 7b  rmat("Prepare ({
8880: 30 7d 29 3a 20 7b 31 7d 22 2c 20 6e 2c 20 73 74  0}): {1}", n, st
8890: 6d 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  mt));..#endif...
88a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
88b0: 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
88c0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 73  orCode.Ok) && (s
88d0: 74 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  tmt != IntPtr.Ze
88e0: 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ro))..          
88f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8900: 20 20 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74     if (statement
8910: 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20  Handle != null) 
8920: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2e  statementHandle.
8930: 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20  Dispose();..    
8940: 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
8950: 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20  entHandle = new 
8960: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
8970: 61 6e 64 6c 65 28 5f 73 71 6c 2c 20 73 74 6d 74  andle(_sql, stmt
8980: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8990: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
89a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
89b0: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  statementHandle 
89c0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
89d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
89e0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
89f0: 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75  ion.OnChanged(nu
8a00: 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69  ll, new Connecti
8a10: 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  onEventArgs(..  
8a20: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
8a30: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  teConnectionEven
8a40: 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61  tType.NewCritica
8a50: 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e  lHandle, null, n
8a60: 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ull,..          
8a70: 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20      null, null, 
8a80: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c  statementHandle,
8a90: 20 73 74 72 53 71 6c 2c 20 6e 65 77 20 6f 62 6a   strSql, new obj
8aa0: 65 63 74 5b 5d 20 7b 20 63 6e 6e 2c 0d 0a 20 20  ect[] { cnn,..  
8ab0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53              strS
8ac0: 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69  ql, previous, ti
8ad0: 6d 65 6f 75 74 4d 53 20 7d 29 29 3b 0d 0a 20 20  meoutMS }));..  
8ae0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8af0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
8b00: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
8b10: 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 20  Schema)..       
8b20: 20 20 20 20 20 72 65 74 72 69 65 73 2b 2b 3b 0d       retries++;.
8b30: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20  .          else 
8b40: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
8b50: 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 29 0d  rrorCode.Error).
8b60: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
8b70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
8b80: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74  ring.Compare(Get
8b90: 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 22 6e 65  LastError(), "ne
8ba0: 61 72 20 5c 22 54 59 50 45 53 5c 22 3a 20 73 79  ar \"TYPES\": sy
8bb0: 6e 74 61 78 20 65 72 72 6f 72 22 2c 20 53 74 72  ntax error", Str
8bc0: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
8bd0: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
8be0: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
8bf0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8c00: 20 20 20 20 20 69 6e 74 20 70 6f 73 20 3d 20 73       int pos = s
8c10: 74 72 53 71 6c 2e 49 6e 64 65 78 4f 66 28 27 3b  trSql.IndexOf(';
8c20: 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ');..           
8c30: 20 20 20 69 66 20 28 70 6f 73 20 3d 3d 20 2d 31     if (pos == -1
8c40: 29 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 4c  ) pos = strSql.L
8c50: 65 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20  ength - 1;....  
8c60: 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
8c70: 64 65 66 73 20 3d 20 73 74 72 53 71 6c 2e 53 75  defs = strSql.Su
8c80: 62 73 74 72 69 6e 67 28 30 2c 20 70 6f 73 20 2b  bstring(0, pos +
8c90: 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   1);..          
8ca0: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
8cb0: 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 70 6f  Sql.Substring(po
8cc0: 73 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20  s + 1);....     
8cd0: 20 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61           strRema
8ce0: 69 6e 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20 20 20  in = "";....    
8cf0: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
8d00: 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20  (cmd == null && 
8d10: 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20  strSql.Length > 
8d20: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
8d30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8d40: 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61       cmd = Prepa
8d50: 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20  re(cnn, strSql, 
8d60: 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75  previous, timeou
8d70: 74 4d 53 2c 20 72 65 66 20 73 74 72 52 65 6d 61  tMS, ref strRema
8d80: 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  in);..          
8d90: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
8da0: 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20  trRemain;..     
8db0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8dd0: 63 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  cmd != null)..  
8de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d                cm
8df0: 64 2e 53 65 74 54 79 70 65 73 28 74 79 70 65 64  d.SetTypes(typed
8e00: 65 66 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  efs);....       
8e10: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d         return cm
8e20: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
8e30: 7d 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35 20 7c  }..#if (NET_35 |
8e40: 7c 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f  | NET_40 || NET_
8e50: 34 35 20 7c 7c 20 4e 45 54 5f 34 35 31 29 20 26  45 || NET_451) &
8e60: 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  & !PLATFORM_COMP
8e70: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
8e80: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
8e90: 66 20 28 5f 62 75 69 6c 64 69 6e 67 53 63 68 65  f (_buildingSche
8ea0: 6d 61 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53  ma == false && S
8eb0: 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65  tring.Compare(Ge
8ec0: 74 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 30 2c  tLastError(), 0,
8ed0: 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a   "no such table:
8ee0: 20 54 45 4d 50 2e 53 43 48 45 4d 41 22 2c 20 30   TEMP.SCHEMA", 0
8ef0: 2c 20 32 36 2c 20 53 74 72 69 6e 67 43 6f 6d 70  , 26, StringComp
8f00: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
8f10: 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d  noreCase) == 0).
8f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
8f40: 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 20  rRemain = "";.. 
8f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 62 75               _bu
8f60: 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 74  ildingSchema = t
8f70: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
8f80: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
8f90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8fa0: 20 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74            ISQLit
8fb0: 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e  eSchemaExtension
8fc0: 73 20 65 78 74 20 3d 20 28 28 49 53 65 72 76 69  s ext = ((IServi
8fd0: 63 65 50 72 6f 76 69 64 65 72 29 53 51 4c 69 74  ceProvider)SQLit
8fe0: 65 46 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63  eFactory.Instanc
8ff0: 65 29 2e 47 65 74 53 65 72 76 69 63 65 28 74 79  e).GetService(ty
9000: 70 65 6f 66 28 49 53 51 4c 69 74 65 53 63 68 65  peof(ISQLiteSche
9010: 6d 61 45 78 74 65 6e 73 69 6f 6e 73 29 29 20 61  maExtensions)) a
9020: 73 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45  s ISQLiteSchemaE
9030: 78 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20  xtensions;....  
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9050: 20 28 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a   (ext != null)..
9060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9070: 20 20 65 78 74 2e 42 75 69 6c 64 54 65 6d 70 53    ext.BuildTempS
9080: 63 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20  chema(cnn);.... 
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
90a0: 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c  hile (cmd == nul
90b0: 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67  l && strSql.Leng
90c0: 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20  th > 0)..       
90d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
90e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d                cm
90f0: 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c  d = Prepare(cnn,
9100: 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75   strSql, previou
9110: 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65  s, timeoutMS, re
9120: 66 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20  f strRemain);.. 
9130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9140: 20 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d   strSql = strRem
9150: 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ain;..          
9160: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9170: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9180: 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20  n cmd;..        
9190: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
91a0: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
91c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
91d0: 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61   _buildingSchema
91e0: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
91f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
9200: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
9210: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  f..          }..
9220: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
9230: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
9240: 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c  rorCode.Locked |
9250: 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  | n == SQLiteErr
9260: 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 2f 2f 20  orCode.Busy) // 
9270: 4c 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20  Locked -- delay 
9280: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62  a small amount b
9290: 65 66 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a  efore retrying..
92a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
92b0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70           // Keep
92c0: 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20   trying..       
92d0: 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20       if (rnd == 
92e0: 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74  null) // First t
92f0: 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e  ime we've encoun
9300: 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a  tered the lock..
9310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6e                rn
9320: 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29  d = new Random()
9330: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9340: 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78 63   // If we've exc
9350: 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e  eeded the comman
9360: 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76  d's timeout, giv
9370: 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61  e up and throw a
9380: 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  n error..       
9390: 20 20 20 20 20 69 66 20 28 28 75 69 6e 74 29 45       if ((uint)E
93a0: 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43  nvironment.TickC
93b0: 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b  ount - starttick
93c0: 20 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20   > timeoutMS).. 
93d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
93e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
93f0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
9400: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
9410: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
9420: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9430: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
9440: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9450: 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65           // Othe
9460: 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20  rwise sleep for 
9470: 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20  a random amount 
9480: 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35  of time up to 15
9490: 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  0ms..           
94a0: 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64     System.Thread
94b0: 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70  ing.Thread.Sleep
94c0: 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30  (rnd.Next(1, 150
94d0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
94e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
94f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
9500: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
9510: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
9520: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
9530: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
9540: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
9550: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72 52  ....        strR
9560: 65 6d 61 69 6e 20 3d 20 55 54 46 38 54 6f 53 74  emain = UTF8ToSt
9570: 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e 29 3b 0d  ring(ptr, len);.
9580: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73  ...        if (s
9590: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21  tatementHandle !
95a0: 3d 20 6e 75 6c 6c 29 20 63 6d 64 20 3d 20 6e 65  = null) cmd = ne
95b0: 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  w SQLiteStatemen
95c0: 74 28 74 68 69 73 2c 20 66 6c 61 67 73 2c 20 73  t(this, flags, s
95d0: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20  tatementHandle, 
95e0: 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67  strSql.Substring
95f0: 28 30 2c 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74  (0, strSql.Lengt
9600: 68 20 2d 20 73 74 72 52 65 6d 61 69 6e 2e 4c 65  h - strRemain.Le
9610: 6e 67 74 68 29 2c 20 70 72 65 76 69 6f 75 73 29  ngth), previous)
9620: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
9630: 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20  urn cmd;..      
9640: 7d 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  }..      finally
9650: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
9660: 20 20 20 68 61 6e 64 6c 65 2e 46 72 65 65 28 29     handle.Free()
9670: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
9680: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
9690: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
96a0: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
96b0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
96c0: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  dle, int index).
96d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
96e0: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
96f0: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
9700: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
9710: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
9720: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
9730: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
9740: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
9750: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
9760: 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74     "Binding stat
9770: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
9780: 65 72 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e  er #{1} as NULL.
9790: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
97a0: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
97b0: 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d  index));..    }.
97c0: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
97d0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67   static void Log
97e0: 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65  Bind(SQLiteState
97f0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
9800: 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 56 61  e, int index, Va
9810: 6c 75 65 54 79 70 65 20 76 61 6c 75 65 29 0d 0a  lueType value)..
9820: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
9830: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
9840: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
9850: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
9860: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72  g.LogMessage(Str
9870: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
9880: 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e           "Bindin
9890: 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20  g statement {0} 
98a0: 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73  paramter #{1} as
98b0: 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76   type {2} with v
98c0: 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22  alue {{{3}}}..."
98d0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68  ,..            h
98e0: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
98f0: 65 78 2c 20 76 61 6c 75 65 2e 47 65 74 54 79 70  ex, value.GetTyp
9900: 65 28 29 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20  e(), value));.. 
9910: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76     }....    priv
9920: 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
9930: 67 20 46 6f 72 6d 61 74 44 61 74 65 54 69 6d 65  g FormatDateTime
9940: 28 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29  (DateTime value)
9950: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
9960: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72   StringBuilder r
9970: 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69  esult = new Stri
9980: 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a  ngBuilder();....
9990: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
99a0: 70 70 65 6e 64 28 76 61 6c 75 65 2e 54 6f 53 74  ppend(value.ToSt
99b0: 72 69 6e 67 28 22 79 79 79 79 2d 4d 4d 2d 64 64  ring("yyyy-MM-dd
99c0: 54 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46  THH:mm:ss.FFFFFF
99d0: 46 4b 22 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  FK"));..        
99e0: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20  result.Append(' 
99f0: 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73  ');..        res
9a00: 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65  ult.Append(value
9a10: 2e 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20  .Kind);..       
9a20: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27   result.Append('
9a30: 20 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65   ');..        re
9a40: 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75  sult.Append(valu
9a50: 65 2e 54 69 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20  e.Ticks);....   
9a60: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
9a70: 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  lt.ToString();..
9a80: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f      }....    pro
9a90: 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f  tected static vo
9aa0: 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74  id LogBind(SQLit
9ab0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
9ac0: 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64   handle, int ind
9ad0: 65 78 2c 20 44 61 74 65 54 69 6d 65 20 76 61 6c  ex, DateTime val
9ae0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
9af0: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
9b00: 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65  eIntPtr = handle
9b10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
9b20: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
9b30: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
9b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42  ..            "B
9b50: 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  inding statement
9b60: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b   {0} paramter #{
9b70: 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77  1} as type {2} w
9b80: 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d  ith value {{{3}}
9b90: 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  }...",..        
9ba0: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
9bb0: 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28  , index, typeof(
9bc0: 44 61 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61  DateTime), Forma
9bd0: 74 44 61 74 65 54 69 6d 65 28 76 61 6c 75 65 29  tDateTime(value)
9be0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
9bf0: 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74    protected stat
9c00: 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28  ic void LogBind(
9c10: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
9c20: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e  andle handle, in
9c30: 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20  t index, string 
9c40: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
9c50: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
9c60: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
9c70: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
9c80: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
9c90: 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  sage(String.Form
9ca0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
9cb0: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
9cc0: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
9cd0: 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32   #{1} as type {2
9ce0: 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b  } with value {{{
9cf0: 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  3}}}...",..     
9d00: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74         handleInt
9d10: 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65  Ptr, index, type
9d20: 6f 66 28 53 74 72 69 6e 67 29 2c 20 28 76 61 6c  of(String), (val
9d30: 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61  ue != null) ? va
9d40: 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29  lue : "<null>"))
9d50: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9d60: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
9d70: 74 72 69 6e 67 20 54 6f 48 65 78 61 64 65 63 69  tring ToHexadeci
9d80: 6d 61 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20 20  malString(..    
9d90: 20 20 20 20 62 79 74 65 5b 5d 20 61 72 72 61 79      byte[] array
9da0: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
9db0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
9dc0: 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  array == null)..
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9de0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
9df0: 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
9e00: 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  r result = new S
9e10: 74 72 69 6e 67 42 75 69 6c 64 65 72 28 61 72 72  tringBuilder(arr
9e20: 61 79 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d  ay.Length * 2);.
9e30: 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c  ...        int l
9e40: 65 6e 67 74 68 20 3d 20 61 72 72 61 79 2e 4c 65  ength = array.Le
9e50: 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ngth;....       
9e60: 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20   for (int index 
9e70: 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e  = 0; index < len
9e80: 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20  gth; index++).. 
9e90: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
9ea0: 74 2e 41 70 70 65 6e 64 28 61 72 72 61 79 5b 69  t.Append(array[i
9eb0: 6e 64 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22  ndex].ToString("
9ec0: 78 32 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  x2"));....      
9ed0: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e    return result.
9ee0: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
9ef0: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63   }....    protec
9f00: 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20  ted static void 
9f10: 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74  LogBind(SQLiteSt
9f20: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
9f30: 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c  ndle, int index,
9f40: 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a   byte[] value)..
9f50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
9f60: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
9f70: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
9f80: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
9f90: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72  g.LogMessage(Str
9fa0: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
9fb0: 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e           "Bindin
9fc0: 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20  g statement {0} 
9fd0: 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73  paramter #{1} as
9fe0: 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76   type {2} with v
9ff0: 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22  alue {{{3}}}..."
a000: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68  ,..            h
a010: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
a020: 65 78 2c 20 74 79 70 65 6f 66 28 42 79 74 65 5b  ex, typeof(Byte[
a030: 5d 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75  ]), (value != nu
a040: 6c 6c 29 20 3f 20 54 6f 48 65 78 61 64 65 63 69  ll) ? ToHexadeci
a050: 6d 61 6c 53 74 72 69 6e 67 28 76 61 6c 75 65 29  malString(value)
a060: 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a   : "<null>"));..
a070: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
a080: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
a090: 6f 69 64 20 42 69 6e 64 5f 44 6f 75 62 6c 65 28  oid Bind_Double(
a0a0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
a0b0: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
a0c0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
a0d0: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 64 6f  s, int index, do
a0e0: 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  uble value)..   
a0f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
a100: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
a110: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
a120: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
a130: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
a140: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
a150: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
a160: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
a170: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
a180: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
a190: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
a1a0: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
a1b0: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
a1c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20         }....#if 
a1d0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
a1e0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
a1f0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
a200: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
a210: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a220: 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28  te3_bind_double(
a230: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
a240: 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53  alue);..#elif !S
a250: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
a260: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
a270: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
a280: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a290: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75  sqlite3_bind_dou
a2a0: 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  ble_interop(hand
a2b0: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
a2c0: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
a2d0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
a2e0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
a2f0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
a300: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20  dif..        if 
a310: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
a320: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
a330: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
a340: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
a350: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
a360: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
a370: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
a380: 64 5f 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74  d_Int32(SQLiteSt
a390: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
a3a0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
a3b0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
a3c0: 6e 64 65 78 2c 20 69 6e 74 20 76 61 6c 75 65 29  ndex, int value)
a3d0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
a3e0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
a3f0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
a400: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
a410: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  t;....        if
a420: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
a430: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
a440: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
a450: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
a460: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
a470: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a480: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
a490: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
a4a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
a4b0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
a4c0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
a4d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
a4e0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
a4f0: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
a500: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
a510: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
a520: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
a530: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
a540: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
a550: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
a560: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
a570: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
a580: 64 20 42 69 6e 64 5f 55 49 6e 74 33 32 28 53 51  d Bind_UInt32(SQ
a590: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
a5a0: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
a5b0: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
a5c0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 69 6e 74   int index, uint
a5d0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
a5e0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
a5f0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
a600: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
a610: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
a620: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
a630: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
a640: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
a650: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
a660: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
a670: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
a680: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
a690: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
a6a0: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
a6b0: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
a6c0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
a6d0: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
a6e0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
a6f0: 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20  rorCode n;....  
a700: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
a710: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
a720: 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e  ionFlags.BindUIn
a730: 74 33 32 41 73 49 6e 74 36 34 29 20 3d 3d 20 53  t32AsInt64) == S
a740: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
a750: 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74 33 32 41  lags.BindUInt32A
a760: 73 49 6e 74 36 34 29 0d 0a 20 20 20 20 20 20 20  sInt64)..       
a770: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a780: 6c 6f 6e 67 20 76 61 6c 75 65 32 20 3d 20 76 61  long value2 = va
a790: 6c 75 65 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  lue;....#if !PLA
a7a0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
a7b0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
a7c0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
a7d0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a7e0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68  te3_bind_int64(h
a7f0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
a800: 6c 75 65 32 29 3b 0d 0a 23 65 6c 69 66 20 21 53  lue2);..#elif !S
a810: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
a820: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
a830: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a840: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
a850: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68  _int64_interop(h
a860: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
a870: 66 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 73  f value2);..#els
a880: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  e..            t
a890: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
a8a0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
a8b0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
a8c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a8d0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  else..        {.
a8e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
a8f0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
a900: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
a910: 64 5f 75 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69  d_uint(handle, i
a920: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
a930: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
a940: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
a950: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
a960: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
a970: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
a980: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
a990: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
a9a0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
a9b0: 64 20 42 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c  d Bind_Int64(SQL
a9c0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
a9d0: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
a9e0: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
a9f0: 69 6e 74 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20  int index, long 
aa00: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
aa10: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
aa20: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
aa30: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
aa40: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
aa50: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
aa60: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
aa70: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
aa80: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
aa90: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
aaa0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
aab0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
aac0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
aad0: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
aae0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
aaf0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
ab00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53    }....        S
ab10: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
ab20: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
ab30: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
ab40: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
ab50: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
ab60: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
ab70: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
ab80: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
ab90: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
aba0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
abb0: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74  3_bind_int64_int
abc0: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
abd0: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
abe0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
abf0: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
ac00: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
ac10: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
ac20: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
ac30: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
ac40: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
ac50: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
ac60: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
ac70: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
ac80: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
ac90: 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 36   void Bind_UInt6
aca0: 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  4(SQLiteStatemen
acb0: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
acc0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
acd0: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
ace0: 75 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20  ulong value)..  
acf0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
ad00: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
ad10: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
ad20: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
ad30: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
ad40: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
ad50: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
ad60: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
ad70: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
ad80: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
ad90: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
ada0: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
adb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
adc0: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
add0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
ade0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
adf0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
ae00: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
ae10: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
ae20: 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34  ite3_bind_uint64
ae30: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
ae40: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
ae50: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
ae60: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
ae70: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
ae80: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
ae90: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69  .sqlite3_bind_ui
aea0: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
aeb0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
aec0: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
aed0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
aee0: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
aef0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
af00: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66  ndif..        if
af10: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
af20: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
af30: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
af40: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
af50: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
af60: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
af70: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
af80: 6e 64 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74  nd_Text(SQLiteSt
af90: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
afa0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
afb0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
afc0: 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c  ndex, string val
afd0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
afe0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
aff0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
b000: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
b010: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
b020: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
b030: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
b040: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
b050: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
b060: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
b070: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
b080: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
b090: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b0a0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
b0b0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
b0c0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
b0d0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
b0e0: 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54      byte[] b = T
b0f0: 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 0d  oUTF8(value);...
b100: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
b110: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
b120: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
b130: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
b140: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
b150: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
b160: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
b170: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
b180: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
b190: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
b1a0: 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20  ndex, b);..     
b1b0: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
b1c0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
b1d0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
b1e0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b1f0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
b200: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
b210: 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31   b, b.Length - 1
b220: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
b230: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
b240: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
b250: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
b260: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
b270: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
b280: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
b290: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
b2a0: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44  ride void Bind_D
b2b0: 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74  ateTime(SQLiteSt
b2c0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
b2d0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
b2e0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
b2f0: 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64  ndex, DateTime d
b300: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
b310: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
b320: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
b330: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
b340: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
b350: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
b360: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
b370: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
b380: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
b390: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
b3a0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
b3b0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
b3c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b3d0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
b3e0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 64 74 29  ndle, index, dt)
b3f0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
b400: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
b410: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
b420: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
b430: 67 73 2e 42 69 6e 64 44 61 74 65 54 69 6d 65 57  gs.BindDateTimeW
b440: 69 74 68 4b 69 6e 64 29 20 3d 3d 20 53 51 4c 69  ithKind) == SQLi
b450: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
b460: 73 2e 42 69 6e 64 44 61 74 65 54 69 6d 65 57 69  s.BindDateTimeWi
b470: 74 68 4b 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  thKind)..       
b480: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b490: 69 66 20 28 28 5f 64 61 74 65 74 69 6d 65 4b 69  if ((_datetimeKi
b4a0: 6e 64 20 21 3d 20 44 61 74 65 54 69 6d 65 4b 69  nd != DateTimeKi
b4b0: 6e 64 2e 55 6e 73 70 65 63 69 66 69 65 64 29 20  nd.Unspecified) 
b4c0: 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
b4d0: 20 20 20 20 28 64 74 2e 4b 69 6e 64 20 21 3d 20      (dt.Kind != 
b4e0: 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 6e 73  DateTimeKind.Uns
b4f0: 70 65 63 69 66 69 65 64 29 20 26 26 0d 0a 20 20  pecified) &&..  
b500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64                (d
b510: 74 2e 4b 69 6e 64 20 21 3d 20 5f 64 61 74 65 74  t.Kind != _datet
b520: 69 6d 65 4b 69 6e 64 29 29 0d 0a 20 20 20 20 20  imeKind))..     
b530: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b540: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 64            if (_d
b550: 61 74 65 74 69 6d 65 4b 69 6e 64 20 3d 3d 20 44  atetimeKind == D
b560: 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 74 63 29  ateTimeKind.Utc)
b570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b580: 20 20 20 20 20 20 64 74 20 3d 20 64 74 2e 54 6f        dt = dt.To
b590: 55 6e 69 76 65 72 73 61 6c 54 69 6d 65 28 29 3b  UniversalTime();
b5a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b5b0: 20 20 65 6c 73 65 20 69 66 20 28 5f 64 61 74 65    else if (_date
b5c0: 74 69 6d 65 4b 69 6e 64 20 3d 3d 20 44 61 74 65  timeKind == Date
b5d0: 54 69 6d 65 4b 69 6e 64 2e 4c 6f 63 61 6c 29 0d  TimeKind.Local).
b5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b5f0: 20 20 20 20 20 64 74 20 3d 20 64 74 2e 54 6f 4c       dt = dt.ToL
b600: 6f 63 61 6c 54 69 6d 65 28 29 3b 0d 0a 20 20 20  ocalTime();..   
b610: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b620: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
b630: 20 73 77 69 74 63 68 20 28 5f 64 61 74 65 74 69   switch (_dateti
b640: 6d 65 46 6f 72 6d 61 74 29 0d 0a 20 20 20 20 20  meFormat)..     
b650: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b660: 20 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74    case SQLiteDat
b670: 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73 3a 0d  eFormats.Ticks:.
b680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b690: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b6a0: 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c          long val
b6b0: 75 65 20 3d 20 64 74 2e 54 69 63 6b 73 3b 0d 0a  ue = dt.Ticks;..
b6c0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
b6d0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
b6e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b6f0: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
b700: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
b710: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
b720: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
b730: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
b740: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nd)..           
b750: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b770: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
b780: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
b790: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b7a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7c0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
b7d0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
b7e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
b7f0: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64  _bind_int64(hand
b800: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
b810: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
b820: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
b830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b840: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
b850: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
b860: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b870: 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72  bind_int64_inter
b880: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
b890: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
b8a0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
b8b0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
b8c0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
b8d0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
b8e0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
b900: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
b910: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
b920: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
b930: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
b940: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  or());..        
b950: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
b960: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
b970: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
b980: 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44 61     case SQLiteDa
b990: 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e  teFormats.Julian
b9a0: 44 61 79 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  Day:..          
b9b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 75               dou
b9d0: 62 6c 65 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75  ble value = ToJu
b9e0: 6c 69 61 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a  lianDay(dt);....
b9f0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
ba00: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
ba10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba20: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
ba30: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
ba40: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
ba50: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
ba60: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
ba70: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ba80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ba90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
baa0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
bab0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
bac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bad0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
bae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
baf0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
bb00: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
bb10: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
bb20: 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c  ind_double(handl
bb30: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
bb40: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
bb50: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
bb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
bb70: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
bb80: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
bb90: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
bba0: 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  ind_double_inter
bbb0: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
bbc0: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
bbd0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
bbe0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
bbf0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
bc00: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
bc10: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
bc20: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
bc30: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
bc40: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
bc50: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
bc60: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
bc70: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  or());..        
bc80: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
bc90: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
bca0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
bcb0: 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44 61     case SQLiteDa
bcc0: 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70  teFormats.UnixEp
bcd0: 6f 63 68 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  och:..          
bce0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e               lon
bd00: 67 20 76 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72  g value = Conver
bd10: 74 2e 54 6f 49 6e 74 36 34 28 64 74 2e 53 75 62  t.ToInt64(dt.Sub
bd20: 74 72 61 63 74 28 55 6e 69 78 45 70 6f 63 68 29  tract(UnixEpoch)
bd30: 2e 54 6f 74 61 6c 53 65 63 6f 6e 64 73 29 3b 0d  .TotalSeconds);.
bd40: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
bd50: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
bd60: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  K..             
bd70: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
bd80: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
bd90: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
bda0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
bdb0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
bdc0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ind)..          
bdd0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdf0: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
be00: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
be10: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
be20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
be30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be40: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
be50: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
be60: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
be70: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e  3_bind_int64(han
be80: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
be90: 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
bea0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
beb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bec0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
bed0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
bee0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
bef0: 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65  _bind_int64_inte
bf00: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
bf10: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
bf20: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
bf30: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
bf40: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
bf50: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
bf60: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
bf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
bf80: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
bf90: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
bfa0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
bfb0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
bfc0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
bfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
bfe0: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ak;..           
bff0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c000: 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20      default:..  
c010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
c020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c030: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20       byte[] b = 
c040: 54 6f 55 54 46 38 28 64 74 29 3b 0d 0a 0d 0a 23  ToUTF8(dt);....#
c050: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
c060: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
c070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c080: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
c090: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
c0a0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
c0b0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
c0c0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
c0d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c0e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c100: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
c110: 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20   index, b);..   
c120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c130: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
c140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c150: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
c160: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
c170: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
c180: 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61 6e 64  3_bind_text(hand
c190: 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e  le, index, b, b.
c1a0: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74  Length - 1, (Int
c1b0: 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20  Ptr)(-1));..    
c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1d0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
c1e0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
c1f0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
c200: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
c210: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
c220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c230: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
c240: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
c250: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
c260: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
c270: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 42  ride void Bind_B
c280: 6c 6f 62 28 53 51 4c 69 74 65 53 74 61 74 65 6d  lob(SQLiteStatem
c290: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
c2a0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
c2b0: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
c2c0: 2c 20 62 79 74 65 5b 5d 20 62 6c 6f 62 44 61 74  , byte[] blobDat
c2d0: 61 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  a)..    {..     
c2e0: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
c2f0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
c300: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
c310: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
c320: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
c330: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
c340: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
c350: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
c360: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
c370: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
c380: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
c390: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c3a0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
c3b0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f  ndle, index, blo
c3c0: 62 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20  bData);..       
c3d0: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
c3e0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
c3f0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
c400: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c410: 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28  lite3_bind_blob(
c420: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
c430: 6c 6f 62 44 61 74 61 2c 20 62 6c 6f 62 44 61 74  lobData, blobDat
c440: 61 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74  a.Length, (IntPt
c450: 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  r)(-1));..      
c460: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
c470: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
c480: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
c490: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
c4a0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
c4b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
c4c0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
c4d0: 64 20 42 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69  d Bind_Null(SQLi
c4e0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
c4f0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
c500: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
c510: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
c520: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
c530: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
c540: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
c550: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23  qlite_stmt;....#
c560: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
c570: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
c580: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
c590: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
c5a0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
c5b0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
c5c0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
c5d0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
c5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
c5f0: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
c600: 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ex);..        }.
c610: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
c620: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
c630: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
c640: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
c650: 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e  e3_bind_null(han
c660: 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  dle, index);..  
c670: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
c680: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
c690: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
c6a0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
c6b0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
c6c0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
c6d0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
c6e0: 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 43   int Bind_ParamC
c6f0: 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65  ount(SQLiteState
c700: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
c710: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
c720: 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a   flags)..    {..
c730: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
c740: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
c750: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
c760: 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20  ite_stmt;..     
c770: 20 20 20 69 6e 74 20 76 61 6c 75 65 20 3d 20 55     int value = U
c780: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
c790: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
c7a0: 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28  parameter_count(
c7b0: 68 61 6e 64 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20  handle);....    
c7c0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
c7d0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
c7e0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
c7f0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
c800: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
c810: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
c820: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
c830: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
c840: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
c850: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
c860: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
c870: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
c880: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
c890: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
c8a0: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
c8b0: 20 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d           "Statem
c8c0: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
c8d0: 20 63 6f 75 6e 74 20 69 73 20 7b 31 7d 2e 22 2c   count is {1}.",
c8e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c8f0: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
c900: 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 20 20  value));..      
c910: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
c920: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20  eturn value;..  
c930: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
c940: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
c950: 69 6e 67 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61  ing Bind_ParamNa
c960: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
c970: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
c980: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
c990: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29  lags, int index)
c9a0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
c9b0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
c9c0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
c9d0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
c9e0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  t;..        stri
c9f0: 6e 67 20 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20  ng name;....#if 
ca00: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
ca10: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65  ..        int le
ca20: 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  n = 0;..        
ca30: 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72  name = UTF8ToStr
ca40: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
ca50: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
ca60: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
ca70: 61 6d 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  ame_interop(hand
ca80: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c  le, index, ref l
ca90: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
caa0: 65 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20  e..        name 
cab0: 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  = UTF8ToString(U
cac0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
cad0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
cae0: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 68  parameter_name(h
caf0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 2c 20 2d  andle, index), -
cb00: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  1);..#endif.... 
cb10: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
cb20: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
cb30: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
cb40: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
cb50: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
cb60: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
cb70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
cb80: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
cb90: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
cba0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
cbb0: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
cbc0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
cbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
cbe0: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
cbf0: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
cc00: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61              "Sta
cc10: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
cc20: 74 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20 69 73  ter #{1} name is
cc30: 20 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20   {{{2}}}.",..   
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e               han
cc50: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
cc60: 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20  , name));..     
cc70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
cc80: 72 65 74 75 72 6e 20 6e 61 6d 65 3b 0d 0a 20 20  return name;..  
cc90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
cca0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
ccb0: 20 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78   Bind_ParamIndex
ccc0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
ccd0: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
cce0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
ccf0: 67 73 2c 20 73 74 72 69 6e 67 20 70 61 72 61 6d  gs, string param
cd00: 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Name)..    {..  
cd10: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
cd20: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
cd30: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
cd40: 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20  e_stmt;..       
cd50: 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 55 6e 73   int index = Uns
cd60: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
cd70: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
cd80: 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 68 61  rameter_index(ha
cd90: 6e 64 6c 65 2c 20 54 6f 55 54 46 38 28 70 61 72  ndle, ToUTF8(par
cda0: 61 6d 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20  amName));....   
cdb0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
cdc0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
cdd0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
cde0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
cdf0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
ce00: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
ce10: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
ce20: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
ce30: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
ce40: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
ce50: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72  g.LogMessage(Str
ce60: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
ce70: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
ce80: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
ce90: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
cea0: 20 20 20 20 20 20 20 20 20 20 22 53 74 61 74 65            "State
ceb0: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
cec0: 72 20 69 6e 64 65 78 20 6f 66 20 6e 61 6d 65 20  r index of name 
ced0: 7b 7b 7b 31 7d 7d 7d 20 69 73 20 23 7b 32 7d 2e  {{{1}}} is #{2}.
cee0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
cef0: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
cf00: 2c 20 70 61 72 61 6d 4e 61 6d 65 2c 20 69 6e 64  , paramName, ind
cf10: 65 78 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ex));..        }
cf20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
cf30: 72 6e 20 69 6e 64 65 78 3b 0d 0a 20 20 20 20 7d  rn index;..    }
cf40: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
cf50: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f   override int Co
cf60: 6c 75 6d 6e 43 6f 75 6e 74 28 53 51 4c 69 74 65  lumnCount(SQLite
cf70: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d  Statement stmt).
cf80: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
cf90: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
cfa0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
cfb0: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73 74  _column_count(st
cfc0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29  mt._sqlite_stmt)
cfd0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
cfe0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
cff0: 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e  e string ColumnN
d000: 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
d010: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
d020: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
d030: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
d040: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
d050: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e 74   = 0;..      Int
d060: 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61  Ptr p = UnsafeNa
d070: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d080: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f  te3_column_name_
d090: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
d0a0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
d0b0: 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c  , ref len);..#el
d0c0: 73 65 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  se..      IntPtr
d0d0: 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   p = UnsafeNativ
d0e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
d0f0: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d  _column_name(stm
d100: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
d110: 69 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d  index);..#endif.
d120: 0a 20 20 20 20 20 20 69 66 20 28 70 20 3d 3d 20  .      if (p == 
d130: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
d140: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
d150: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
d160: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
d170: 4e 6f 4d 65 6d 2c 20 47 65 74 4c 61 73 74 45 72  NoMem, GetLastEr
d180: 72 6f 72 28 29 29 3b 0d 0a 23 69 66 20 21 53 51  ror());..#if !SQ
d190: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
d1a0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
d1b0: 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29  ToString(p, len)
d1c0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
d1d0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
d1e0: 69 6e 67 28 70 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ing(p, -1);..#en
d1f0: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
d200: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
d210: 69 64 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ide TypeAffinity
d220: 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28   ColumnAffinity(
d230: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
d240: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
d250: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
d260: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
d270: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d280: 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 74  3_column_type(st
d290: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
d2a0: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d   index);..    }.
d2b0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
d2c0: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
d2d0: 43 6f 6c 75 6d 6e 54 79 70 65 28 53 51 4c 69 74  ColumnType(SQLit
d2e0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
d2f0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 72 65 66 20   int index, ref 
d300: 54 79 70 65 41 66 66 69 6e 69 74 79 20 6e 41 66  TypeAffinity nAf
d310: 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 7b 0d 0a  finity)..    {..
d320: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
d330: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
d340: 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 65 6e 20  DARD..      len 
d350: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50  = 0;..      IntP
d360: 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  tr p = UnsafeNat
d370: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d380: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
d390: 70 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  pe_interop(stmt.
d3a0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
d3b0: 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a  dex, ref len);..
d3c0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6c 65 6e  #else..      len
d3d0: 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 49 6e   = -1;..      In
d3e0: 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
d3f0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d400: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
d410: 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  type(stmt._sqlit
d420: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
d430: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 6e  .#endif..      n
d440: 41 66 66 69 6e 69 74 79 20 3d 20 43 6f 6c 75 6d  Affinity = Colum
d450: 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20  nAffinity(stmt, 
d460: 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  index);....     
d470: 20 69 66 20 28 70 20 21 3d 20 49 6e 74 50 74 72   if (p != IntPtr
d480: 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 55 54  .Zero) return UT
d490: 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65  F8ToString(p, le
d4a0: 6e 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d  n);..      else.
d4b0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
d4c0: 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20    string[] ar = 
d4d0: 73 74 6d 74 2e 54 79 70 65 44 65 66 69 6e 69 74  stmt.TypeDefinit
d4e0: 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 69  ions;..        i
d4f0: 66 20 28 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a  f (ar != null)..
d500: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d510: 20 20 20 20 20 69 66 20 28 69 6e 64 65 78 20 3c       if (index <
d520: 20 61 72 2e 4c 65 6e 67 74 68 20 26 26 20 61 72   ar.Length && ar
d530: 5b 69 6e 64 65 78 5d 20 21 3d 20 6e 75 6c 6c 29  [index] != null)
d540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
d550: 74 75 72 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d  turn ar[index];.
d560: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
d570: 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
d580: 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20  g.Empty;....    
d590: 20 20 20 20 2f 2f 73 77 69 74 63 68 20 28 6e 41      //switch (nA
d5a0: 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20 20  ffinity)..      
d5b0: 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 2f    //{..        /
d5c0: 2f 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69  /  case TypeAffi
d5d0: 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20  nity.Int64:..   
d5e0: 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72       //    retur
d5f0: 6e 20 22 42 49 47 49 4e 54 22 3b 0d 0a 20 20 20  n "BIGINT";..   
d600: 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79       //  case Ty
d610: 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c  peAffinity.Doubl
d620: 65 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  e:..        //  
d630: 20 20 72 65 74 75 72 6e 20 22 44 4f 55 42 4c 45    return "DOUBLE
d640: 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ";..        //  
d650: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
d660: 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20  y.Blob:..       
d670: 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 42   //    return "B
d680: 4c 4f 42 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f  LOB";..        /
d690: 2f 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20  /  default:..   
d6a0: 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72       //    retur
d6b0: 6e 20 22 54 45 58 54 22 3b 0d 0a 20 20 20 20 20  n "TEXT";..     
d6c0: 20 20 20 2f 2f 7d 0d 0a 20 20 20 20 20 20 7d 0d     //}..      }.
d6d0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
d6e0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
d6f0: 69 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64 65 78 28  int ColumnIndex(
d700: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
d710: 73 74 6d 74 2c 20 73 74 72 69 6e 67 20 63 6f 6c  stmt, string col
d720: 75 6d 6e 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d  umnName)..    {.
d730: 0a 20 20 20 20 20 20 69 6e 74 20 78 20 3d 20 43  .      int x = C
d740: 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29  olumnCount(stmt)
d750: 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 28  ;....      for (
d760: 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78  int n = 0; n < x
d770: 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d  ; n++)..      {.
d780: 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72  .        if (Str
d790: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 63 6f 6c 75  ing.Compare(colu
d7a0: 6d 6e 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61  mnName, ColumnNa
d7b0: 6d 65 28 73 74 6d 74 2c 20 6e 29 2c 20 53 74 72  me(stmt, n), Str
d7c0: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
d7d0: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
d7e0: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
d7f0: 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20    return n;..   
d800: 20 20 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75     }..      retu
d810: 72 6e 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  rn -1;..    }...
d820: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d830: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f  erride string Co
d840: 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65  lumnOriginalName
d850: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
d860: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
d870: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
d880: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
d890: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
d8a0: 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  0;..      return
d8b0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
d8c0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d8d0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
d8e0: 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74  _origin_name_int
d8f0: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
d900: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72  e_stmt, index, r
d910: 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ef len), len);..
d920: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
d930: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
d940: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
d950: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
d960: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28  umn_origin_name(
d970: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
d980: 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  t, index), -1);.
d990: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
d9a0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
d9b0: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
d9c0: 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d  olumnDatabaseNam
d9d0: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
d9e0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
d9f0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
da00: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
da10: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d  .      int len =
da20: 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72   0;..      retur
da30: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
da40: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
da50: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
da60: 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f  n_database_name_
da70: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
da80: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
da90: 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29  , ref len), len)
daa0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
dab0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
dac0: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
dad0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
dae0: 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f  column_database_
daf0: 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  name(stmt._sqlit
db00: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e_stmt, index), 
db10: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
db20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
db30: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
db40: 69 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e  ing ColumnTableN
db50: 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
db60: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
db70: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
db80: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
db90: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
dba0: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74   = 0;..      ret
dbb0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
dbc0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
dbd0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
dbe0: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69  umn_table_name_i
dbf0: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
dc00: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
dc10: 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   ref len), len);
dc20: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
dc30: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
dc40: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
dc50: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
dc60: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
dc70: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
dc80: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b  mt, index), -1);
dc90: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
dca0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
dcb0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6f  override void Co
dcc0: 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 73 74 72  lumnMetaData(str
dcd0: 69 6e 67 20 64 61 74 61 42 61 73 65 2c 20 73 74  ing dataBase, st
dce0: 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74 72 69  ring table, stri
dcf0: 6e 67 20 63 6f 6c 75 6d 6e 2c 20 72 65 66 20 73  ng column, ref s
dd00: 74 72 69 6e 67 20 64 61 74 61 54 79 70 65 2c 20  tring dataType, 
dd10: 72 65 66 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61  ref string colla
dd20: 74 65 53 65 71 75 65 6e 63 65 2c 20 72 65 66 20  teSequence, ref 
dd30: 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 72 65  bool notNull, re
dd40: 66 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79 4b 65  f bool primaryKe
dd50: 79 2c 20 72 65 66 20 62 6f 6f 6c 20 61 75 74 6f  y, ref bool auto
dd60: 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20 20 20 20  Increment)..    
dd70: 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  {..      IntPtr 
dd80: 64 61 74 61 54 79 70 65 50 74 72 20 3d 20 49 6e  dataTypePtr = In
dd90: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
dda0: 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 53 65 71    IntPtr collSeq
ddb0: 50 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  Ptr = IntPtr.Zer
ddc0: 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6e  o;..      int nn
ddd0: 6f 74 4e 75 6c 6c 20 3d 20 30 3b 0d 0a 20 20 20  otNull = 0;..   
dde0: 20 20 20 69 6e 74 20 6e 70 72 69 6d 61 72 79 4b     int nprimaryK
ddf0: 65 79 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69  ey = 0;..      i
de00: 6e 74 20 6e 61 75 74 6f 49 6e 63 20 3d 20 30 3b  nt nautoInc = 0;
de10: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
de20: 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20 20  rorCode n;..    
de30: 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d 0a 20 20    int dtLen;..  
de40: 20 20 20 20 69 6e 74 20 63 73 4c 65 6e 3b 0d 0a      int csLen;..
de50: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
de60: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 64 74  ANDARD..      dt
de70: 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  Len = 0;..      
de80: 63 73 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  csLen = 0;..    
de90: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
dea0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
deb0: 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d  3_table_column_m
dec0: 65 74 61 64 61 74 61 5f 69 6e 74 65 72 6f 70 28  etadata_interop(
ded0: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74  _sql, ToUTF8(dat
dee0: 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74  aBase), ToUTF8(t
def0: 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f  able), ToUTF8(co
df00: 6c 75 6d 6e 29 2c 20 72 65 66 20 64 61 74 61 54  lumn), ref dataT
df10: 79 70 65 50 74 72 2c 20 72 65 66 20 63 6f 6c 6c  ypePtr, ref coll
df20: 53 65 71 50 74 72 2c 20 72 65 66 20 6e 6e 6f 74  SeqPtr, ref nnot
df30: 4e 75 6c 6c 2c 20 72 65 66 20 6e 70 72 69 6d 61  Null, ref nprima
df40: 72 79 4b 65 79 2c 20 72 65 66 20 6e 61 75 74 6f  ryKey, ref nauto
df50: 49 6e 63 2c 20 72 65 66 20 64 74 4c 65 6e 2c 20  Inc, ref dtLen, 
df60: 72 65 66 20 63 73 4c 65 6e 29 3b 0d 0a 23 65 6c  ref csLen);..#el
df70: 73 65 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20  se..      dtLen 
df80: 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 63 73 4c  = -1;..      csL
df90: 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20  en = -1;....    
dfa0: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
dfb0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
dfc0: 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d  3_table_column_m
dfd0: 65 74 61 64 61 74 61 28 5f 73 71 6c 2c 20 54 6f  etadata(_sql, To
dfe0: 55 54 46 38 28 64 61 74 61 42 61 73 65 29 2c 20  UTF8(dataBase), 
dff0: 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54  ToUTF8(table), T
e000: 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 72  oUTF8(column), r
e010: 65 66 20 64 61 74 61 54 79 70 65 50 74 72 2c 20  ef dataTypePtr, 
e020: 72 65 66 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20  ref collSeqPtr, 
e030: 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 72 65  ref nnotNull, re
e040: 66 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 72  f nprimaryKey, r
e050: 65 66 20 6e 61 75 74 6f 49 6e 63 29 3b 0d 0a 23  ef nautoInc);..#
e060: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20  endif..      if 
e070: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
e080: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
e090: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
e0a0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
e0b0: 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
e0c0: 20 64 61 74 61 54 79 70 65 20 3d 20 55 54 46 38   dataType = UTF8
e0d0: 54 6f 53 74 72 69 6e 67 28 64 61 74 61 54 79 70  ToString(dataTyp
e0e0: 65 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20  ePtr, dtLen);.. 
e0f0: 20 20 20 20 20 63 6f 6c 6c 61 74 65 53 65 71 75       collateSequ
e100: 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72  ence = UTF8ToStr
e110: 69 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72 2c 20  ing(collSeqPtr, 
e120: 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  csLen);....     
e130: 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74   notNull = (nnot
e140: 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20 20 20  Null == 1);..   
e150: 20 20 20 70 72 69 6d 61 72 79 4b 65 79 20 3d 20     primaryKey = 
e160: 28 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 3d 20  (nprimaryKey == 
e170: 31 29 3b 0d 0a 20 20 20 20 20 20 61 75 74 6f 49  1);..      autoI
e180: 6e 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61 75 74  ncrement = (naut
e190: 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20 20 20  oInc == 1);..   
e1a0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
e1b0: 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62  al override doub
e1c0: 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 53 51 4c  le GetDouble(SQL
e1d0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
e1e0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
e1f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62     {..      doub
e200: 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21  le value;..#if !
e210: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
e220: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
e230: 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e   value = UnsafeN
e240: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
e250: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
e260: 6c 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  le(stmt._sqlite_
e270: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23  stmt, index);..#
e280: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
e290: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 76 61 6c  NDARD..      val
e2a0: 75 65 20 3d 20 30 2e 30 3b 0d 0a 20 20 20 20 20  ue = 0.0;..     
e2b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
e2c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
e2d0: 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  umn_double_inter
e2e0: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
e2f0: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66  stmt, index, ref
e300: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
e310: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
e320: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
e330: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
e340: 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72  dif..      retur
e350: 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d  n value;..    }.
e360: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
e370: 6f 76 65 72 72 69 64 65 20 73 62 79 74 65 20 47  override sbyte G
e380: 65 74 53 42 79 74 65 28 53 51 4c 69 74 65 53 74  etSByte(SQLiteSt
e390: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
e3a0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
e3b0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e  .      return un
e3c0: 63 68 65 63 6b 65 64 28 28 73 62 79 74 65 29 28  checked((sbyte)(
e3d0: 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69  GetInt32(stmt, i
e3e0: 6e 64 65 78 29 20 26 20 62 79 74 65 2e 4d 61 78  ndex) & byte.Max
e3f0: 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d  Value));..    }.
e400: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
e410: 6f 76 65 72 72 69 64 65 20 62 79 74 65 20 47 65  override byte Ge
e420: 74 42 79 74 65 28 53 51 4c 69 74 65 53 74 61 74  tByte(SQLiteStat
e430: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
e440: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
e450: 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68       return unch
e460: 65 63 6b 65 64 28 28 62 79 74 65 29 28 47 65 74  ecked((byte)(Get
e470: 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
e480: 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c  x) & byte.MaxVal
e490: 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
e4a0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
e4b0: 72 72 69 64 65 20 73 68 6f 72 74 20 47 65 74 49  rride short GetI
e4c0: 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61 74 65  nt16(SQLiteState
e4d0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
e4e0: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
e4f0: 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65      return unche
e500: 63 6b 65 64 28 28 73 68 6f 72 74 29 28 47 65 74  cked((short)(Get
e510: 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
e520: 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61 78 56  x) & ushort.MaxV
e530: 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  alue));..    }..
e540: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
e550: 76 65 72 72 69 64 65 20 75 73 68 6f 72 74 20 47  verride ushort G
e560: 65 74 55 49 6e 74 31 36 28 53 51 4c 69 74 65 53  etUInt16(SQLiteS
e570: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
e580: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
e590: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75  ..      return u
e5a0: 6e 63 68 65 63 6b 65 64 28 28 75 73 68 6f 72 74  nchecked((ushort
e5b0: 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  )(GetInt32(stmt,
e5c0: 20 69 6e 64 65 78 29 20 26 20 75 73 68 6f 72 74   index) & ushort
e5d0: 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20  .MaxValue));..  
e5e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
e5f0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
e600: 20 47 65 74 49 6e 74 33 32 28 53 51 4c 69 74 65   GetInt32(SQLite
e610: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
e620: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
e630: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
e640: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
e650: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
e660: 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c  mn_int(stmt._sql
e670: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
e680: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
e690: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
e6a0: 65 20 75 69 6e 74 20 47 65 74 55 49 6e 74 33 32  e uint GetUInt32
e6b0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
e6c0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
e6d0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
e6e0: 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
e6f0: 28 28 75 69 6e 74 29 47 65 74 49 6e 74 33 32 28  ((uint)GetInt32(
e700: 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
e710: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
e720: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
e730: 6f 6e 67 20 47 65 74 49 6e 74 36 34 28 53 51 4c  ong GetInt64(SQL
e740: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
e750: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
e760: 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c 6f 6e 67     {..      long
e770: 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c   value;..#if !PL
e780: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
e790: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76  AMEWORK..      v
e7a0: 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74  alue = UnsafeNat
e7b0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
e7c0: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28  e3_column_int64(
e7d0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
e7e0: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 69  t, index);..#eli
e7f0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
e800: 52 44 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20  RD..      value 
e810: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61  = 0;..      Unsa
e820: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e830: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
e840: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d  nt64_interop(stm
e850: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
e860: 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65  index, ref value
e870: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
e880: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
e890: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
e8a0: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
e8b0: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
e8c0: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
e8d0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
e8e0: 64 65 20 75 6c 6f 6e 67 20 47 65 74 55 49 6e 74  de ulong GetUInt
e8f0: 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
e900: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
e910: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
e920: 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
e930: 65 64 28 28 75 6c 6f 6e 67 29 47 65 74 49 6e 74  ed((ulong)GetInt
e940: 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  64(stmt, index))
e950: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
e960: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
e970: 65 20 73 74 72 69 6e 67 20 47 65 74 54 65 78 74  e string GetText
e980: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
e990: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
e9a0: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
e9b0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
e9c0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
e9d0: 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  0;..      return
e9e0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
e9f0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
ea00: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
ea10: 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74  _text_interop(st
ea20: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
ea30: 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29   index, ref len)
ea40: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
ea50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
ea60: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
ea70: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ea80: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
ea90: 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
eaa0: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20  tmt, index),..  
eab0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
eac0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
ead0: 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73  3_column_bytes(s
eae0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
eaf0: 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64  , index));..#end
eb00: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
eb10: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
eb20: 64 65 20 44 61 74 65 54 69 6d 65 20 47 65 74 44  de DateTime GetD
eb30: 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74  ateTime(SQLiteSt
eb40: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
eb50: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
eb60: 0a 20 20 20 20 20 20 69 66 20 28 5f 64 61 74 65  .      if (_date
eb70: 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51  timeFormat == SQ
eb80: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
eb90: 54 69 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20  Ticks)..        
eba0: 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
ebb0: 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c  e(GetInt64(stmt,
ebc0: 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69   index), _dateti
ebd0: 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20  meKind);..      
ebe0: 65 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74 69  else if (_dateti
ebf0: 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69  meFormat == SQLi
ec00: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75  teDateFormats.Ju
ec10: 6c 69 61 6e 44 61 79 29 0d 0a 20 20 20 20 20 20  lianDay)..      
ec20: 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54    return ToDateT
ec30: 69 6d 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74  ime(GetDouble(st
ec40: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74  mt, index), _dat
ec50: 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20  etimeKind);..   
ec60: 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64 61 74     else if (_dat
ec70: 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53  etimeFormat == S
ec80: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
ec90: 2e 55 6e 69 78 45 70 6f 63 68 29 0d 0a 20 20 20  .UnixEpoch)..   
eca0: 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61       return ToDa
ecb0: 74 65 54 69 6d 65 28 47 65 74 49 6e 74 33 32 28  teTime(GetInt32(
ecc0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64  stmt, index), _d
ecd0: 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 0d  atetimeKind);...
ece0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
ecf0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
ed00: 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
ed10: 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69   return ToDateTi
ed20: 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  me(UnsafeNativeM
ed30: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
ed40: 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72  olumn_text_inter
ed50: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
ed60: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66  stmt, index, ref
ed70: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
ed80: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
ed90: 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73  n ToDateTime(Uns
eda0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
edb0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
edc0: 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  text(stmt._sqlit
edd0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 0d  e_stmt, index),.
ede0: 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e  .        UnsafeN
edf0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
ee00: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
ee10: 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  s(stmt._sqlite_s
ee20: 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 23  tmt, index));..#
ee30: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
ee40: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
ee50: 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79  rride long GetBy
ee60: 74 65 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d  tes(SQLiteStatem
ee70: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
ee80: 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66  dex, int nDataOf
ee90: 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65  fset, byte[] bDe
eea0: 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20  st, int nStart, 
eeb0: 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20  int nLength)..  
eec0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
eed0: 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  len = UnsafeNati
eee0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
eef0: 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73  3_column_bytes(s
ef00: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
ef10: 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
ef20: 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74     // If no dest
ef30: 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20  ination buffer, 
ef40: 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20  return the size 
ef50: 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69  needed...      i
ef60: 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c  f (bDest == null
ef70: 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a  ) return nlen;..
ef80: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70  ..      int nCop
ef90: 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a  ied = nLength;..
efa0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
efb0: 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62  ied + nStart > b
efc0: 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f  Dest.Length) nCo
efd0: 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e  pied = bDest.Len
efe0: 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20  gth - nStart;.. 
eff0: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
f000: 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e   + nDataOffset >
f010: 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d   nlen) nCopied =
f020: 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66   nlen - nDataOff
f030: 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  set;....      if
f040: 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a   (nCopied > 0)..
f050: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f060: 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e   IntPtr ptr = Un
f070: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f080: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
f090: 5f 62 6c 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69  _blob(stmt._sqli
f0a0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
f0b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73  ....        Mars
f0c0: 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72  hal.Copy((IntPtr
f0d0: 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20  )(ptr.ToInt64() 
f0e0: 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20  + nDataOffset), 
f0f0: 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e  bDest, nStart, n
f100: 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20  Copied);..      
f110: 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  }..      else.. 
f120: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f130: 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20  nCopied = 0;..  
f140: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
f150: 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a  eturn nCopied;..
f160: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
f170: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
f180: 6f 6e 67 20 47 65 74 43 68 61 72 73 28 53 51 4c  ong GetChars(SQL
f190: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
f1a0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e  t, int index, in
f1b0: 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 63  t nDataOffset, c
f1c0: 68 61 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74  har[] bDest, int
f1d0: 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65   nStart, int nLe
f1e0: 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ngth)..    {..  
f1f0: 20 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20      int nlen;.. 
f200: 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64       int nCopied
f210: 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20   = nLength;.... 
f220: 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 20       string str 
f230: 3d 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20  = GetText(stmt, 
f240: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e  index);..      n
f250: 6c 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68  len = str.Length
f260: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 62  ;....      if (b
f270: 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  Dest == null) re
f280: 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20  turn nlen;....  
f290: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
f2a0: 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74  + nStart > bDest
f2b0: 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64  .Length) nCopied
f2c0: 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20   = bDest.Length 
f2d0: 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20  - nStart;..     
f2e0: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
f2f0: 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65  DataOffset > nle
f300: 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65  n) nCopied = nle
f310: 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b  n - nDataOffset;
f320: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
f330: 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20  opied > 0)..    
f340: 20 20 20 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e      str.CopyTo(n
f350: 44 61 74 61 4f 66 66 73 65 74 2c 20 62 44 65 73  DataOffset, bDes
f360: 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69  t, nStart, nCopi
f370: 65 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65  ed);..      else
f380: 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d   nCopied = 0;...
f390: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43  .      return nC
f3a0: 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  opied;..    }...
f3b0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
f3c0: 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75  erride bool IsNu
f3d0: 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ll(SQLiteStateme
f3e0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
f3f0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
f400: 20 20 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e    return (Column
f410: 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69  Affinity(stmt, i
f420: 6e 64 65 78 29 20 3d 3d 20 54 79 70 65 41 66 66  ndex) == TypeAff
f430: 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20  inity.Null);..  
f440: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
f450: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
f460: 20 41 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28   AggregateCount(
f470: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
f480: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
f490: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
f4a0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
f4b0: 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74  _aggregate_count
f4c0: 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20  (context);..    
f4d0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
f4e0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
f4f0: 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e 28 73  CreateFunction(s
f500: 74 72 69 6e 67 20 73 74 72 46 75 6e 63 74 69 6f  tring strFunctio
f510: 6e 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f  n, int nArgs, bo
f520: 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20  ol needCollSeq, 
f530: 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66  SQLiteCallback f
f540: 75 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62  unc, SQLiteCallb
f550: 61 63 6b 20 66 75 6e 63 73 74 65 70 2c 20 53 51  ack funcstep, SQ
f560: 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63  LiteFinalCallbac
f570: 6b 20 66 75 6e 63 66 69 6e 61 6c 29 0d 0a 20 20  k funcfinal)..  
f580: 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
f590: 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d  eErrorCode n;...
f5a0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
f5b0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d  NDARD..      n =
f5c0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f5d0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
f5e0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74  ate_function_int
f5f0: 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46  erop(_sql, ToUTF
f600: 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
f610: 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72  nArgs, 4, IntPtr
f620: 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
f630: 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
f640: 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d  , (needCollSeq =
f650: 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29  = true) ? 1 : 0)
f660: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d  ;..      if (n =
f670: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
f680: 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65  e.Ok) n = Unsafe
f690: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f6a0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
f6b0: 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73  ction_interop(_s
f6c0: 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75  ql, ToUTF8(strFu
f6d0: 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20  nction), nArgs, 
f6e0: 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  1, IntPtr.Zero, 
f6f0: 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20  func, funcstep, 
f700: 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64  funcfinal, (need
f710: 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29  CollSeq == true)
f720: 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c 73   ? 1 : 0);..#els
f730: 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  e..      n = Uns
f740: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
f750: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
f760: 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54  function(_sql, T
f770: 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f  oUTF8(strFunctio
f780: 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e  n), nArgs, 4, In
f790: 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c  tPtr.Zero, func,
f7a0: 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66   funcstep, funcf
f7b0: 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69 66  inal);..      if
f7c0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
f7d0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55  orCode.Ok) n = U
f7e0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
f7f0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
f800: 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c  e_function(_sql,
f810: 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74   ToUTF8(strFunct
f820: 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20  ion), nArgs, 1, 
f830: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
f840: 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e  c, funcstep, fun
f850: 63 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69 66  cfinal);..#endif
f860: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
f870: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
f880: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
f890: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
f8a0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
f8b0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
f8c0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
f8d0: 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 43 6f  de void CreateCo
f8e0: 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67 20 73  llation(string s
f8f0: 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c  trCollation, SQL
f900: 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e  iteCollation fun
f910: 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69  c, SQLiteCollati
f920: 6f 6e 20 66 75 6e 63 31 36 29 0d 0a 20 20 20 20  on func16)..    
f930: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
f940: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
f950: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
f960: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
f970: 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20  collation(_sql, 
f980: 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74  ToUTF8(strCollat
f990: 69 6f 6e 29 2c 20 32 2c 20 49 6e 74 50 74 72 2e  ion), 2, IntPtr.
f9a0: 5a 65 72 6f 2c 20 66 75 6e 63 31 36 29 3b 0d 0a  Zero, func16);..
f9b0: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
f9c0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
f9d0: 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  k) n = UnsafeNat
f9e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
f9f0: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
fa00: 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  ion(_sql, ToUTF8
fa10: 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20  (strCollation), 
fa20: 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  1, IntPtr.Zero, 
fa30: 66 75 6e 63 29 3b 0d 0a 20 20 20 20 20 20 69 66  func);..      if
fa40: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
fa50: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
fa60: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
fa70: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
fa80: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
fa90: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
faa0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e  override int Con
fab0: 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61  textCollateCompa
fac0: 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  re(CollationEnco
fad0: 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e  dingEnum enc, In
fae0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74  tPtr context, st
faf0: 72 69 6e 67 20 73 31 2c 20 73 74 72 69 6e 67 20  ring s1, string 
fb00: 73 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  s2)..    {..#if 
fb10: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
fb20: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
fb30: 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  1;..      byte[]
fb40: 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74   b2;..      Syst
fb50: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
fb60: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c   converter = nul
fb70: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74  l;....      swit
fb80: 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20  ch (enc)..      
fb90: 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  {..        case 
fba0: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
fbb0: 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20  gEnum.UTF8:..   
fbc0: 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72         converter
fbd0: 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45   = System.Text.E
fbe0: 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20  ncoding.UTF8;.. 
fbf0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
fc00: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
fc10: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
fc20: 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20  num.UTF16LE:..  
fc30: 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
fc40: 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
fc50: 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65  Encoding.Unicode
fc60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
fc70: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
fc80: 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
fc90: 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a  ingEnum.UTF16BE:
fca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
fcb0: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
fcc0: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67  ext.Encoding.Big
fcd0: 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a  EndianUnicode;..
fce0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
fcf0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
fd00: 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65     b1 = converte
fd10: 72 2e 47 65 74 42 79 74 65 73 28 73 31 29 3b 0d  r.GetBytes(s1);.
fd20: 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76  .      b2 = conv
fd30: 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 73  erter.GetBytes(s
fd40: 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  2);....      ret
fd50: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
fd60: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
fd70: 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70  context_collcomp
fd80: 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  are_interop(cont
fd90: 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67  ext, b1, b1.Leng
fda0: 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74  th, b2, b2.Lengt
fdb0: 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  h);..#else..    
fdc0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
fdd0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
fde0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
fdf0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
fe00: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
fe10: 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74  nt ContextCollat
fe20: 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69  eCompare(Collati
fe30: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65  onEncodingEnum e
fe40: 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65  nc, IntPtr conte
fe50: 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20 63  xt, char[] c1, c
fe60: 68 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b  har[] c2)..    {
fe70: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
fe80: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79  ANDARD..      by
fe90: 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20  te[] b1;..      
fea0: 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20  byte[] b2;..    
feb0: 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e    System.Text.En
fec0: 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72  coding converter
fed0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
fee0: 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a    switch (enc)..
fef0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ff00: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
ff10: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38  ncodingEnum.UTF8
ff20: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
ff30: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
ff40: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54  Text.Encoding.UT
ff50: 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  F8;..          b
ff60: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
ff70: 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
ff80: 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c  odingEnum.UTF16L
ff90: 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
ffa0: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
ffb0: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
ffc0: 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20  nicode;..       
ffd0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
ffe0: 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
fff0: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
10000 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16BE:..        
10010 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
10020 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
10030 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63  ng.BigEndianUnic
10040 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ode;..          
10050 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d  break;..      }.
10060 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f  ...      b1 = co
10070 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
10080 28 63 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20  (c1);..      b2 
10090 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
100a0 79 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20  ytes(c2);....   
100b0 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
100c0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
100d0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f  lite3_context_co
100e0 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f  llcompare_intero
100f0 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62  p(context, b1, b
10100 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32  1.Length, b2, b2
10110 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65  .Length);..#else
10120 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
10130 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
10140 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
10150 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
10160 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
10170 72 69 64 65 20 43 6f 6c 6c 61 74 69 6f 6e 53 65  ride CollationSe
10180 71 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c 61 74  quence GetCollat
10190 69 6f 6e 53 65 71 75 65 6e 63 65 28 53 51 4c 69  ionSequence(SQLi
101a0 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 2c  teFunction func,
101b0 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29   IntPtr context)
101c0 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
101d0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
101e0 20 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e 53 65       CollationSe
101f0 71 75 65 6e 63 65 20 73 65 71 20 3d 20 6e 65 77  quence seq = new
10200 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   CollationSequen
10210 63 65 28 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74  ce();..      int
10220 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
10230 20 69 6e 74 20 74 79 70 65 20 3d 20 30 3b 0d 0a   int type = 0;..
10240 20 20 20 20 20 20 69 6e 74 20 65 6e 63 20 3d 20        int enc = 
10250 30 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  0;..      IntPtr
10260 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   p = UnsafeNativ
10270 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10280 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 73 65 71  _context_collseq
10290 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
102a0 2c 20 72 65 66 20 74 79 70 65 2c 20 72 65 66 20  , ref type, ref 
102b0 65 6e 63 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a  enc, ref len);..
102c0 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 21 3d  ..      if (p !=
102d0 20 6e 75 6c 6c 29 20 73 65 71 2e 4e 61 6d 65 20   null) seq.Name 
102e0 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  = UTF8ToString(p
102f0 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 73  , len);..      s
10300 65 71 2e 54 79 70 65 20 3d 20 28 43 6f 6c 6c 61  eq.Type = (Colla
10310 74 69 6f 6e 54 79 70 65 45 6e 75 6d 29 74 79 70  tionTypeEnum)typ
10320 65 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 5f 66  e;..      seq._f
10330 75 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a 20 20 20  unc = func;..   
10340 20 20 20 73 65 71 2e 45 6e 63 6f 64 69 6e 67 20     seq.Encoding 
10350 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  = (CollationEnco
10360 64 69 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d  dingEnum)enc;...
10370 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 65  .      return se
10380 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  q;..#else..     
10390 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
103a0 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
103b0 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
103c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
103d0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
103e0 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  ng GetParamValue
103f0 42 79 74 65 73 28 49 6e 74 50 74 72 20 70 2c 20  Bytes(IntPtr p, 
10400 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c  int nDataOffset,
10410 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69   byte[] bDest, i
10420 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e  nt nStart, int n
10430 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a  Length)..    {..
10440 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d        int nlen =
10450 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
10460 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
10470 75 65 5f 62 79 74 65 73 28 70 29 3b 0d 0a 0d 0a  ue_bytes(p);....
10480 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64        // If no d
10490 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65  estination buffe
104a0 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73 69  r, return the si
104b0 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20  ze needed...    
104c0 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e    if (bDest == n
104d0 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e  ull) return nlen
104e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  ;....      int n
104f0 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68  Copied = nLength
10500 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
10510 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20  Copied + nStart 
10520 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20  > bDest.Length) 
10530 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e  nCopied = bDest.
10540 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b  Length - nStart;
10550 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
10560 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65  ied + nDataOffse
10570 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65  t > nlen) nCopie
10580 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61  d = nlen - nData
10590 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20  Offset;....     
105a0 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30   if (nCopied > 0
105b0 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
105c0 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d      IntPtr ptr =
105d0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
105e0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
105f0 75 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20  ue_blob(p);.... 
10600 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43         Marshal.C
10610 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70 74 72  opy((IntPtr)(ptr
10620 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61  .ToInt64() + nDa
10630 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74  taOffset), bDest
10640 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65  , nStart, nCopie
10650 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  d);..      }..  
10660 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
10670 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69  {..        nCopi
10680 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d  ed = 0;..      }
10690 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
106a0 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d   nCopied;..    }
106b0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
106c0 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65   override double
106d0 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 44 6f   GetParamValueDo
106e0 75 62 6c 65 28 49 6e 74 50 74 72 20 70 74 72 29  uble(IntPtr ptr)
106f0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 64  ..    {..      d
10700 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69  ouble value;..#i
10710 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
10720 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
10730 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61      value = Unsa
10740 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10750 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f  sqlite3_value_do
10760 75 62 6c 65 28 70 74 72 29 3b 0d 0a 23 65 6c 69  uble(ptr);..#eli
10770 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
10780 52 44 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20  RD..      value 
10790 3d 20 30 2e 30 3b 0d 0a 20 20 20 20 20 20 55 6e  = 0.0;..      Un
107a0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
107b0 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
107c0 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70  double_interop(p
107d0 74 72 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  tr, ref value);.
107e0 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
107f0 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
10800 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
10810 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
10820 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
10830 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
10840 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10850 69 6e 74 20 47 65 74 50 61 72 61 6d 56 61 6c 75  int GetParamValu
10860 65 49 6e 74 33 32 28 49 6e 74 50 74 72 20 70 74  eInt32(IntPtr pt
10870 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  r)..    {..     
10880 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
10890 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
108a0 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 70 74  te3_value_int(pt
108b0 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  r);..    }....  
108c0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
108d0 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61  ide long GetPara
108e0 6d 56 61 6c 75 65 49 6e 74 36 34 28 49 6e 74 50  mValueInt64(IntP
108f0 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a  tr ptr)..    {..
10900 20 20 20 20 20 20 49 6e 74 36 34 20 76 61 6c 75        Int64 valu
10910 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  e;..#if !PLATFOR
10920 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
10930 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20  RK..      value 
10940 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
10950 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
10960 6c 75 65 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d  lue_int64(ptr);.
10970 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
10980 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 76  TANDARD..      v
10990 61 6c 75 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20  alue = 0;..     
109a0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
109b0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
109c0 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  ue_int64_interop
109d0 28 70 74 72 2c 20 72 65 66 20 76 61 6c 75 65 29  (ptr, ref value)
109e0 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
109f0 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
10a00 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
10a10 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
10a20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65      return value
10a30 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
10a40 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
10a50 65 20 73 74 72 69 6e 67 20 47 65 74 50 61 72 61  e string GetPara
10a60 6d 56 61 6c 75 65 54 65 78 74 28 49 6e 74 50 74  mValueText(IntPt
10a70 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23  r ptr)..    {..#
10a80 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
10a90 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
10aa0 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72  en = 0;..      r
10ab0 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
10ac0 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
10ad0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
10ae0 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f  alue_text_intero
10af0 70 28 70 74 72 2c 20 72 65 66 20 6c 65 6e 29 2c  p(ptr, ref len),
10b00 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
10b10 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
10b20 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
10b30 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10b40 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
10b50 70 74 72 29 2c 0d 0a 20 20 20 20 20 20 20 20 55  ptr),..        U
10b60 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10b70 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
10b80 5f 62 79 74 65 73 28 70 74 72 29 29 3b 0d 0a 23  _bytes(ptr));..#
10b90 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
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 54 79 70 65 41 66 66 69 6e 69  rride TypeAffini
10bc0 74 79 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  ty GetParamValue
10bd0 54 79 70 65 28 49 6e 74 50 74 72 20 70 74 72 29  Type(IntPtr ptr)
10be0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
10bf0 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
10c00 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10c10 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 74 72  3_value_type(ptr
10c20 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
10c30 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
10c40 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 42 6c  de void ReturnBl
10c50 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  ob(IntPtr contex
10c60 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29  t, byte[] value)
10c70 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
10c80 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10c90 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
10ca0 74 5f 62 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20  t_blob(context, 
10cb0 76 61 6c 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e  value, value.Len
10cc0 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31  gth, (IntPtr)(-1
10cd0 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
10ce0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
10cf0 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 44  ide void ReturnD
10d00 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 63 6f 6e  ouble(IntPtr con
10d10 74 65 78 74 2c 20 64 6f 75 62 6c 65 20 76 61 6c  text, double val
10d20 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ue)..    {..#if 
10d30 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
10d40 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
10d50 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
10d60 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
10d70 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74  sult_double(cont
10d80 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  ext, value);..#e
10d90 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
10da0 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61  DARD..      Unsa
10db0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10dc0 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64  sqlite3_result_d
10dd0 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 63 6f  ouble_interop(co
10de0 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65  ntext, ref value
10df0 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
10e00 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
10e10 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
10e20 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
10e30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
10e40 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
10e50 69 64 20 52 65 74 75 72 6e 45 72 72 6f 72 28 49  id ReturnError(I
10e60 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73  ntPtr context, s
10e70 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20  tring value)..  
10e80 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
10e90 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
10ea0 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
10eb0 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55  ror(context, ToU
10ec0 54 46 38 28 76 61 6c 75 65 29 2c 20 76 61 6c 75  TF8(value), valu
10ed0 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20  e.Length);..    
10ee0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
10ef0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
10f00 52 65 74 75 72 6e 49 6e 74 33 32 28 49 6e 74 50  ReturnInt32(IntP
10f10 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20  tr context, int 
10f20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
10f30 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
10f40 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10f50 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74  _result_int(cont
10f60 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  ext, value);..  
10f70 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
10f80 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
10f90 64 20 52 65 74 75 72 6e 49 6e 74 36 34 28 49 6e  d ReturnInt64(In
10fa0 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 6c 6f  tPtr context, lo
10fb0 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
10fc0 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
10fd0 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
10fe0 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
10ff0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
11000 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34  te3_result_int64
11010 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29  (context, value)
11020 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
11030 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
11040 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11050 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
11060 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ult_int64_intero
11070 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76  p(context, ref v
11080 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
11090 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
110a0 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
110b0 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
110c0 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
110d0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
110e0 65 20 76 6f 69 64 20 52 65 74 75 72 6e 4e 75 6c  e void ReturnNul
110f0 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  l(IntPtr context
11100 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
11110 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
11120 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
11130 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74 29  lt_null(context)
11140 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
11150 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
11160 65 20 76 6f 69 64 20 52 65 74 75 72 6e 54 65 78  e void ReturnTex
11170 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  t(IntPtr context
11180 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d  , string value).
11190 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 62 79  .    {..      by
111a0 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28  te[] b = ToUTF8(
111b0 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 55  value);..      U
111c0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
111d0 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
111e0 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20  t_text(context, 
111f0 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20 62  ToUTF8(value), b
11200 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e  .Length - 1, (In
11210 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20  tPtr)(-1));..   
11220 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f   }....#if INTERO
11230 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
11240 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
11250 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c  y>..    /// Call
11260 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c  s the native SQL
11270 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
11280 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 72 65   in order to cre
11290 61 74 65 20 61 20 64 69 73 70 6f 73 61 62 6c 65  ate a disposable
112a0 0d 0a 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65  ..    /// module
112b0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
112c0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
112d0 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
112e0 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
112f0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
11300 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64  <param name="mod
11310 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ule">..    /// T
11320 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74  he module object
11330 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
11340 20 63 72 65 61 74 69 6e 67 20 74 68 65 20 6e 61   creating the na
11350 74 69 76 65 20 64 69 73 70 6f 73 61 62 6c 65 20  tive disposable 
11360 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f  module...    ///
11370 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
11380 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
11390 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f  flags">..    ///
113a0 20 54 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74   The flags for t
113b0 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 3c 73  he associated <s
113c0 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
113d0 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62  onnection" /> ob
113e0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
113f0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
11400 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11410 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 72 65  verride void Cre
11420 61 74 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65  ateModule(SQLite
11430 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 53  Module module, S
11440 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
11450 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20  lags flags)..   
11460 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
11470 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
11480 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
11490 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
114a0 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f  ullException("mo
114b0 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dule");....     
114c0 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
114d0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
114e0 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c  Flags.NoLogModul
114f0 65 29 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  e) != SQLiteConn
11500 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f  ectionFlags.NoLo
11510 67 4d 6f 64 75 6c 65 29 0d 0a 20 20 20 20 20 20  gModule)..      
11520 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11530 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 72 72 6f 72   module.LogError
11540 73 20 3d 20 28 28 66 6c 61 67 73 20 26 20 53 51  s = ((flags & SQ
11550 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
11560 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 72 72  ags.LogModuleErr
11570 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  or) == SQLiteCon
11580 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
11590 4d 6f 64 75 6c 65 45 72 72 6f 72 29 3b 0d 0a 20  ModuleError);.. 
115a0 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
115b0 65 2e 4c 6f 67 45 78 63 65 70 74 69 6f 6e 73 20  e.LogExceptions 
115c0 3d 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  = ((flags & SQLi
115d0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
115e0 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70  s.LogModuleExcep
115f0 74 69 6f 6e 29 20 3d 3d 20 53 51 4c 69 74 65 43  tion) == SQLiteC
11600 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
11610 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70 74 69 6f  ogModuleExceptio
11620 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  n);..        }..
11630 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73  ..        if (_s
11640 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql == null)..   
11650 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
11660 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
11670 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  on("connection h
11680 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
11690 6e 64 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndle");....     
116a0 20 20 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73     SetLoadExtens
116b0 69 6f 6e 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ion(true);..    
116c0 20 20 20 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f      LoadExtensio
116d0 6e 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n(UnsafeNativeMe
116e0 74 68 6f 64 73 2e 53 51 4c 49 54 45 5f 44 4c 4c  thods.SQLITE_DLL
116f0 2c 20 22 73 71 6c 69 74 65 33 5f 76 74 73 68 69  , "sqlite3_vtshi
11700 6d 5f 69 6e 69 74 22 29 3b 0d 0a 0d 0a 20 20 20  m_init");....   
11710 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 2e       if (module.
11720 43 72 65 61 74 65 44 69 73 70 6f 73 61 62 6c 65  CreateDisposable
11730 4d 6f 64 75 6c 65 28 5f 73 71 6c 29 29 0d 0a 20  Module(_sql)).. 
11740 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11750 20 20 20 20 20 20 69 66 20 28 5f 6d 6f 64 75 6c        if (_modul
11760 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
11770 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f               _mo
11780 64 75 6c 65 73 20 3d 20 6e 65 77 20 44 69 63 74  dules = new Dict
11790 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53  ionary<string, S
117a0 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 28 29 3b 0d  QLiteModule>();.
117b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  ...            _
117c0 6d 6f 64 75 6c 65 73 2e 41 64 64 28 6d 6f 64 75  modules.Add(modu
117d0 6c 65 2e 4e 61 6d 65 2c 20 6d 6f 64 75 6c 65 29  le.Name, module)
117e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
117f0 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a   if (_usePool)..
11800 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
11820 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b  usePool = false;
11830 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
11840 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
11850 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
11860 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
11870 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72  ce.WriteLine(Str
11880 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43 72 65 61  ing.Format("Crea
11890 74 65 4d 6f 64 75 6c 65 20 28 50 6f 6f 6c 29 20  teModule (Pool) 
118a0 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d 22 2c 20  Disabled: {0}", 
118b0 5f 73 71 6c 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  _sql));..#endif.
118c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
118d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
118e0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
118f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11900 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
11910 45 78 63 65 70 74 69 6f 6e 28 47 65 74 4c 61 73  Exception(GetLas
11920 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
11930 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
11940 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
11950 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73  >..    /// Calls
11960 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69   the native SQLi
11970 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
11980 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6c 65 61  in order to clea
11990 6e 75 70 20 74 68 65 20 72 65 73 6f 75 72 63 65  nup the resource
119a0 73 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63  s..    /// assoc
119b0 69 61 74 65 64 20 77 69 74 68 20 61 20 6d 6f 64  iated with a mod
119c0 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ule containing t
119d0 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
119e0 6e 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  n of a virtual t
119f0 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  able...    /// <
11a00 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
11a10 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
11a20 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f  module">..    //
11a30 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a  / The module obj
11a40 65 63 74 20 70 72 65 76 69 6f 75 73 6c 79 20 70  ect previously p
11a50 61 73 73 65 64 20 74 6f 20 74 68 65 20 3c 73 65  assed to the <se
11a60 65 20 63 72 65 66 3d 22 43 72 65 61 74 65 4d 6f  e cref="CreateMo
11a70 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f  dule" />..    //
11a80 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f  / method...    /
11a90 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
11aa0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
11ab0 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f  ="flags">..    /
11ac0 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 66 6f 72  // The flags for
11ad0 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
11ae0 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
11af0 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20  eConnection" /> 
11b00 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
11b10 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
11b20 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
11b30 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 44   override void D
11b40 69 73 70 6f 73 65 4d 6f 64 75 6c 65 28 53 51 4c  isposeModule(SQL
11b50 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65  iteModule module
11b60 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
11b70 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a  onFlags flags)..
11b80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
11b90 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
11ba0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
11bb0 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
11bc0 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
11bd0 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20  "module");....  
11be0 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69 73        module.Dis
11bf0 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a  pose();..    }..
11c00 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e  #endif....    in
11c10 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
11c20 49 6e 74 50 74 72 20 41 67 67 72 65 67 61 74 65  IntPtr Aggregate
11c30 43 6f 6e 74 65 78 74 28 49 6e 74 50 74 72 20 63  Context(IntPtr c
11c40 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
11c50 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
11c60 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
11c70 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61  .sqlite3_aggrega
11c80 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65  te_context(conte
11c90 78 74 2c 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a  xt, 1);..    }..
11ca0 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49  ..#if INTEROP_VI
11cb0 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20  RTUAL_TABLE..   
11cc0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
11cd0 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68      /// Calls th
11ce0 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20  e native SQLite 
11cf0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20  core library in 
11d00 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61 72 65  order to declare
11d10 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
11d20 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20 72 65 73  ..    /// in res
11d30 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c 20  ponse to a call 
11d40 69 6e 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72  into the <see cr
11d50 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
11d60 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22  eModule.xCreate"
11d70 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20   />..    /// or 
11d80 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
11d90 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
11da0 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72 74  Connect" /> virt
11db0 75 61 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f 64  ual table method
11dc0 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
11dd0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
11de0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64  <param name="mod
11df0 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ule">..    /// T
11e00 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
11e10 20 6d 6f 64 75 6c 65 20 74 68 61 74 20 69 73 20   module that is 
11e20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73 69 62 6c  to be responsibl
11e30 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61  e for the virtua
11e40 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f  l table..    ///
11e50 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e   being declared.
11e60 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
11e70 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
11e80 61 6d 20 6e 61 6d 65 3d 22 73 74 72 53 71 6c 22  am name="strSql"
11e90 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 73  >..    /// The s
11ea0 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
11eb0 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
11ec0 6e 74 20 64 65 73 63 72 69 62 69 6e 67 20 74 68  nt describing th
11ed0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
11ee0 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20 64  to..    /// be d
11ef0 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f  eclared...    //
11f00 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
11f10 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
11f20 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f  "error">..    //
11f30 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20  / Upon success, 
11f40 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
11f50 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 61  this parameter a
11f60 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 55  re undefined.  U
11f70 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20  pon failure,..  
11f80 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20    /// it should 
11f90 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70 72 6f  contain an appro
11fa0 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d 65 73  priate error mes
11fb0 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sage...    /// <
11fc0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
11fd0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
11fe0 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
11ff0 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
12000 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  e...    /// </re
12010 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
12020 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
12030 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65  LiteErrorCode De
12040 63 6c 61 72 65 56 69 72 74 75 61 6c 54 61 62 6c  clareVirtualTabl
12050 65 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  e(..        SQLi
12060 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c  teModule module,
12070 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
12080 20 73 74 72 53 71 6c 2c 0d 0a 20 20 20 20 20 20   strSql,..      
12090 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
120a0 6f 72 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  or..        ).. 
120b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
120c0 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
120d0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
120e0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
120f0 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20  "connection has 
12100 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
12110 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
12120 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
12130 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a  rorCode.Error;..
12140 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
12150 20 20 20 20 20 49 6e 74 50 74 72 20 70 53 71 6c       IntPtr pSql
12160 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
12170 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  ...        try..
12180 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12190 20 20 20 20 20 20 20 70 53 71 6c 20 3d 20 53 51         pSql = SQ
121a0 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49  LiteString.Utf8I
121b0 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28  ntPtrFromString(
121c0 73 74 72 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20  strSql);....    
121d0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
121e0 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
121f0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12200 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
12210 76 74 61 62 28 0d 0a 20 20 20 20 20 20 20 20 20  vtab(..         
12220 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70 53 71         _sql, pSq
12230 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l);....         
12240 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c     if ((n == SQL
12250 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
12260 20 26 26 20 28 6d 6f 64 75 6c 65 20 21 3d 20 6e   && (module != n
12270 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
12280 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 65         module.De
12290 63 6c 61 72 65 64 20 3d 20 74 72 75 65 3b 0d 0a  clared = true;..
122a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
122b0 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
122c0 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72  orCode.Ok) error
122d0 20 3d 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28   = GetLastError(
122e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
122f0 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20    return n;..   
12300 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12310 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
12320 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12330 69 66 20 28 70 53 71 6c 20 21 3d 20 49 6e 74 50  if (pSql != IntP
12340 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
12350 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12360 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
12370 65 6d 6f 72 79 2e 46 72 65 65 28 70 53 71 6c 29  emory.Free(pSql)
12380 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
12390 20 20 20 70 53 71 6c 20 3d 20 49 6e 74 50 74 72     pSql = IntPtr
123a0 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
123b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
123c0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
123d0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
123e0 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20    /// Calls the 
123f0 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f  native SQLite co
12400 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72  re library in or
12410 64 65 72 20 74 6f 20 64 65 63 6c 61 72 65 20 61  der to declare a
12420 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
12430 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e      /// function
12440 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20   in response to 
12450 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20  a call into the 
12460 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
12470 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
12480 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20  Create" />..    
12490 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72 65 66  /// or <see cref
124a0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
124b0 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20  odule.xConnect" 
124c0 2f 3e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  /> virtual table
124d0 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f   methods...    /
124e0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
124f0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
12500 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20  me="module">..  
12510 20 20 2f 2f 2f 20 54 68 65 20 76 69 72 74 75 61    /// The virtua
12520 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74  l table module t
12530 68 61 74 20 69 73 20 74 6f 20 62 65 20 72 65 73  hat is to be res
12540 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74 68 65  ponsible for the
12550 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
12560 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e      /// function
12570 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e   being declared.
12580 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
12590 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
125a0 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e  am name="argumen
125b0 74 43 6f 75 6e 74 22 3e 0d 0a 20 20 20 20 2f 2f  tCount">..    //
125c0 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
125d0 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
125e0 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20   function being 
125f0 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f  declared...    /
12600 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
12610 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
12620 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f  ="name">..    //
12630 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  / The name of th
12640 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67  e function being
12650 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20   declared...    
12660 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
12670 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
12680 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20  e="error">..    
12690 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73  /// Upon success
126a0 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  , the contents o
126b0 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  f this parameter
126c0 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 20   are undefined. 
126d0 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a   Upon failure,..
126e0 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c      /// it shoul
126f0 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70  d contain an app
12700 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d  ropriate error m
12710 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f  essage...    ///
12720 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
12730 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
12740 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
12750 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
12760 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ode...    /// </
12770 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
12780 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
12790 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
127a0 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c 46 75  DeclareVirtualFu
127b0 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  nction(..       
127c0 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f   SQLiteModule mo
127d0 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 69  dule,..        i
127e0 6e 74 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74  nt argumentCount
127f0 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
12800 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
12810 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
12820 72 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  r..        )..  
12830 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
12840 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (_sql == null)..
12850 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12860 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
12870 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61  connection has a
12880 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
12890 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
128a0 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72  return SQLiteErr
128b0 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20  orCode.Error;.. 
128c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
128d0 20 20 20 20 49 6e 74 50 74 72 20 70 4e 61 6d 65      IntPtr pName
128e0 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
128f0 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  ...        try..
12900 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12910 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d 20 53         pName = S
12920 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38  QLiteString.Utf8
12930 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67  IntPtrFromString
12940 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  (name);....     
12950 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
12960 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
12970 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12980 71 6c 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f  qlite3_overload_
12990 66 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  function(..     
129a0 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c             _sql,
129b0 20 70 4e 61 6d 65 2c 20 61 72 67 75 6d 65 6e 74   pName, argument
129c0 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
129d0 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
129e0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
129f0 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47 65 74 4c  Ok) error = GetL
12a00 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20  astError();.... 
12a10 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
12a20 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  n n;..        }.
12a30 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
12a40 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
12a50 20 20 20 20 20 20 20 20 20 69 66 20 28 70 4e 61           if (pNa
12a60 6d 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  me != IntPtr.Zer
12a70 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
12a80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12a90 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e     SQLiteMemory.
12aa0 46 72 65 65 28 70 4e 61 6d 65 29 3b 0d 0a 20 20  Free(pName);..  
12ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4e                pN
12ac0 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ame = IntPtr.Zer
12ad0 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
12ae0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
12af0 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
12b00 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
12b10 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65  ..    /// Enable
12b20 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78  s or disabled ex
12b30 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e 67 20  tension loading 
12b40 62 79 20 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20  by SQLite...    
12b50 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
12b60 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
12b70 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20  ame="bOnOff">.. 
12b80 20 20 20 2f 2f 2f 20 54 72 75 65 20 74 6f 20 65     /// True to e
12b90 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67 20 6f 66  nable loading of
12ba0 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20 66 61 6c   extensions, fal
12bb0 73 65 20 74 6f 20 64 69 73 61 62 6c 65 2e 0d 0a  se to disable...
12bc0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
12bd0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
12be0 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
12bf0 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 62 6f  LoadExtension(bo
12c00 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20  ol bOnOff)..    
12c10 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
12c20 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
12c30 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12c40 64 73 2e 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  ds.sqlite3_enabl
12c50 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e_load_extension
12c60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  (..            _
12c70 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d  sql, (bOnOff ? -
12c80 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20  1 : 0));....    
12c90 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
12ca0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
12cb0 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
12cc0 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
12cd0 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
12ce0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
12cf0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
12d00 2f 2f 2f 20 4c 6f 61 64 73 20 61 20 53 51 4c 69  /// Loads a SQLi
12d10 74 65 20 65 78 74 65 6e 73 69 6f 6e 20 6c 69 62  te extension lib
12d20 72 61 72 79 20 66 72 6f 6d 20 74 68 65 20 6e 61  rary from the na
12d30 6d 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 2f  med file...    /
12d40 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
12d50 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
12d60 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a  me="fileName">..
12d70 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65      /// The name
12d80 20 6f 66 20 74 68 65 20 64 79 6e 61 6d 69 63 20   of the dynamic 
12d90 6c 69 6e 6b 20 6c 69 62 72 61 72 79 20 66 69 6c  link library fil
12da0 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
12db0 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20   extension...   
12dc0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
12dd0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
12de0 6d 65 3d 22 70 72 6f 63 4e 61 6d 65 22 3e 0d 0a  me="procName">..
12df0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65      /// The name
12e00 20 6f 66 20 74 68 65 20 65 78 70 6f 72 74 65 64   of the exported
12e10 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 64 20 74   function used t
12e20 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65  o initialize the
12e30 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20   extension...   
12e40 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c 2c 20 74 68   /// If null, th
12e50 65 20 64 65 66 61 75 6c 74 20 22 73 71 6c 69 74  e default "sqlit
12e60 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69  e3_extension_ini
12e70 74 22 20 77 69 6c 6c 20 62 65 20 75 73 65 64 2e  t" will be used.
12e80 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
12e90 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
12ea0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c   override void L
12eb0 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 73 74 72  oadExtension(str
12ec0 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 20 73 74  ing fileName, st
12ed0 72 69 6e 67 20 70 72 6f 63 4e 61 6d 65 29 0d 0a  ring procName)..
12ee0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
12ef0 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d 3d 20 6e  f (fileName == n
12f00 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
12f10 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
12f20 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
12f30 6e 28 22 66 69 6c 65 4e 61 6d 65 22 29 3b 0d 0a  n("fileName");..
12f40 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
12f50 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72   pError = IntPtr
12f60 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Zero;....      
12f70 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
12f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79  ..            by
12f90 74 65 5b 5d 20 75 74 66 38 46 69 6c 65 4e 61 6d  te[] utf8FileNam
12fa0 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67  e = UTF8Encoding
12fb0 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73 28 66  .UTF8.GetBytes(f
12fc0 69 6c 65 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b  ileName + '\0');
12fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79  ..            by
12fe0 74 65 5b 5d 20 75 74 66 38 50 72 6f 63 4e 61 6d  te[] utf8ProcNam
12ff0 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  e = null;....   
13000 20 20 20 20 20 20 20 20 20 69 66 20 28 70 72 6f           if (pro
13010 63 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  cName != null)..
13020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13030 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20 55  utf8ProcName = U
13040 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38  TF8Encoding.UTF8
13050 2e 47 65 74 42 79 74 65 73 28 70 72 6f 63 4e 61  .GetBytes(procNa
13060 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 0d 0a 20  me + '\0');.... 
13070 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
13080 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
13090 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
130a0 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f  ds.sqlite3_load_
130b0 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20  extension(..    
130c0 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
130d0 2c 20 75 74 66 38 46 69 6c 65 4e 61 6d 65 2c 20  , utf8FileName, 
130e0 75 74 66 38 50 72 6f 63 4e 61 6d 65 2c 20 72 65  utf8ProcName, re
130f0 66 20 70 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20  f pError);....  
13100 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
13110 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
13120 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
13130 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
13140 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
13150 6e 28 6e 2c 20 55 54 46 38 54 6f 53 74 72 69 6e  n(n, UTF8ToStrin
13160 67 28 70 45 72 72 6f 72 2c 20 2d 31 29 29 3b 0d  g(pError, -1));.
13170 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
13180 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
13190 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
131a0 20 20 20 20 69 66 20 28 70 45 72 72 6f 72 20 21      if (pError !
131b0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
131c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
131d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
131e0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
131f0 64 73 2e 73 71 6c 69 74 65 33 5f 66 72 65 65 28  ds.sqlite3_free(
13200 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20  pError);..      
13210 20 20 20 20 20 20 20 20 20 20 70 45 72 72 6f 72            pError
13220 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
13230 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
13240 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
13250 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62  ....    /// Enab
13260 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20  les or disabled 
13270 65 78 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20  extended result 
13280 63 6f 64 65 73 20 72 65 74 75 72 6e 65 64 20 62  codes returned b
13290 79 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 69 6e  y SQLite..    in
132a0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
132b0 76 6f 69 64 20 53 65 74 45 78 74 65 6e 64 65 64  void SetExtended
132c0 52 65 73 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c  ResultCodes(bool
132d0 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d   bOnOff)..    {.
132e0 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
132f0 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
13300 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
13310 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
13320 72 65 73 75 6c 74 5f 63 6f 64 65 73 28 0d 0a 20  result_codes(.. 
13330 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 28           _sql, (
13340 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29  bOnOff ? -1 : 0)
13350 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
13360 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
13370 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
13380 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
13390 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
133a0 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20  or());..    }.. 
133b0 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20     /// Gets the 
133c0 6c 61 73 74 20 53 51 4c 69 74 65 20 65 72 72 6f  last SQLite erro
133d0 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65  r code..    inte
133e0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
133f0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65  LiteErrorCode Re
13400 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20  sultCode()..    
13410 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
13420 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
13430 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 72 72 63  ods.sqlite3_errc
13440 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ode(_sql);..    
13450 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20  }..    /// Gets 
13460 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20  the last SQLite 
13470 65 78 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63  extended error c
13480 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ode..    interna
13490 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
134a0 65 45 72 72 6f 72 43 6f 64 65 20 45 78 74 65 6e  eErrorCode Exten
134b0 64 65 64 52 65 73 75 6c 74 43 6f 64 65 28 29 0d  dedResultCode().
134c0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
134d0 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
134e0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
134f0 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64  _extended_errcod
13500 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d  e(_sql);..    }.
13510 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20 61  ...    /// Add a
13520 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76 69 61   log message via
13530 20 74 68 65 20 53 51 4c 69 74 65 20 73 71 6c 69   the SQLite sqli
13540 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63  te3_log interfac
13550 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  e...    internal
13560 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c   override void L
13570 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65  ogMessage(SQLite
13580 45 72 72 6f 72 43 6f 64 65 20 69 45 72 72 43 6f  ErrorCode iErrCo
13590 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73 73  de, string zMess
135a0 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  age)..    {..   
135b0 20 20 20 53 74 61 74 69 63 4c 6f 67 4d 65 73 73     StaticLogMess
135c0 61 67 65 28 69 45 72 72 43 6f 64 65 2c 20 7a 4d  age(iErrCode, zM
135d0 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 7d 0d  essage);..    }.
135e0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20 61  ...    /// Add a
135f0 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76 69 61   log message via
13600 20 74 68 65 20 53 51 4c 69 74 65 20 73 71 6c 69   the SQLite sqli
13610 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63  te3_log interfac
13620 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  e...    internal
13630 20 73 74 61 74 69 63 20 76 6f 69 64 20 53 74 61   static void Sta
13640 74 69 63 4c 6f 67 4d 65 73 73 61 67 65 28 53 51  ticLogMessage(SQ
13650 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 69 45  LiteErrorCode iE
13660 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a  rrCode, string z
13670 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d  Message)..    {.
13680 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
13690 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
136a0 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f 64 65 2c  e3_log(iErrCode,
136b0 20 54 6f 55 54 46 38 28 7a 4d 65 73 73 61 67 65   ToUTF8(zMessage
136c0 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69  ));..    }....#i
136d0 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20  f INTEROP_CODEC 
136e0 7c 7c 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55  || INTEROP_INCLU
136f0 44 45 5f 53 45 45 0d 0a 20 20 20 20 69 6e 74 65  DE_SEE..    inte
13700 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
13710 69 64 20 53 65 74 50 61 73 73 77 6f 72 64 28 62  id SetPassword(b
13720 79 74 65 5b 5d 20 70 61 73 73 77 6f 72 64 42 79  yte[] passwordBy
13730 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tes)..    {..   
13740 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
13750 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
13760 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
13770 65 33 5f 6b 65 79 28 5f 73 71 6c 2c 20 70 61 73  e3_key(_sql, pas
13780 73 77 6f 72 64 42 79 74 65 73 2c 20 70 61 73 73  swordBytes, pass
13790 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68  wordBytes.Length
137a0 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
137b0 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
137c0 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
137d0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
137e0 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
137f0 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
13800 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
13810 72 69 64 65 20 76 6f 69 64 20 43 68 61 6e 67 65  ride void Change
13820 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20  Password(byte[] 
13830 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73  newPasswordBytes
13840 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
13850 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
13860 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
13870 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
13880 72 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65 77 50  rekey(_sql, newP
13890 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20 28 6e  asswordBytes, (n
138a0 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 20  ewPasswordBytes 
138b0 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a 20 6e  == null) ? 0 : n
138c0 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2e  ewPasswordBytes.
138d0 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20  Length);..      
138e0 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
138f0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
13900 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
13910 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
13920 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
13930 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
13940 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
13950 64 65 20 76 6f 69 64 20 53 65 74 41 75 74 68 6f  de void SetAutho
13960 72 69 7a 65 72 48 6f 6f 6b 28 53 51 4c 69 74 65  rizerHook(SQLite
13970 41 75 74 68 6f 72 69 7a 65 72 43 61 6c 6c 62 61  AuthorizerCallba
13980 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
13990 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
139a0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
139b0 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65  e3_set_authorize
139c0 72 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e  r(_sql, func, In
139d0 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
139e0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
139f0 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
13a00 20 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53   SetUpdateHook(S
13a10 51 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62  QLiteUpdateCallb
13a20 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
13a30 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
13a40 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13a50 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28  te3_update_hook(
13a60 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
13a70 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
13a80 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
13a90 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
13aa0 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c  etCommitHook(SQL
13ab0 69 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63  iteCommitCallbac
13ac0 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
13ad0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
13ae0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
13af0 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73  3_commit_hook(_s
13b00 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
13b10 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
13b20 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
13b30 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
13b40 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51  TraceCallback(SQ
13b50 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63  LiteTraceCallbac
13b60 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
13b70 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
13b80 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
13b90 33 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75  3_trace(_sql, fu
13ba0 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
13bb0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
13bc0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
13bd0 65 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61  e void SetRollba
13be0 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c  ckHook(SQLiteRol
13bf0 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75  lbackCallback fu
13c00 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nc)..    {..    
13c10 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
13c20 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f  thods.sqlite3_ro
13c30 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c  llback_hook(_sql
13c40 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
13c50 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ero);..    }....
13c60 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
13c70 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77  >..    /// Allow
13c80 73 20 74 68 65 20 73 65 74 74 69 6e 67 20 6f 66  s the setting of
13c90 20 61 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62   a logging callb
13ca0 61 63 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20 53  ack invoked by S
13cb0 51 4c 69 74 65 20 77 68 65 6e 20 61 0d 0a 20 20  QLite when a..  
13cc0 20 20 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20    /// log event 
13cd0 6f 63 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e  occurs.  Only on
13ce0 65 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62  e callback may b
13cf0 65 20 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20  e set.  If NULL 
13d00 69 73 20 70 61 73 73 65 64 2c 0d 0a 20 20 20 20  is passed,..    
13d10 2f 2f 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67 20  /// the logging 
13d20 63 61 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72 65  callback is unre
13d30 67 69 73 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f  gistered...    /
13d40 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
13d50 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
13d60 6d 65 3d 22 66 75 6e 63 22 3e 54 68 65 20 63 61  me="func">The ca
13d70 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20  llback function 
13d80 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61  to invoke.</para
13d90 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
13da0 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72  urns>Returns a r
13db0 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75  esult code</retu
13dc0 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
13dd0 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
13de0 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4c  teErrorCode SetL
13df0 6f 67 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74  ogCallback(SQLit
13e00 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e  eLogCallback fun
13e10 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
13e20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
13e30 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
13e40 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13e50 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d  te3_config_log(.
13e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
13e70 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d  iteConfigOpsEnum
13e80 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c  .SQLITE_CONFIG_L
13e90 4f 47 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  OG, func, IntPtr
13ea0 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20  .Zero);....     
13eb0 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20     return rc;.. 
13ec0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
13ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
13f30 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
13f40 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65  ..    /// Create
13f50 73 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20 62  s a new SQLite b
13f60 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 62 61 73  ackup object bas
13f70 65 64 20 6f 6e 20 74 68 65 20 70 72 6f 76 69 64  ed on the provid
13f80 65 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a  ed destination..
13f90 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
13fa0 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68   connection.  Th
13fb0 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
13fc0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
13fd0 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f  the one..    ///
13fe0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
13ff0 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54   this object.  T
14000 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65  he source and de
14010 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
14020 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e  se..    /// conn
14030 65 63 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62  ections cannot b
14040 65 20 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20  e the same...   
14050 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
14060 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
14070 6e 61 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54  name="destCnn">T
14080 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  he destination d
14090 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
140a0 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  on.</param>..   
140b0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
140c0 3d 22 64 65 73 74 4e 61 6d 65 22 3e 54 68 65 20  ="destName">The 
140d0 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61  destination data
140e0 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61  base name.</para
140f0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
14100 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e  am name="sourceN
14110 61 6d 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20  ame">The source 
14120 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f  database name.</
14130 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
14140 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 65 77  <returns>The new
14150 6c 79 20 63 72 65 61 74 65 64 20 62 61 63 6b 75  ly created backu
14160 70 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72  p object.</retur
14170 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
14180 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
14190 65 42 61 63 6b 75 70 20 49 6e 69 74 69 61 6c 69  eBackup Initiali
141a0 7a 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  zeBackup(..     
141b0 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
141c0 69 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20  ion destCnn,..  
141d0 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73        string des
141e0 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  tName,..        
141f0 73 74 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d  string sourceNam
14200 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  e..        )..  
14210 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
14220 28 64 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c  (destCnn == null
14230 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
14240 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
14250 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
14260 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20  destCnn");....  
14270 20 20 20 20 20 20 69 66 20 28 64 65 73 74 4e 61        if (destNa
14280 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
14290 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
142a0 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
142b0 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74 4e 61  xception("destNa
142c0 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me");....       
142d0 20 69 66 20 28 73 6f 75 72 63 65 4e 61 6d 65 20   if (sourceName 
142e0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
142f0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
14300 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
14310 70 74 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d  ption("sourceNam
14320 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
14330 53 51 4c 69 74 65 33 20 64 65 73 74 53 71 6c 69  SQLite3 destSqli
14340 74 65 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73  te3 = destCnn._s
14350 71 6c 20 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a  ql as SQLite3;..
14360 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
14370 73 74 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c  stSqlite3 == nul
14380 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
14390 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
143a0 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  ntException(..  
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
143c0 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65  estination conne
143d0 63 74 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61  ction has no wra
143e0 70 70 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20  pper.",..       
143f0 20 20 20 20 20 20 20 20 20 22 64 65 73 74 43 6e           "destCn
14400 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n");....        
14410 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
14420 48 61 6e 64 6c 65 20 64 65 73 74 48 61 6e 64 6c  Handle destHandl
14430 65 20 3d 20 64 65 73 74 53 71 6c 69 74 65 33 2e  e = destSqlite3.
14440 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  _sql;....       
14450 20 69 66 20 28 64 65 73 74 48 61 6e 64 6c 65 20   if (destHandle 
14460 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
14470 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
14480 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f  ArgumentExceptio
14490 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
144a0 20 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e      "Destination
144b0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20   connection has 
144c0 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
144d0 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e.",..          
144e0 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29        "destCnn")
144f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
14500 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
14510 64 6c 65 20 73 6f 75 72 63 65 48 61 6e 64 6c 65  dle sourceHandle
14520 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20   = _sql;....    
14530 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 48 61      if (sourceHa
14540 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
14550 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
14560 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
14570 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
14580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14590 20 22 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74   "Source connect
145a0 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ion has an inval
145b0 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
145c0 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20  .        byte[] 
145d0 7a 44 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54  zDestName = ToUT
145e0 46 38 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20  F8(destName);.. 
145f0 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 53         byte[] zS
14600 6f 75 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54  ourceName = ToUT
14610 46 38 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d  F8(sourceName);.
14620 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
14630 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 62 61  eBackupHandle ba
14640 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c  ckupHandle = nul
14650 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  l;....        tr
14660 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
14670 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
14680 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
14690 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
146a0 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68  ally /* NOTE: Th
146b0 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f  read.Abort() pro
146c0 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20  tection. */..   
146d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
146e0 20 20 20 20 49 6e 74 50 74 72 20 62 61 63 6b 75      IntPtr backu
146f0 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
14700 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
14710 62 61 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20  backup_init(..  
14720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
14730 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e  stHandle, zDestN
14740 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c  ame, sourceHandl
14750 65 2c 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b  e, zSourceName);
14760 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14770 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e  if (backup == In
14780 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
14790 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
147a0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
147b0 65 45 72 72 6f 72 43 6f 64 65 20 72 65 73 75 6c  eErrorCode resul
147c0 74 43 6f 64 65 20 3d 20 52 65 73 75 6c 74 43 6f  tCode = ResultCo
147d0 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de();....       
147e0 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
147f0 75 6c 74 43 6f 64 65 20 21 3d 20 53 51 4c 69 74  ultCode != SQLit
14800 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
14810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14820 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
14830 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 65  LiteException(re
14840 73 75 6c 74 43 6f 64 65 2c 20 47 65 74 4c 61 73  sultCode, GetLas
14850 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
14860 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
14870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14880 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
14890 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
148a0 22 66 61 69 6c 65 64 20 74 6f 20 69 6e 69 74 69  "failed to initi
148b0 61 6c 69 7a 65 20 62 61 63 6b 75 70 22 29 3b 0d  alize backup");.
148c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
148d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61  ..            ba
148e0 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77  ckupHandle = new
148f0 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
14900 64 6c 65 28 64 65 73 74 48 61 6e 64 6c 65 2c 20  dle(destHandle, 
14910 62 61 63 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20  backup);..      
14920 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53    }....        S
14930 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
14940 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20  OnChanged(null, 
14950 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  new ConnectionEv
14960 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
14970 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
14980 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e  ectionEventType.
14990 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c  NewCriticalHandl
149a0 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a  e, null, null,..
149b0 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
149c0 2c 20 6e 75 6c 6c 2c 20 62 61 63 6b 75 70 48 61  , null, backupHa
149d0 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20  ndle, null, new 
149e0 6f 62 6a 65 63 74 5b 5d 20 7b 20 64 65 73 74 43  object[] { destC
149f0 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nn,..           
14a00 20 64 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63   destName, sourc
14a10 65 4e 61 6d 65 20 7d 29 29 3b 0d 0a 0d 0a 20 20  eName }));....  
14a20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
14a30 20 53 51 4c 69 74 65 42 61 63 6b 75 70 28 0d 0a   SQLiteBackup(..
14a40 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
14a50 2c 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20  , backupHandle, 
14a60 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73  destHandle, zDes
14a70 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e  tName, sourceHan
14a80 64 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  dle,..          
14a90 20 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d    zSourceName);.
14aa0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
14ab0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
14ac0 20 2f 2f 2f 20 43 6f 70 69 65 73 20 75 70 20 74   /// Copies up t
14ad0 6f 20 4e 20 70 61 67 65 73 20 66 72 6f 6d 20 74  o N pages from t
14ae0 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
14af0 73 65 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e  se to the destin
14b00 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64  ation..    /// d
14b10 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74  atabase associat
14b20 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63  ed with the spec
14b30 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a  ified backup obj
14b40 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ect...    /// </
14b50 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
14b60 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
14b70 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75  ackup">The backu
14b80 70 20 6f 62 6a 65 63 74 20 74 6f 20 75 73 65 2e  p object to use.
14b90 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
14ba0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
14bb0 50 61 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  Page">..    /// 
14bc0 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  The number of pa
14bd0 67 65 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67  ges to copy, neg
14be0 61 74 69 76 65 20 74 6f 20 63 6f 70 79 20 61 6c  ative to copy al
14bf0 6c 20 72 65 6d 61 69 6e 69 6e 67 20 70 61 67 65  l remaining page
14c00 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  s...    /// </pa
14c10 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
14c20 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79  aram name="retry
14c30 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20  ">..    /// Set 
14c40 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 20 6f  to true if the o
14c50 70 65 72 61 74 69 6f 6e 20 6e 65 65 64 73 20 74  peration needs t
14c60 6f 20 62 65 20 72 65 74 72 69 65 64 20 64 75 65  o be retried due
14c70 20 74 6f 20 64 61 74 61 62 61 73 65 0d 0a 20 20   to database..  
14c80 20 20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73    /// locking is
14c90 73 75 65 73 3b 20 6f 74 68 65 72 77 69 73 65 2c  sues; otherwise,
14ca0 20 73 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a   set to false...
14cb0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
14cc0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
14cd0 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75  ns>..    /// Tru
14ce0 65 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6d  e if there are m
14cf0 6f 72 65 20 70 61 67 65 73 20 74 6f 20 62 65 20  ore pages to be 
14d00 63 6f 70 69 65 64 2c 20 66 61 6c 73 65 20 6f 74  copied, false ot
14d10 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f  herwise...    //
14d20 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
14d30 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
14d40 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 42 61 63  ide bool StepBac
14d50 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51  kup(..        SQ
14d60 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75  LiteBackup backu
14d70 70 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  p,..        int 
14d80 6e 50 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  nPage,..        
14d90 72 65 66 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a  ref bool retry..
14da0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
14db0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 72 79 20  ..        retry 
14dc0 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  = false;....    
14dd0 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
14de0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
14df0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
14e00 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
14e10 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
14e20 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
14e30 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
14e40 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
14e50 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
14e60 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
14e70 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
14e80 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
14e90 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
14ea0 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
14eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ec0 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
14ed0 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
14ee0 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
14ef0 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
14f00 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
14f10 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
14f20 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
14f30 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
14f40 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
14f50 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
14f60 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
14f70 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
14f80 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
14f90 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
14fa0 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20  pointer.");.... 
14fb0 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
14fc0 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
14fd0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
14fe0 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74  qlite3_backup_st
14ff0 65 70 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e 50  ep(handlePtr, nP
15000 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62  age);..        b
15010 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c  ackup._stepResul
15020 74 20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20  t = n; /* NOTE: 
15030 53 61 76 65 20 66 6f 72 20 75 73 65 20 62 79 20  Save for use by 
15040 46 69 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a 2f  FinishBackup. */
15050 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
15060 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
15070 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
15080 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15090 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
150a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
150b0 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
150c0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
150d0 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20 20 7b  Busy)..        {
150e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
150f0 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  try = true;..   
15100 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
15110 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
15120 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69  ..        else i
15130 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
15140 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d  rorCode.Locked).
15150 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
15160 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20          retry = 
15170 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
15180 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
15190 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
151a0 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d      else if (n =
151b0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
151c0 65 2e 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20  e.Done)..       
151d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
151e0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
151f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
15200 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
15210 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
15220 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
15230 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
15240 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
15250 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
15260 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
15270 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
15280 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
15290 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69  of pages remaini
152a0 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64 20  ng to be copied 
152b0 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 0d  from the source.
152c0 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73  .    /// databas
152d0 65 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61  e to the destina
152e0 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 61 73  tion database as
152f0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
15300 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20  e specified..   
15310 20 2f 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65   /// backup obje
15320 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ct...    /// </s
15330 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
15340 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61   <param name="ba
15350 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70  ckup">The backup
15360 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b   object to check
15370 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
15380 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
15390 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
153a0 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20  remaining to be 
153b0 63 6f 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73  copied.</returns
153c0 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
153d0 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52 65 6d  override int Rem
153e0 61 69 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a 20  ainingBackup(.. 
153f0 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
15400 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20  kup backup..    
15410 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
15420 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70        if (backup
15430 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
15440 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
15450 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
15460 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29  eption("backup")
15470 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
15480 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20  iteBackupHandle 
15490 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e  handle = backup.
154a0 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d  _sqlite_backup;.
154b0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
154c0 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
154d0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
154e0 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
154f0 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
15500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15510 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
15520 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
15530 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20  handle.");....  
15540 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
15550 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  dlePtr = handle;
15560 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
15570 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74  handlePtr == Int
15580 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
15590 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
155a0 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
155b0 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
155c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
155d0 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
155e0 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
155f0 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d  e pointer.");...
15600 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
15610 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
15620 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
15630 75 70 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e  up_remaining(han
15640 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d  dlePtr);..    }.
15650 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
15660 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
15670 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20  turns the total 
15680 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
15690 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64 61  in the source da
156a0 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65  tabase associate
156b0 64 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20  d..    /// with 
156c0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 62 61  the specified ba
156d0 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20  ckup object...  
156e0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
156f0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
15700 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54   name="backup">T
15710 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
15720 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61   to check.</para
15730 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
15740 75 72 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e  urns>The total n
15750 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
15760 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74  n the source dat
15770 61 62 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e  abase.</returns>
15780 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
15790 76 65 72 72 69 64 65 20 69 6e 74 20 50 61 67 65  verride int Page
157a0 43 6f 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20  CountBackup(..  
157b0 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
157c0 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20  up backup..     
157d0 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
157e0 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
157f0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
15800 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
15810 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
15820 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b  ption("backup");
15830 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
15840 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68  teBackupHandle h
15850 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f  andle = backup._
15860 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a  sqlite_backup;..
15870 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
15880 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
15890 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
158a0 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
158b0 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
158c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
158d0 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
158e0 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
158f0 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20  andle.");....   
15900 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
15910 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  lePtr = handle;.
15920 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
15930 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50  andlePtr == IntP
15940 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
15950 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
15960 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
15970 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
15980 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
15990 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
159a0 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
159b0 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a   pointer.");....
159c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
159d0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
159e0 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  ds.sqlite3_backu
159f0 70 5f 70 61 67 65 63 6f 75 6e 74 28 68 61 6e 64  p_pagecount(hand
15a00 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a  lePtr);..    }..
15a10 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
15a20 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73  ry>..    /// Des
15a30 74 72 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70  troys the backup
15a40 20 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67   object, rolling
15a50 20 62 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70   back any backup
15a60 20 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d   that may be in.
15a70 0a 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73  .    /// progess
15a80 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
15a90 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
15aa0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
15ab0 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
15ac0 62 6a 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79  bject to destroy
15ad0 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69  .</param>..    i
15ae0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
15af0 20 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b   void FinishBack
15b00 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  up(..        SQL
15b10 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70  iteBackup backup
15b20 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
15b30 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
15b40 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d  backup == null).
15b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
15b60 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
15b70 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61  ullException("ba
15b80 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ckup");....     
15b90 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48     SQLiteBackupH
15ba0 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62  andle handle = b
15bb0 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61  ackup._sqlite_ba
15bc0 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ckup;....       
15bd0 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e   if (handle == n
15be0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
15bf0 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
15c00 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
15c10 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
15c20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
15c30 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
15c40 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b  valid handle.");
15c50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
15c60 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68  tr handlePtr = h
15c70 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
15c80 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20    if (handlePtr 
15c90 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
15ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
15cb0 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
15cc0 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
15cd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
15ce0 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
15cf0 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
15d00 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e   handle pointer.
15d10 22 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49  ");....#if !SQLI
15d20 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
15d30 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
15d40 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
15d50 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
15d60 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
15d70 73 68 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  sh_interop(handl
15d80 65 50 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  ePtr);..#else.. 
15d90 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
15da0 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
15db0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
15dc0 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69  qlite3_backup_fi
15dd0 6e 69 73 68 28 68 61 6e 64 6c 65 50 74 72 29 3b  nish(handlePtr);
15de0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
15df0 20 20 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64    handle.SetHand
15e00 6c 65 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a  leAsInvalid();..
15e10 0d 0a 23 69 66 20 43 4f 55 4e 54 5f 48 41 4e 44  ..#if COUNT_HAND
15e20 4c 45 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  LE..        if (
15e30 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
15e40 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20  rCode.Ok) || (n 
15e50 3d 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52  == backup._stepR
15e60 65 73 75 6c 74 29 29 20 68 61 6e 64 6c 65 2e 57  esult)) handle.W
15e70 61 73 52 65 6c 65 61 73 65 64 4f 6b 28 29 3b 0d  asReleasedOk();.
15e80 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
15e90 20 20 20 69 66 20 28 28 6e 20 21 3d 20 53 51 4c     if ((n != SQL
15ea0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
15eb0 20 26 26 20 28 6e 20 21 3d 20 62 61 63 6b 75 70   && (n != backup
15ec0 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29 0d 0a  ._stepResult))..
15ed0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
15ee0 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
15ef0 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
15f00 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
15f10 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
15f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f70 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f  ///////....    /
15f80 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
15f90 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73    /// Determines
15fa0 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63   if the SQLite c
15fb0 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20  ore library has 
15fc0 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
15fd0 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f   for the..    //
15fe0 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  / current proces
15ff0 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
16000 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
16010 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
16020 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  // A boolean ind
16030 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20  icating whether 
16040 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74  or not the SQLit
16050 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68  e core library h
16060 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f  as been..    ///
16070 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72   initialized for
16080 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
16090 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cess...    /// <
160a0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
160b0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
160c0 20 62 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69   bool IsInitiali
160d0 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  zed()..    {..  
160e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61        return Sta
160f0 74 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64  ticIsInitialized
16100 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ();..    }....  
16110 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
16120 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69  .    /// Determi
16130 6e 65 73 20 69 66 20 74 68 65 20 53 51 4c 69 74  nes if the SQLit
16140 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68  e core library h
16150 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  as been initiali
16160 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20  zed for the..   
16170 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f   /// current pro
16180 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cess...    /// <
16190 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
161a0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
161b0 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20    /// A boolean 
161c0 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68  indicating wheth
161d0 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51  er or not the SQ
161e0 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
161f0 79 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20  y has been..    
16200 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  /// initialized 
16210 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
16220 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f  process...    //
16230 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
16240 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
16250 63 20 62 6f 6f 6c 20 53 74 61 74 69 63 49 73 49  c bool StaticIsI
16260 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20  nitialized()..  
16270 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d    {..        //.
16280 0a 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46  .        // BUGF
16290 49 58 3a 20 50 72 65 76 65 6e 74 20 72 61 63 65  IX: Prevent race
162a0 73 20 77 69 74 68 20 6f 74 68 65 72 20 74 68 72  s with other thr
162b0 65 61 64 73 20 66 6f 72 20 74 68 69 73 20 65 6e  eads for this en
162c0 74 69 72 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d  tire block, due.
162d0 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
162e0 20 20 20 20 74 6f 20 74 68 65 20 74 72 79 2f 66      to the try/f
162f0 69 6e 61 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73  inally semantics
16300 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37  .  See ticket [7
16310 32 39 30 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20  2905c9a77]...   
16320 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
16330 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
16340 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
16350 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
16360 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
16370 3a 20 53 61 76 65 20 74 68 65 20 73 74 61 74 65  : Save the state
16380 20 6f 66 20 74 68 65 20 6c 6f 67 67 69 6e 67 20   of the logging 
16390 63 6c 61 73 73 20 61 6e 64 20 74 68 65 6e 20 72  class and then r
163a0 65 73 74 6f 72 65 20 69 74 0d 0a 20 20 20 20 20  estore it..     
163b0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
163c0 61 66 74 65 72 20 77 65 20 61 72 65 20 64 6f 6e  after we are don
163d0 65 20 74 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69  e to avoid loggi
163e0 6e 67 20 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73  ng too many fals
163f0 65 20 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20  e errors...     
16400 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
16410 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 76 65         bool save
16420 64 45 6e 61 62 6c 65 64 20 3d 20 53 51 4c 69 74  dEnabled = SQLit
16430 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20  eLog.Enabled;.. 
16440 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
16450 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66  eLog.Enabled = f
16460 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
16470 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
16480 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16490 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
164a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
164b0 4e 4f 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f  NOTE: This metho
164c0 64 20 5b 61 62 5d 75 73 65 73 20 74 68 65 20 66  d [ab]uses the f
164d0 61 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 20  act that SQLite 
164e0 77 69 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20  will always..   
164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
16500 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
16510 49 54 45 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e  ITE_ERROR for an
16520 79 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67  y unknown config
16530 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a  uration option..
16540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16550 2f 2f 20 20 20 20 20 20 20 2a 75 6e 6c 65 73 73  //       *unless
16560 2a 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  * the SQLite lib
16570 72 61 72 79 20 68 61 73 20 61 6c 72 65 61 64 79  rary has already
16580 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65   been initialize
16590 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
165a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 6e 20      //       In 
165b0 74 68 61 74 20 63 61 73 65 20 69 74 20 77 69 6c  that case it wil
165c0 6c 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20  l always return 
165d0 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a  SQLITE_MISUSE...
165e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165f0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
16600 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
16610 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e  ode rc = UnsafeN
16620 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
16630 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65  ite3_config_none
16640 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16650 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
16660 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54  figOpsEnum.SQLIT
16670 45 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d  E_CONFIG_NONE);.
16680 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16690 20 20 20 72 65 74 75 72 6e 20 28 72 63 20 3d 3d     return (rc ==
166a0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
166b0 2e 4d 69 73 75 73 65 29 3b 0d 0a 20 20 20 20 20  .Misuse);..     
166c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
166d0 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
166e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
166f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
16700 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20  LiteLog.Enabled 
16710 3d 20 73 61 76 65 64 45 6e 61 62 6c 65 64 3b 0d  = savedEnabled;.
16720 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
16730 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
16740 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
16750 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48  mary>..    /// H
16760 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74  elper function t
16770 6f 20 72 65 74 72 69 65 76 65 20 61 20 63 6f 6c  o retrieve a col
16780 75 6d 6e 20 6f 66 20 64 61 74 61 20 66 72 6f 6d  umn of data from
16790 20 61 6e 20 61 63 74 69 76 65 20 73 74 61 74 65   an active state
167a0 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ment...    /// <
167b0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
167c0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
167d0 73 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d  stmt">The statem
167e0 65 6e 74 20 62 65 69 6e 67 20 73 74 65 70 28 29  ent being step()
167f0 27 64 20 74 68 72 6f 75 67 68 3c 2f 70 61 72 61  'd through</para
16800 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
16810 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e  am name="flags">
16820 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69  The flags associ
16830 61 74 65 64 20 77 69 74 68 20 74 68 65 20 63 6f  ated with the co
16840 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d  nnection.</param
16850 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
16860 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54  m name="index">T
16870 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20  he column index 
16880 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
16890 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
168a0 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54  ram name="typ">T
168b0 68 65 20 74 79 70 65 20 6f 66 20 64 61 74 61 20  he type of data 
168c0 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
168d0 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69   column.  If Uni
168e0 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 69 73  nitialized, this
168f0 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72   function will r
16900 65 74 72 69 65 76 65 20 74 68 65 20 64 61 74 61  etrieve the data
16910 74 79 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  type information
16920 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
16930 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
16940 72 6e 73 20 74 68 65 20 64 61 74 61 20 69 6e 20  rns the data in 
16950 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75  the column</retu
16960 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
16970 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65  al override obje
16980 63 74 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69  ct GetValue(SQLi
16990 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
169a0 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
169b0 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
169c0 6e 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65  nt index, SQLite
169d0 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b  Type typ)..    {
169e0 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69  ..      TypeAffi
169f0 6e 69 74 79 20 61 66 66 20 3d 20 74 79 70 2e 41  nity aff = typ.A
16a00 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20  ffinity;..      
16a10 69 66 20 28 61 66 66 20 3d 3d 20 54 79 70 65 41  if (aff == TypeA
16a20 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 20 72 65  ffinity.Null) re
16a30 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75  turn DBNull.Valu
16a40 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 20 74  e;..      Type t
16a50 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
16a60 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 21    if (typ.Type !
16a70 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29  = DbType.Object)
16a80 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
16a90 20 20 20 74 20 3d 20 53 51 4c 69 74 65 43 6f 6e     t = SQLiteCon
16aa0 76 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54  vert.SQLiteTypeT
16ab0 6f 54 79 70 65 28 74 79 70 29 3b 0d 0a 20 20 20  oType(typ);..   
16ac0 20 20 20 20 20 61 66 66 20 3d 20 54 79 70 65 54       aff = TypeT
16ad0 6f 41 66 66 69 6e 69 74 79 28 74 29 3b 0d 0a 20  oAffinity(t);.. 
16ae0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
16af0 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
16b00 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
16b10 67 73 2e 47 65 74 41 6c 6c 41 73 54 65 78 74 29  gs.GetAllAsText)
16b20 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
16b30 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c  tionFlags.GetAll
16b40 41 73 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20  AsText)..       
16b50 20 20 20 72 65 74 75 72 6e 20 47 65 74 54 65 78     return GetTex
16b60 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  t(stmt, index);.
16b70 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20  ...      switch 
16b80 28 61 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  (aff)..      {..
16b90 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
16ba0 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d  eAffinity.Blob:.
16bb0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
16bc0 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70  yp.Type == DbTyp
16bd0 65 2e 47 75 69 64 20 26 26 20 74 79 70 2e 41 66  e.Guid && typ.Af
16be0 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66  finity == TypeAf
16bf0 66 69 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20 20  finity.Text)..  
16c00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
16c10 20 6e 65 77 20 47 75 69 64 28 47 65 74 54 65 78   new Guid(GetTex
16c20 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b  t(stmt, index));
16c30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e  ....          in
16c40 74 20 6e 20 3d 20 28 69 6e 74 29 47 65 74 42 79  t n = (int)GetBy
16c50 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c  tes(stmt, index,
16c60 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b   0, null, 0, 0);
16c70 0d 0a 20 20 20 20 20 20 20 20 20 20 62 79 74 65  ..          byte
16c80 5b 5d 20 62 20 3d 20 6e 65 77 20 62 79 74 65 5b  [] b = new byte[
16c90 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 47  n];..          G
16ca0 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e  etBytes(stmt, in
16cb0 64 65 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29  dex, 0, b, 0, n)
16cc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
16cd0 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44  f (typ.Type == D
16ce0 62 54 79 70 65 2e 47 75 69 64 20 26 26 20 6e 20  bType.Guid && n 
16cf0 3d 3d 20 31 36 29 0d 0a 20 20 20 20 20 20 20 20  == 16)..        
16d00 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47      return new G
16d10 75 69 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  uid(b);....     
16d20 20 20 20 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a       return b;..
16d30 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
16d40 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69  eAffinity.DateTi
16d50 6d 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  me:..          r
16d60 65 74 75 72 6e 20 47 65 74 44 61 74 65 54 69 6d  eturn GetDateTim
16d70 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e(stmt, index);.
16d80 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
16d90 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c  peAffinity.Doubl
16da0 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  e:..          if
16db0 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74   (t == null) ret
16dc0 75 72 6e 20 47 65 74 44 6f 75 62 6c 65 28 73 74  urn GetDouble(st
16dd0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
16de0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f         return Co
16df0 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70 65  nvert.ChangeType
16e00 28 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c  (GetDouble(stmt,
16e10 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c   index), t, null
16e20 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  );..        case
16e30 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
16e40 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  t64:..          
16e50 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72  if (t == null) r
16e60 65 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73  eturn GetInt64(s
16e70 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
16e80 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
16e90 20 74 79 70 65 6f 66 28 53 42 79 74 65 29 29 20   typeof(SByte)) 
16ea0 72 65 74 75 72 6e 20 47 65 74 53 42 79 74 65 28  return GetSByte(
16eb0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
16ec0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
16ed0 3d 20 74 79 70 65 6f 66 28 42 79 74 65 29 29 20  = typeof(Byte)) 
16ee0 72 65 74 75 72 6e 20 47 65 74 42 79 74 65 28 73  return GetByte(s
16ef0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
16f00 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
16f10 20 74 79 70 65 6f 66 28 49 6e 74 31 36 29 29 20   typeof(Int16)) 
16f20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 31 36 28  return GetInt16(
16f30 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
16f40 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
16f50 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 31 36 29  = typeof(UInt16)
16f60 29 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74  ) return GetUInt
16f70 31 36 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  16(stmt, index);
16f80 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
16f90 74 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74 33  t == typeof(Int3
16fa0 32 29 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e  2)) return GetIn
16fb0 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
16fc0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
16fd0 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e  (t == typeof(UIn
16fe0 74 33 32 29 29 20 72 65 74 75 72 6e 20 47 65 74  t32)) return Get
16ff0 55 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64  UInt32(stmt, ind
17000 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
17010 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
17020 55 49 6e 74 36 34 29 29 20 72 65 74 75 72 6e 20  UInt64)) return 
17030 47 65 74 55 49 6e 74 36 34 28 73 74 6d 74 2c 20  GetUInt64(stmt, 
17040 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
17050 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72     return Conver
17060 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65 74  t.ChangeType(Get
17070 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65  Int64(stmt, inde
17080 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20  x), t, null);.. 
17090 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d         default:.
170a0 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
170b0 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20  n GetText(stmt, 
170c0 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d  index);..      }
170d0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
170e0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
170f0 20 69 6e 74 20 47 65 74 43 75 72 73 6f 72 46 6f   int GetCursorFo
17100 72 54 61 62 6c 65 28 53 51 4c 69 74 65 53 74 61  rTable(SQLiteSta
17110 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
17120 20 64 62 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67   db, int rootPag
17130 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  e)..    {..#if !
17140 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
17150 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
17160 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
17170 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  s.sqlite3_table_
17180 63 75 72 73 6f 72 5f 69 6e 74 65 72 6f 70 28 73  cursor_interop(s
17190 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
171a0 2c 20 64 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b  , db, rootPage);
171b0 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
171c0 65 74 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69  eturn -1;..#endi
171d0 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
171e0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
171f0 65 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64 46  e long GetRowIdF
17200 6f 72 43 75 72 73 6f 72 28 53 51 4c 69 74 65 53  orCursor(SQLiteS
17210 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
17220 6e 74 20 63 75 72 73 6f 72 29 0d 0a 20 20 20 20  nt cursor)..    
17230 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
17240 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c  TANDARD..      l
17250 6f 6e 67 20 72 6f 77 69 64 20 3d 20 30 3b 0d 0a  ong rowid = 0;..
17260 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
17270 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
17280 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
17290 71 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f  qlite3_cursor_ro
172a0 77 69 64 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  wid_interop(stmt
172b0 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 63  ._sqlite_stmt, c
172c0 75 72 73 6f 72 2c 20 72 65 66 20 72 6f 77 69 64  ursor, ref rowid
172d0 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63  );..      if (rc
172e0 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
172f0 6f 64 65 2e 4f 6b 29 20 72 65 74 75 72 6e 20 72  ode.Ok) return r
17300 6f 77 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  owid;....      r
17310 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d  eturn 0;..#else.
17320 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b  .      return 0;
17330 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
17340 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
17350 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 47 65  override void Ge
17360 74 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65  tIndexColumnExte
17370 6e 64 65 64 49 6e 66 6f 28 73 74 72 69 6e 67 20  ndedInfo(string 
17380 64 61 74 61 62 61 73 65 2c 20 73 74 72 69 6e 67  database, string
17390 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 63   index, string c
173a0 6f 6c 75 6d 6e 2c 20 72 65 66 20 69 6e 74 20 73  olumn, ref int s
173b0 6f 72 74 4d 6f 64 65 2c 20 72 65 66 20 69 6e 74  ortMode, ref int
173c0 20 6f 6e 45 72 72 6f 72 2c 20 72 65 66 20 73 74   onError, ref st
173d0 72 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65  ring collationSe
173e0 71 75 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d 0a  quence)..    {..
173f0 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
17400 44 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50  DARD..      IntP
17410 74 72 20 63 6f 6c 6c 20 3d 20 49 6e 74 50 74 72  tr coll = IntPtr
17420 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e  .Zero;..      in
17430 74 20 63 6f 6c 6c 6c 65 6e 20 3d 20 30 3b 0d 0a  t colllen = 0;..
17440 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
17450 72 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20  rCode rc;....   
17460 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61     rc = UnsafeNa
17470 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
17480 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e  te3_index_column
17490 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73  _info_interop(_s
174a0 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 62  ql, ToUTF8(datab
174b0 61 73 65 29 2c 20 54 6f 55 54 46 38 28 69 6e 64  ase), ToUTF8(ind
174c0 65 78 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75  ex), ToUTF8(colu
174d0 6d 6e 29 2c 20 72 65 66 20 73 6f 72 74 4d 6f 64  mn), ref sortMod
174e0 65 2c 20 72 65 66 20 6f 6e 45 72 72 6f 72 2c 20  e, ref onError, 
174f0 72 65 66 20 63 6f 6c 6c 2c 20 72 65 66 20 63 6f  ref coll, ref co
17500 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69  lllen);..      i
17510 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45  f (rc != SQLiteE
17520 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
17530 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
17540 65 70 74 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29  eption(rc, null)
17550 3b 0d 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61  ;....      colla
17560 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 55  tionSequence = U
17570 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c  TF8ToString(coll
17580 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c  , colllen);..#el
17590 73 65 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f  se..      sortMo
175a0 64 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f  de = 0;..      o
175b0 6e 45 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20  nError = 2;..   
175c0 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75     collationSequ
175d0 65 6e 63 65 20 3d 20 22 42 49 4e 41 52 59 22 3b  ence = "BINARY";
175e0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
175f0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
17600 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
17610 72 72 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e  rrorCode FileCon
17620 74 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e  trol(string zDbN
17630 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74  ame, int op, Int
17640 50 74 72 20 70 41 72 67 29 0d 0a 20 20 20 20 7b  Ptr pArg)..    {
17650 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
17660 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
17670 64 73 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f  ds.sqlite3_file_
17680 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a  control(_sql, (z
17690 44 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20  DbName != null) 
176a0 3f 20 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65  ? ToUTF8(zDbName
176b0 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41  ) : null, op, pA
176c0 72 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d  rg);..    }..  }
176d0 0d 0a 7d 0d 0a                                   ..}..