System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 71dcc332616e829537167dd6a63cab5bb49c075f:


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 35 2e 30  sion = "1.0.95.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 55  ..    {..      U
2330: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2340: 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  ds.sqlite3_inter
2350: 72 75 70 74 28 5f 73 71 6c 29 3b 0d 0a 20 20 20  rupt(_sql);..   
2360: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
2370: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2380: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 62   This function b
2390: 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65 66 69  inds a user-defi
23a0: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  ned function to 
23b0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  the connection..
23c0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
23d0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
23e0: 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69  ram name="functi
23f0: 6f 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20  onAttribute">.. 
2400: 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
2410: 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63  cref="SQLiteFunc
2420: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f 3e  tionAttribute"/>
2430: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
2440: 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20   containing..   
2450: 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61 74   /// the metadat
2460: 61 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69  a for the functi
2470: 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d  on to be bound..
2480: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
2490: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
24a0: 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e  m name="function
24b0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
24c0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
24d0: 65 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62 6a  eFunction"/> obj
24e0: 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74 68 61  ect instance tha
24f0: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
2500: 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69  ..    /// functi
2510: 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d  on to be bound..
2520: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
2530: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
2540: 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d  m name="flags">.
2550: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61  .    /// The fla
2560: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
2570: 74 68 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f  th the parent co
2580: 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e  nnection object.
2590: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
25a0: 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
25b0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
25c0: 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  indFunction(..  
25d0: 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63        SQLiteFunc
25e0: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 66 75  tionAttribute fu
25f0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c  nctionAttribute,
2600: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
2610: 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  Function functio
2620: 6e 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  n,..        SQLi
2630: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
2640: 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20  s flags..       
2650: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
2660: 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f     SQLiteFunctio
2670: 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 74  n.BindFunction(t
2680: 68 69 73 2c 20 66 75 6e 63 74 69 6f 6e 41 74 74  his, functionAtt
2690: 72 69 62 75 74 65 2c 20 66 75 6e 63 74 69 6f 6e  ribute, function
26a0: 2c 20 66 6c 61 67 73 29 3b 0d 0a 0d 0a 20 20 20  , flags);....   
26b0: 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69       if (_functi
26c0: 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
26d0: 20 20 20 20 20 20 20 20 20 20 5f 66 75 6e 63 74            _funct
26e0: 69 6f 6e 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c  ions = new List<
26f0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 28  SQLiteFunction>(
2700: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 66  );....        _f
2710: 75 6e 63 74 69 6f 6e 73 2e 41 64 64 28 66 75 6e  unctions.Add(fun
2720: 63 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ction);..    }..
2730: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
2740: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 56  verride string V
2750: 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20  ersion..    {.. 
2760: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
2770: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
2780: 6e 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b  n SQLiteVersion;
2790: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
27a0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
27b0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 65   override int Ve
27c0: 72 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20  rsionNumber..   
27d0: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
27e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27f0: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 56 65 72  return SQLiteVer
2800: 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20  sionNumber;..   
2810: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
2820: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
2830: 69 63 20 73 74 72 69 6e 67 20 44 65 66 69 6e 65  ic string Define
2840: 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 7b  Constants..    {
2850: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20  ..        get.. 
2860: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2870: 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c        StringBuil
2880: 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  der result = new
2890: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29   StringBuilder()
28a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ;..            I
28b0: 4c 69 73 74 3c 73 74 72 69 6e 67 3e 20 6c 69 73  List<string> lis
28c0: 74 20 3d 20 53 51 4c 69 74 65 44 65 66 69 6e 65  t = SQLiteDefine
28d0: 43 6f 6e 73 74 61 6e 74 73 2e 4f 70 74 69 6f 6e  Constants.Option
28e0: 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  List;....       
28f0: 20 20 20 20 20 69 66 20 28 6c 69 73 74 20 21 3d       if (list !=
2900: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2910: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2920: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
2930: 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 20 69  string element i
2940: 6e 20 6c 69 73 74 29 0d 0a 20 20 20 20 20 20 20  n list)..       
2950: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2970: 69 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e  if (element == n
2980: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
29a0: 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
29b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
29c0: 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68  f (result.Length
29d0: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29f0: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27  esult.Append(' '
2a00: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2a10: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
2a20: 2e 41 70 70 65 6e 64 28 65 6c 65 6d 65 6e 74 29  .Append(element)
2a30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2a40: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2a50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2a60: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
2a70: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
2a80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
2a90: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
2aa0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c  tatic string SQL
2ab0: 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  iteVersion..    
2ac0: 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20  {..      get..  
2ad0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
2ae0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
2af0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
2b00: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c  ethods.sqlite3_l
2b10: 69 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29  ibversion(), -1)
2b20: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
2b30: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
2b40: 6c 20 73 74 61 74 69 63 20 69 6e 74 20 53 51 4c  l static int SQL
2b50: 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72  iteVersionNumber
2b60: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
2b70: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
2b80: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
2b90: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2ba0: 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
2bb0: 6f 6e 5f 6e 75 6d 62 65 72 28 29 3b 0d 0a 20 20  on_number();..  
2bc0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
2bd0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
2be0: 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74  tic string SQLit
2bf0: 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b  eSourceId..    {
2c00: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
2c10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
2c20: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
2c30: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
2c40: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 6f  thods.sqlite3_so
2c50: 75 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a  urceid(), -1);..
2c60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
2c70: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
2c80: 74 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c  tatic string SQL
2c90: 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e  iteCompileOption
2ca0: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
2cb0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
2cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 74  ..            St
2cd0: 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75  ringBuilder resu
2ce0: 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42  lt = new StringB
2cf0: 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20  uilder();..     
2d00: 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78         int index
2d10: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20   = 0;..         
2d20: 20 20 20 49 6e 74 50 74 72 20 7a 56 61 6c 75 65     IntPtr zValue
2d30: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
2d40: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
2d50: 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
2d60: 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20  (index++);....  
2d70: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
2d80: 28 7a 56 61 6c 75 65 20 21 3d 20 49 6e 74 50 74  (zValue != IntPt
2d90: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
2da0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2db0: 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
2dc0: 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  lt.Length > 0)..
2dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
2df0: 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  d(' ');....     
2e00: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
2e10: 74 2e 41 70 70 65 6e 64 28 55 54 46 38 54 6f 53  t.Append(UTF8ToS
2e20: 74 72 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31  tring(zValue, -1
2e30: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
2e40: 20 20 20 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e       zValue = Un
2e50: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
2e60: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c  s.sqlite3_compil
2e70: 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65  eoption_get(inde
2e80: 78 2b 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  x++);..         
2e90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2ea0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
2eb0: 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  t.ToString();.. 
2ec0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
2ed0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2ee0: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 49 6e  static string In
2ef0: 74 65 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20  teropVersion..  
2f00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
2f10: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
2f20: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
2f30: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  D..            r
2f40: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
2f50: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
2f60: 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 6c  ethods.interop_l
2f70: 69 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29  ibversion(), -1)
2f80: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
2f90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
2fa0: 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  l;..#endif..    
2fb0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
2fc0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
2fd0: 74 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72  tic string Inter
2fe0: 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20  opSourceId..    
2ff0: 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a  {..        get..
3000: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
3010: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
3020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
3030: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
3040: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
3050: 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 73 6f 75  hods.interop_sou
3060: 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 23  rceid(), -1);..#
3070: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
3080: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
3090: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
30a0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
30b0: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
30c0: 73 74 72 69 6e 67 20 49 6e 74 65 72 6f 70 43 6f  string InteropCo
30d0: 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20  mpileOptions..  
30e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
30f0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
3100: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
3110: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  D..            S
3120: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73  tringBuilder res
3130: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
3140: 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20  Builder();..    
3150: 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
3160: 78 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  x = 0;..        
3170: 20 20 20 20 49 6e 74 50 74 72 20 7a 56 61 6c 75      IntPtr zValu
3180: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
3190: 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f  Methods.interop_
31a0: 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
31b0: 74 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20  t(index++);.... 
31c0: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
31d0: 20 28 7a 56 61 6c 75 65 20 21 3d 20 49 6e 74 50   (zValue != IntP
31e0: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
31f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3200: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
3210: 75 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d  ult.Length > 0).
3220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3230: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
3240: 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20  nd(' ');....    
3250: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
3260: 6c 74 2e 41 70 70 65 6e 64 28 55 54 46 38 54 6f  lt.Append(UTF8To
3270: 53 74 72 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d  String(zValue, -
3280: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  1));..          
3290: 20 20 20 20 20 20 7a 56 61 6c 75 65 20 3d 20 55        zValue = U
32a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
32b0: 64 73 2e 69 6e 74 65 72 6f 70 5f 63 6f 6d 70 69  ds.interop_compi
32c0: 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64  leoption_get(ind
32d0: 65 78 2b 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20  ex++);..        
32e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
32f0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
3300: 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  lt.ToString();..
3310: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
3320: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
3330: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
3340: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
3350: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
3360: 64 65 20 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d  de bool AutoComm
3370: 69 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  it..    {..     
3380: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
3390: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 73         return Is
33a0: 41 75 74 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c  Autocommit(_sql,
33b0: 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d   _sql);..      }
33c0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
33d0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
33e0: 20 6c 6f 6e 67 20 4c 61 73 74 49 6e 73 65 72 74   long LastInsert
33f0: 52 6f 77 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20  RowId..    {..  
3400: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
3410: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
3420: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
3430: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
3440: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
3450: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73  hods.sqlite3_las
3460: 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 5f  t_insert_rowid(_
3470: 73 71 6c 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  sql);..#elif !SQ
3480: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
3490: 20 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 49         long rowI
34a0: 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  d = 0;..        
34b0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
34c0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74  ods.sqlite3_last
34d0: 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 5f 69 6e  _insert_rowid_in
34e0: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 72 65 66 20  terop(_sql, ref 
34f0: 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20 20 20  rowId);..       
3500: 20 72 65 74 75 72 6e 20 72 6f 77 49 64 3b 0d 0a   return rowId;..
3510: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74  #else..        t
3520: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
3530: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
3540: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
3550: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
3560: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
3570: 72 69 64 65 20 69 6e 74 20 43 68 61 6e 67 65 73  ride int Changes
3580: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
3590: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66  et..      {..#if
35a0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
35b0: 44 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  D..        retur
35c0: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
35d0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68  thods.sqlite3_ch
35e0: 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70 28 5f 73  anges_interop(_s
35f0: 71 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ql);..#else..   
3600: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
3610: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
3620: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
3630: 5f 73 71 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  _sql);..#endif..
3640: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
3650: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
3660: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d  verride long Mem
3670: 6f 72 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a  oryUsed..    {..
3680: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
3690: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36a0: 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69      return Stati
36b0: 63 4d 65 6d 6f 72 79 55 73 65 64 3b 0d 0a 20 20  cMemoryUsed;..  
36c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
36d0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
36e0: 74 61 74 69 63 20 6c 6f 6e 67 20 53 74 61 74 69  tatic long Stati
36f0: 63 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20  cMemoryUsed..   
3700: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
3710: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
3720: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
3730: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
3740: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
3750: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
3760: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  ds.sqlite3_memor
3770: 79 5f 75 73 65 64 28 29 3b 0d 0a 23 65 6c 69 66  y_used();..#elif
3780: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
3790: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  D..            l
37a0: 6f 6e 67 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a  ong bytes = 0;..
37b0: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
37c0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
37d0: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75  sqlite3_memory_u
37e0: 73 65 64 5f 69 6e 74 65 72 6f 70 28 72 65 66 20  sed_interop(ref 
37f0: 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20  bytes);..       
3800: 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74 65       return byte
3810: 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  s;..#else..     
3820: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
3830: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
3840: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
3850: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
3860: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
3870: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
3880: 6f 6e 67 20 4d 65 6d 6f 72 79 48 69 67 68 77 61  ong MemoryHighwa
3890: 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ter..    {..    
38a0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
38b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
38c0: 72 65 74 75 72 6e 20 53 74 61 74 69 63 4d 65 6d  return StaticMem
38d0: 6f 72 79 48 69 67 68 77 61 74 65 72 3b 0d 0a 20  oryHighwater;.. 
38e0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
38f0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
3900: 73 74 61 74 69 63 20 6c 6f 6e 67 20 53 74 61 74  static long Stat
3910: 69 63 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65  icMemoryHighwate
3920: 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  r..    {..      
3930: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
3940: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
3950: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
3960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
3970: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
3980: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
3990: 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65  _memory_highwate
39a0: 72 28 30 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  r(0);..#elif !SQ
39b0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
39c0: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
39d0: 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20  bytes = 0;..    
39e0: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
39f0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3a00: 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77  te3_memory_highw
3a10: 61 74 65 72 5f 69 6e 74 65 72 6f 70 28 30 2c 20  ater_interop(0, 
3a20: 72 65 66 20 62 79 74 65 73 29 3b 0d 0a 20 20 20  ref bytes);..   
3a30: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3a40: 62 79 74 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20  bytes;..#else.. 
3a50: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
3a60: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
3a70: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
3a80: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
3a90: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
3aa0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3ab0: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
3ac0: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
3ad0: 75 6e 64 65 72 6c 79 69 6e 67 20 6e 61 74 69 76  underlying nativ
3ae0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
3af0: 64 6c 65 20 69 73 20 6f 77 6e 65 64 0d 0a 20 20  dle is owned..  
3b00: 20 20 2f 2f 2f 20 62 79 20 74 68 69 73 20 69 6e    /// by this in
3b10: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f  stance...    ///
3b20: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
3b30: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
3b40: 64 65 20 62 6f 6f 6c 20 4f 77 6e 48 61 6e 64 6c  de bool OwnHandl
3b50: 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  e..    {..      
3b60: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
3b70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
3b80: 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
3b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3ba0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
3bb0: 65 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63  eException("no c
3bc0: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
3bd0: 20 61 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 0d   available");...
3be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
3bf0: 75 72 6e 20 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64  urn _sql.OwnHand
3c00: 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  le;..        }..
3c10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
3c20: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
3c30: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
3c40: 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 62  etMemoryStatus(b
3c50: 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ool value)..    
3c60: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
3c70: 6e 20 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72  n StaticSetMemor
3c80: 79 53 74 61 74 75 73 28 76 61 6c 75 65 29 3b 0d  yStatus(value);.
3c90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
3ca0: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51  ternal static SQ
3cb0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74  LiteErrorCode St
3cc0: 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74 61  aticSetMemorySta
3cd0: 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d  tus(bool value).
3ce0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
3cf0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
3d00: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
3d10: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
3d20: 5f 63 6f 6e 66 69 67 5f 69 6e 74 28 0d 0a 20 20  _config_int(..  
3d30: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
3d40: 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51  ConfigOpsEnum.SQ
3d50: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53  LITE_CONFIG_MEMS
3d60: 54 41 54 55 53 2c 20 76 61 6c 75 65 20 3f 20 31  TATUS, value ? 1
3d70: 20 3a 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   : 0);....      
3d80: 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20    return rc;..  
3d90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
3da0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
3db0: 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 66 72  / Attempts to fr
3dc0: 65 65 20 61 73 20 6d 75 63 68 20 68 65 61 70 20  ee as much heap 
3dd0: 6d 65 6d 6f 72 79 20 61 73 20 70 6f 73 73 69 62  memory as possib
3de0: 6c 65 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  le for the datab
3df0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  ase connection..
3e00: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3e10: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
3e20: 74 75 72 6e 73 3e 41 20 73 74 61 6e 64 61 72 64  turns>A standard
3e30: 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
3e40: 6f 64 65 20 28 69 2e 65 2e 20 7a 65 72 6f 20 66  ode (i.e. zero f
3e50: 6f 72 20 73 75 63 63 65 73 73 20 61 6e 64 20 6e  or success and n
3e60: 6f 6e 2d 7a 65 72 6f 20 66 6f 72 20 66 61 69 6c  on-zero for fail
3e70: 75 72 65 29 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ure).</returns>.
3e80: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
3e90: 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
3ea0: 6f 72 43 6f 64 65 20 52 65 6c 65 61 73 65 4d 65  orCode ReleaseMe
3eb0: 6d 6f 72 79 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  mory()..    {.. 
3ec0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
3ed0: 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61  orCode rc = Unsa
3ee0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
3ef0: 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61  sqlite3_db_relea
3f00: 73 65 5f 6d 65 6d 6f 72 79 28 5f 73 71 6c 29 3b  se_memory(_sql);
3f10: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
3f20: 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   rc;..    }.... 
3f30: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3f40: 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70  ..    /// Attemp
3f50: 74 73 20 74 6f 20 66 72 65 65 20 4e 20 62 79 74  ts to free N byt
3f60: 65 73 20 6f 66 20 68 65 61 70 20 6d 65 6d 6f 72  es of heap memor
3f70: 79 20 62 79 20 64 65 61 6c 6c 6f 63 61 74 69 6e  y by deallocatin
3f80: 67 20 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c 20  g non-essential 
3f90: 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 2f 2f 2f 20  memory..    /// 
3fa0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 68 65 6c 64  allocations held
3fb0: 20 62 79 20 74 68 65 20 64 61 74 61 62 61 73 65   by the database
3fc0: 20 6c 69 62 72 61 72 79 2e 20 4d 65 6d 6f 72 79   library. Memory
3fd0: 20 75 73 65 64 20 74 6f 20 63 61 63 68 65 20 64   used to cache d
3fe0: 61 74 61 62 61 73 65 20 70 61 67 65 73 0d 0a 20  atabase pages.. 
3ff0: 20 20 20 2f 2f 2f 20 74 6f 20 69 6d 70 72 6f 76     /// to improv
4000: 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 73  e performance is
4010: 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20 6e   an example of n
4020: 6f 6e 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65 6d  on-essential mem
4030: 6f 72 79 2e 20 20 54 68 69 73 20 69 73 20 61 20  ory.  This is a 
4040: 6e 6f 2d 6f 70 0d 0a 20 20 20 20 2f 2f 2f 20 72  no-op..    /// r
4050: 65 74 75 72 6e 69 6e 67 20 7a 65 72 6f 20 69 66  eturning zero if
4060: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
4070: 20 6c 69 62 72 61 72 79 20 77 61 73 20 6e 6f 74   library was not
4080: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
4090: 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 0d  he compile-time.
40a0: 0a 20 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e 20  .    /// option 
40b0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
40c0: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2e  MORY_MANAGEMENT.
40d0: 20 20 4f 70 74 69 6f 6e 61 6c 6c 79 2c 20 61 74    Optionally, at
40e0: 74 65 6d 70 74 73 20 74 6f 20 72 65 73 65 74 20  tempts to reset 
40f0: 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20  and/or..    /// 
4100: 63 6f 6d 70 61 63 74 20 74 68 65 20 57 69 6e 33  compact the Win3
4110: 32 20 6e 61 74 69 76 65 20 68 65 61 70 2c 20 69  2 native heap, i
4120: 66 20 61 70 70 6c 69 63 61 62 6c 65 2e 0d 0a 20  f applicable... 
4130: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
4140: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
4150: 6d 20 6e 61 6d 65 3d 22 6e 42 79 74 65 73 22 3e  m name="nBytes">
4160: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 72 65  ..    /// The re
4170: 71 75 65 73 74 65 64 20 6e 75 6d 62 65 72 20 6f  quested number o
4180: 66 20 62 79 74 65 73 20 74 6f 20 66 72 65 65 2e  f bytes to free.
4190: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
41a0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
41b0: 61 6d 20 6e 61 6d 65 3d 22 72 65 73 65 74 22 3e  am name="reset">
41c0: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
41d0: 72 6f 20 74 6f 20 61 74 74 65 6d 70 74 20 61 20  ro to attempt a 
41e0: 68 65 61 70 20 72 65 73 65 74 2e 0d 0a 20 20 20  heap reset...   
41f0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
4200: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
4210: 6d 65 3d 22 63 6f 6d 70 61 63 74 22 3e 0d 0a 20  me="compact">.. 
4220: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
4230: 74 6f 20 61 74 74 65 6d 70 74 20 68 65 61 70 20  to attempt heap 
4240: 63 6f 6d 70 61 63 74 69 6f 6e 2e 0d 0a 20 20 20  compaction...   
4250: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
4260: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
4270: 6d 65 3d 22 6e 46 72 65 65 22 3e 0d 0a 20 20 20  me="nFree">..   
4280: 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
4290: 6f 66 20 62 79 74 65 73 20 61 63 74 75 61 6c 6c  of bytes actuall
42a0: 79 20 66 72 65 65 64 2e 20 20 54 68 69 73 20 76  y freed.  This v
42b0: 61 6c 75 65 20 6d 61 79 20 62 65 20 7a 65 72 6f  alue may be zero
42c0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
42d0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
42e0: 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73 65 74 4f  ram name="resetO
42f0: 6b 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  k">..    /// Thi
4300: 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  s value will be 
4310: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
4320: 68 65 61 70 20 72 65 73 65 74 20 77 61 73 20 73  heap reset was s
4330: 75 63 63 65 73 73 66 75 6c 2e 0d 0a 20 20 20 20  uccessful...    
4340: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
4350: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4360: 65 3d 22 6e 4c 61 72 67 65 73 74 22 3e 0d 0a 20  e="nLargest">.. 
4370: 20 20 20 2f 2f 2f 20 54 68 65 20 73 69 7a 65 20     /// The size 
4380: 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 63  of the largest c
4390: 6f 6d 6d 69 74 74 65 64 20 66 72 65 65 20 62 6c  ommitted free bl
43a0: 6f 63 6b 20 69 6e 20 74 68 65 20 68 65 61 70 2c  ock in the heap,
43b0: 20 69 6e 20 62 79 74 65 73 2e 0d 0a 20 20 20 20   in bytes...    
43c0: 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20 77  /// This value w
43d0: 69 6c 6c 20 62 65 20 7a 65 72 6f 20 75 6e 6c 65  ill be zero unle
43e0: 73 73 20 68 65 61 70 20 63 6f 6d 70 61 63 74 69  ss heap compacti
43f0: 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0d 0a  on is enabled...
4400: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
4410: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
4420: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73  ns>..    /// A s
4430: 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
4440: 65 74 75 72 6e 20 63 6f 64 65 20 28 69 2e 65 2e  eturn code (i.e.
4450: 20 7a 65 72 6f 20 66 6f 72 20 73 75 63 63 65 73   zero for succes
4460: 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 0d 0a  s and non-zero..
4470: 20 20 20 20 2f 2f 2f 20 66 6f 72 20 66 61 69 6c      /// for fail
4480: 75 72 65 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ure)...    /// <
4490: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
44a0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53  nternal static S
44b0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
44c0: 74 61 74 69 63 52 65 6c 65 61 73 65 4d 65 6d 6f  taticReleaseMemo
44d0: 72 79 28 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ry(..        int
44e0: 20 6e 42 79 74 65 73 2c 0d 0a 20 20 20 20 20 20   nBytes,..      
44f0: 20 20 62 6f 6f 6c 20 72 65 73 65 74 2c 0d 0a 20    bool reset,.. 
4500: 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70         bool comp
4510: 61 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  act,..        re
4520: 66 20 69 6e 74 20 6e 46 72 65 65 2c 0d 0a 20 20  f int nFree,..  
4530: 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 72        ref bool r
4540: 65 73 65 74 4f 6b 2c 0d 0a 20 20 20 20 20 20 20  esetOk,..       
4550: 20 72 65 66 20 75 69 6e 74 20 6e 4c 61 72 67 65   ref uint nLarge
4560: 73 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  st..        ).. 
4570: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
4580: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
4590: 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f   = SQLiteErrorCo
45a0: 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20  de.Ok;....      
45b0: 20 20 69 6e 74 20 6e 46 72 65 65 4c 6f 63 61 6c    int nFreeLocal
45c0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
45d0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
45e0: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 6e 42  elease_memory(nB
45f0: 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  ytes);..        
4600: 75 69 6e 74 20 6e 4c 61 72 67 65 73 74 4c 6f 63  uint nLargestLoc
4610: 61 6c 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  al = 0;..       
4620: 20 62 6f 6f 6c 20 72 65 73 65 74 4f 6b 4c 6f 63   bool resetOkLoc
4630: 61 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23  al = false;....#
4640: 69 66 20 21 44 45 42 55 47 20 26 26 20 57 49 4e  if !DEBUG && WIN
4650: 44 4f 57 53 20 2f 2f 20 4e 4f 54 45 3a 20 53 68  DOWS // NOTE: Sh
4660: 6f 75 6c 64 20 62 65 20 22 57 49 4e 33 32 48 45  ould be "WIN32HE
4670: 41 50 20 26 26 20 21 4d 45 4d 44 45 42 55 47 20  AP && !MEMDEBUG 
4680: 26 26 20 57 49 4e 44 4f 57 53 22 0d 0a 20 20 20  && WINDOWS"..   
4690: 20 20 20 20 20 69 66 20 28 28 72 63 20 3d 3d 20       if ((rc == 
46a0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
46b0: 4f 6b 29 20 26 26 20 72 65 73 65 74 29 0d 0a 20  Ok) && reset).. 
46c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
46d0: 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66        rc = Unsaf
46e0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
46f0: 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 72 65 73  qlite3_win32_res
4700: 65 74 5f 68 65 61 70 28 29 3b 0d 0a 0d 0a 20 20  et_heap();....  
4710: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
4720: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
4730: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
4740: 20 20 20 20 20 20 20 20 20 72 65 73 65 74 4f 6b           resetOk
4750: 4c 6f 63 61 6c 20 3d 20 74 72 75 65 3b 0d 0a 20  Local = true;.. 
4760: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4770: 20 20 20 20 69 66 20 28 28 72 63 20 3d 3d 20 53      if ((rc == S
4780: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
4790: 6b 29 20 26 26 20 63 6f 6d 70 61 63 74 29 0d 0a  k) && compact)..
47a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
47b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
47c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e  hods.sqlite3_win
47d0: 33 32 5f 63 6f 6d 70 61 63 74 5f 68 65 61 70 28  32_compact_heap(
47e0: 72 65 66 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61  ref nLargestLoca
47f0: 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  l);..#else..    
4800: 20 20 20 20 69 66 20 28 72 65 73 65 74 20 7c 7c      if (reset ||
4810: 20 63 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20   compact)..     
4820: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 69         rc = SQLi
4830: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f 74 46  teErrorCode.NotF
4840: 6f 75 6e 64 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ound;..#endif...
4850: 0a 20 20 20 20 20 20 20 20 6e 46 72 65 65 20 3d  .        nFree =
4860: 20 6e 46 72 65 65 4c 6f 63 61 6c 3b 0d 0a 20 20   nFreeLocal;..  
4870: 20 20 20 20 20 20 6e 4c 61 72 67 65 73 74 20 3d        nLargest =
4880: 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c 3b 0d   nLargestLocal;.
4890: 0a 20 20 20 20 20 20 20 20 72 65 73 65 74 4f 6b  .        resetOk
48a0: 20 3d 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 3b   = resetOkLocal;
48b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
48c0: 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  rn rc;..    }...
48d0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
48e0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74  y>..    /// Shut
48f0: 64 6f 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20  down the SQLite 
4900: 65 6e 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69  engine so that i
4910: 74 20 63 61 6e 20 62 65 20 72 65 73 74 61 72 74  t can be restart
4920: 65 64 20 77 69 74 68 20 64 69 66 66 65 72 65 6e  ed with differen
4930: 74 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69  t..    /// confi
4940: 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  guration options
4950: 2e 20 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20  .  We depend on 
4960: 61 75 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74  auto initializat
4970: 69 6f 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d  ion to recover..
4980: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
4990: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
49a0: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20  turns>Returns a 
49b0: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
49c0: 72 65 73 75 6c 74 20 63 6f 64 65 2e 3c 2f 72 65  result code.</re
49d0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
49e0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
49f0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 68  LiteErrorCode Sh
4a00: 75 74 64 6f 77 6e 28 29 0d 0a 20 20 20 20 7b 0d  utdown()..    {.
4a10: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4a20: 53 74 61 74 69 63 53 68 75 74 64 6f 77 6e 28 66  StaticShutdown(f
4a30: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  alse);..    }...
4a40: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
4a50: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74  y>..    /// Shut
4a60: 64 6f 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20  down the SQLite 
4a70: 65 6e 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69  engine so that i
4a80: 74 20 63 61 6e 20 62 65 20 72 65 73 74 61 72 74  t can be restart
4a90: 65 64 20 77 69 74 68 20 64 69 66 66 65 72 65 6e  ed with differen
4aa0: 74 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69  t..    /// confi
4ab0: 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  guration options
4ac0: 2e 20 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20  .  We depend on 
4ad0: 61 75 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74  auto initializat
4ae0: 69 6f 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d  ion to recover..
4af0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
4b00: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
4b10: 72 61 6d 20 6e 61 6d 65 3d 22 64 69 72 65 63 74  ram name="direct
4b20: 6f 72 69 65 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f  ories">..    ///
4b30: 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 72 65 73   Non-zero to res
4b40: 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
4b50: 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69  and temporary di
4b60: 72 65 63 74 6f 72 69 65 73 20 74 6f 20 74 68 65  rectories to the
4b70: 69 72 0d 0a 20 20 20 20 2f 2f 2f 20 64 65 66 61  ir..    /// defa
4b80: 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63  ult values, whic
4b90: 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c  h should be null
4ba0: 20 66 6f 72 20 62 6f 74 68 2e 20 20 54 68 69 73   for both.  This
4bb0: 20 70 61 72 61 6d 65 74 65 72 20 68 61 73 20 6e   parameter has n
4bc0: 6f 0d 0a 20 20 20 20 2f 2f 2f 20 65 66 66 65 63  o..    /// effec
4bd0: 74 20 6f 6e 20 6e 6f 6e 2d 57 69 6e 64 6f 77 73  t on non-Windows
4be0: 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65   operating syste
4bf0: 6d 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ms...    /// </p
4c00: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
4c10: 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20  returns>Returns 
4c20: 61 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  a standard SQLit
4c30: 65 20 72 65 73 75 6c 74 20 63 6f 64 65 2e 3c 2f  e result code.</
4c40: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
4c50: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51  ternal static SQ
4c60: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74  LiteErrorCode St
4c70: 61 74 69 63 53 68 75 74 64 6f 77 6e 28 0d 0a 20  aticShutdown(.. 
4c80: 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 65         bool dire
4c90: 63 74 6f 72 69 65 73 0d 0a 20 20 20 20 20 20 20  ctories..       
4ca0: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
4cb0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
4cc0: 64 65 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72  de rc = SQLiteEr
4cd0: 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20  rorCode.Ok;.... 
4ce0: 20 20 20 20 20 20 20 69 66 20 28 64 69 72 65 63         if (direc
4cf0: 74 6f 72 69 65 73 29 0d 0a 20 20 20 20 20 20 20  tories)..       
4d00: 20 7b 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d   {..#if WINDOWS.
4d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4d20: 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  (rc == SQLiteErr
4d30: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
4d40: 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
4d50: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4d60: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e  hods.sqlite3_win
4d70: 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79  32_set_directory
4d80: 28 31 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20  (1, null);....  
4d90: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
4da0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
4db0: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
4dc0: 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e           rc = Un
4dd0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4de0: 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  s.sqlite3_win32_
4df0: 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 32 2c  set_directory(2,
4e00: 20 6e 75 6c 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a   null);..#else..
4e10: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
4e20: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
4e30: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
4e40: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
4e50: 4c 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Line(..         
4e60: 20 20 20 20 20 20 20 22 53 68 75 74 64 6f 77 6e         "Shutdown
4e70: 3a 20 43 61 6e 6e 6f 74 20 72 65 73 65 74 20 64  : Cannot reset d
4e80: 69 72 65 63 74 6f 72 69 65 73 20 6f 6e 20 74 68  irectories on th
4e90: 69 73 20 70 6c 61 74 66 6f 72 6d 2e 22 29 3b 0d  is platform.");.
4ea0: 0a 23 65 6e 64 69 66 0d 0a 23 65 6e 64 69 66 0d  .#endif..#endif.
4eb0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
4ec0: 20 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20        if (rc == 
4ed0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
4ee0: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
4ef0: 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
4f00: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4f10: 33 5f 73 68 75 74 64 6f 77 6e 28 29 3b 0d 0a 0d  3_shutdown();...
4f20: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4f30: 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  rc;..    }....  
4f40: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
4f50: 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69  .    /// Determi
4f60: 6e 65 73 20 69 66 20 74 68 65 20 61 73 73 6f 63  nes if the assoc
4f70: 69 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f 6e  iated native con
4f80: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69  nection handle i
4f90: 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  s open...    ///
4fa0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
4fb0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
4fc0: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
4fd0: 20 69 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   if the associat
4fe0: 65 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63  ed native connec
4ff0: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f  tion handle is o
5000: 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  pen...    /// </
5010: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
5020: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5030: 62 6f 6f 6c 20 49 73 4f 70 65 6e 28 29 0d 0a 20  bool IsOpen().. 
5040: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
5050: 74 75 72 6e 20 28 5f 73 71 6c 20 21 3d 20 6e 75  turn (_sql != nu
5060: 6c 6c 29 20 26 26 20 21 5f 73 71 6c 2e 49 73 49  ll) && !_sql.IsI
5070: 6e 76 61 6c 69 64 20 26 26 20 21 5f 73 71 6c 2e  nvalid && !_sql.
5080: 49 73 43 6c 6f 73 65 64 3b 0d 0a 20 20 20 20 7d  IsClosed;..    }
5090: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
50a0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4f   override void O
50b0: 70 65 6e 28 73 74 72 69 6e 67 20 73 74 72 46 69  pen(string strFi
50c0: 6c 65 6e 61 6d 65 2c 20 53 51 4c 69 74 65 43 6f  lename, SQLiteCo
50d0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f  nnectionFlags co
50e0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53  nnectionFlags, S
50f0: 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e  QLiteOpenFlagsEn
5100: 75 6d 20 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e  um openFlags, in
5110: 74 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62  t maxPoolSize, b
5120: 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29 0d 0a 20 20  ool usePool)..  
5130: 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20    {..      //.. 
5140: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
5150: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
5160: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72  nnection is curr
5170: 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 61 74 74 65  ently open, atte
5180: 6d 70 74 20 74 6f 0d 0a 20 20 20 20 20 20 2f 2f  mpt to..      //
5190: 20 20 20 20 20 20 20 63 6c 6f 73 65 20 69 74 20         close it 
51a0: 6e 6f 77 2e 20 20 54 68 69 73 20 6d 75 73 74 20  now.  This must 
51b0: 62 65 20 64 6f 6e 65 20 62 65 63 61 75 73 65 20  be done because 
51c0: 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72  the file name or
51d0: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
51e0: 20 6f 74 68 65 72 20 70 61 72 61 6d 65 74 65 72   other parameter
51f0: 73 20 74 68 61 74 20 6d 61 79 20 69 6d 70 61 63  s that may impac
5200: 74 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  t the underlying
5210: 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20   database..     
5220: 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 6e 65 63   //       connec
5230: 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63 68  tion may have ch
5240: 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f  anged...      //
5250: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c  ..      if (_sql
5260: 20 21 3d 20 6e 75 6c 6c 29 20 43 6c 6f 73 65 28   != null) Close(
5270: 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  true);....      
5280: 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54  //..      // NOT
5290: 45 3a 20 49 66 20 74 68 65 20 63 6f 6e 6e 65 63  E: If the connec
52a0: 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 63 6c 6f  tion was not clo
52b0: 73 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c 79  sed successfully
52c0: 2c 20 74 68 72 6f 77 20 61 6e 0d 0a 20 20 20 20  , throw an..    
52d0: 20 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70    //       excep
52e0: 74 69 6f 6e 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  tion now...     
52f0: 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f   //..      if (_
5300: 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql != null)..  
5310: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
5320: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
5330: 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  n("connection ha
5340: 6e 64 6c 65 20 69 73 20 73 74 69 6c 6c 20 61 63  ndle is still ac
5350: 74 69 76 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tive");....     
5360: 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 75 73 65 50   _usePool = useP
5370: 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 5f 66 69 6c  ool;..      _fil
5380: 65 4e 61 6d 65 20 3d 20 73 74 72 46 69 6c 65 6e  eName = strFilen
5390: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ame;....      if
53a0: 20 28 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20   (usePool)..    
53b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 73 71    {..        _sq
53c0: 6c 20 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  l = SQLiteConnec
53d0: 74 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28  tionPool.Remove(
53e0: 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61 78  strFilename, max
53f0: 50 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f 70  PoolSize, out _p
5400: 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a  oolVersion);....
5410: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
5420: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
5430: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
5440: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
5450: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
5460: 4f 70 65 6e 20 28 50 6f 6f 6c 29 3a 20 7b 30 7d  Open (Pool): {0}
5470: 22 2c 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c  ", (_sql != null
5480: 29 20 3f 20 5f 73 71 6c 2e 54 6f 53 74 72 69 6e  ) ? _sql.ToStrin
5490: 67 28 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29  g() : "<null>"))
54a0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
54b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28   }....      if (
54c0: 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
54d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
54e0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
54f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
5500: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
5510: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
5520: 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20  inally /* NOTE: 
5530: 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70  Thread.Abort() p
5540: 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20  rotection. */.. 
5550: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5560: 20 20 20 20 49 6e 74 50 74 72 20 64 62 20 3d 20      IntPtr db = 
5570: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
5580: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
5590: 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69  rorCode n;....#i
55a0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
55b0: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  RD..          if
55c0: 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61   ((connectionFla
55d0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
55e0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78 74  ctionFlags.NoExt
55f0: 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 29  ensionFunctions)
5600: 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   != SQLiteConnec
5610: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65  tionFlags.NoExte
5620: 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 0d  nsionFunctions).
5630: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
5640: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
5650: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5660: 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69  s.sqlite3_open_i
5670: 6e 74 65 72 6f 70 28 54 6f 55 54 46 38 28 73 74  nterop(ToUTF8(st
5680: 72 46 69 6c 65 6e 61 6d 65 29 2c 20 6f 70 65 6e  rFilename), open
5690: 46 6c 61 67 73 2c 20 72 65 66 20 64 62 29 3b 0d  Flags, ref db);.
56a0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
56b0: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65          else..#e
56c0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
56d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  {..            n
56e0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
56f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f  ethods.sqlite3_o
5700: 70 65 6e 5f 76 32 28 54 6f 55 54 46 38 28 73 74  pen_v2(ToUTF8(st
5710: 72 46 69 6c 65 6e 61 6d 65 29 2c 20 72 65 66 20  rFilename), ref 
5720: 64 62 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 49  db, openFlags, I
5730: 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
5740: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66          }....#if
5750: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
5760: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
5770: 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
5780: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
5790: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 4f  String.Format("O
57a0: 70 65 6e 3a 20 7b 30 7d 22 2c 20 64 62 29 29 3b  pen: {0}", db));
57b0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
57c0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
57d0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
57e0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
57f0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
5800: 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  null);..        
5810: 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c    _sql = new SQL
5820: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
5830: 64 6c 65 28 64 62 2c 20 74 72 75 65 29 3b 0d 0a  dle(db, true);..
5840: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5850: 20 20 20 6c 6f 63 6b 20 28 5f 73 71 6c 29 20 7b     lock (_sql) {
5860: 20 2f 2a 20 48 41 43 4b 3a 20 46 6f 72 63 65 20   /* HACK: Force 
5870: 74 68 65 20 53 79 6e 63 42 6c 6f 63 6b 20 74 6f  the SyncBlock to
5880: 20 62 65 20 22 63 72 65 61 74 65 64 22 20 6e 6f   be "created" no
5890: 77 2e 20 2a 2f 20 7d 0d 0a 0d 0a 20 20 20 20 20  w. */ }....     
58a0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
58b0: 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75  ion.OnChanged(nu
58c0: 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69  ll, new Connecti
58d0: 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  onEventArgs(..  
58e0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
58f0: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
5900: 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48  ype.NewCriticalH
5910: 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c  andle, null, nul
5920: 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
5930: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c  null, null, _sql
5940: 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6e  , strFilename, n
5950: 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 20 73 74  ew object[] { st
5960: 72 46 69 6c 65 6e 61 6d 65 2c 0d 0a 20 20 20 20  rFilename,..    
5970: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
5980: 6f 6e 46 6c 61 67 73 2c 20 6f 70 65 6e 46 6c 61  onFlags, openFla
5990: 67 73 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c  gs, maxPoolSize,
59a0: 20 75 73 65 50 6f 6f 6c 20 7d 29 29 3b 0d 0a 20   usePool }));.. 
59b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
59c0: 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e  // Bind function
59d0: 73 20 74 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63  s to this connec
59e0: 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79 20 70 72  tion.  If any pr
59f0: 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73  evious functions
5a00: 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d   of the same nam
5a10: 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77 65 72 65  e..      // were
5a20: 20 61 6c 72 65 61 64 79 20 62 6f 75 6e 64 2c 20   already bound, 
5a30: 74 68 65 6e 20 74 68 65 20 6e 65 77 20 62 69 6e  then the new bin
5a40: 64 69 6e 67 73 20 72 65 70 6c 61 63 65 20 74 68  dings replace th
5a50: 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20 20 69 66  e old...      if
5a60: 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61   ((connectionFla
5a70: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
5a80: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e  ctionFlags.NoBin
5a90: 64 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53  dFunctions) != S
5aa0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5ab0: 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75 6e 63 74  lags.NoBindFunct
5ac0: 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  ions)..      {..
5ad0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 66            if (_f
5ae0: 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  unctions == null
5af0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5b00: 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65   _functions = ne
5b10: 77 20 4c 69 73 74 3c 53 51 4c 69 74 65 46 75 6e  w List<SQLiteFun
5b20: 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20  ction>();....   
5b30: 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e         _function
5b40: 73 2e 41 64 64 52 61 6e 67 65 28 6e 65 77 20 4c  s.AddRange(new L
5b50: 69 73 74 3c 53 51 4c 69 74 65 46 75 6e 63 74 69  ist<SQLiteFuncti
5b60: 6f 6e 3e 28 53 51 4c 69 74 65 46 75 6e 63 74 69  on>(SQLiteFuncti
5b70: 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73  on.BindFunctions
5b80: 28 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f  (this, connectio
5b90: 6e 46 6c 61 67 73 29 29 29 3b 0d 0a 20 20 20 20  nFlags)));..    
5ba0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 53 65 74    }....      Set
5bb0: 54 69 6d 65 6f 75 74 28 30 29 3b 0d 0a 20 20 20  Timeout(0);..   
5bc0: 20 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65 28     GC.KeepAlive(
5bd0: 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  _sql);..    }...
5be0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
5bf0: 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c 65 61  erride void Clea
5c00: 72 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a  rPool()..    {..
5c10: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
5c20: 65 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72  ectionPool.Clear
5c30: 50 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b  Pool(_fileName);
5c40: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
5c50: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
5c60: 20 69 6e 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29   int CountPool()
5c70: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
5c80: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
5c90: 6e 67 2c 20 69 6e 74 3e 20 63 6f 75 6e 74 73 20  ng, int> counts 
5ca0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
5cb0: 20 69 6e 74 20 6f 70 65 6e 43 6f 75 6e 74 20 3d   int openCount =
5cc0: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74   0;..        int
5cd0: 20 63 6c 6f 73 65 43 6f 75 6e 74 20 3d 20 30 3b   closeCount = 0;
5ce0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 74 6f  ..        int to
5cf0: 74 61 6c 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d  talCount = 0;...
5d00: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43  .        SQLiteC
5d10: 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65  onnectionPool.Ge
5d20: 74 43 6f 75 6e 74 73 28 5f 66 69 6c 65 4e 61 6d  tCounts(_fileNam
5d30: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
5d40: 72 65 66 20 63 6f 75 6e 74 73 2c 20 72 65 66 20  ref counts, ref 
5d50: 6f 70 65 6e 43 6f 75 6e 74 2c 20 72 65 66 20 63  openCount, ref c
5d60: 6c 6f 73 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  loseCount,..    
5d70: 20 20 20 20 20 20 20 20 72 65 66 20 74 6f 74 61          ref tota
5d80: 6c 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  lCount);....    
5d90: 20 20 20 20 72 65 74 75 72 6e 20 74 6f 74 61 6c      return total
5da0: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Count;..    }...
5db0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
5dc0: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54  erride void SetT
5dd0: 69 6d 65 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65  imeout(int nTime
5de0: 6f 75 74 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a 20  outMS)..    {.. 
5df0: 20 20 20 20 20 49 6e 74 50 74 72 20 64 62 20 3d       IntPtr db =
5e00: 20 5f 73 71 6c 3b 0d 0a 20 20 20 20 20 20 69 66   _sql;..      if
5e10: 20 28 64 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a   (db == IntPtr.Z
5e20: 65 72 6f 29 20 74 68 72 6f 77 20 6e 65 77 20 53  ero) throw new S
5e30: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
5e40: 6e 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  no connection ha
5e50: 6e 64 6c 65 20 61 76 61 69 6c 61 62 6c 65 22 29  ndle available")
5e60: 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  ;..      SQLiteE
5e70: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
5e80: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5e90: 2e 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69  .sqlite3_busy_ti
5ea0: 6d 65 6f 75 74 28 64 62 2c 20 6e 54 69 6d 65 6f  meout(db, nTimeo
5eb0: 75 74 4d 53 29 3b 0d 0a 20 20 20 20 20 20 69 66  utMS);..      if
5ec0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
5ed0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
5ee0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
5ef0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
5f00: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
5f10: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
5f20: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53 74  override bool St
5f30: 65 70 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ep(SQLiteStateme
5f40: 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d  nt stmt)..    {.
5f50: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
5f60: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20  orCode n;..     
5f70: 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75   Random rnd = nu
5f80: 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20  ll;..      uint 
5f90: 73 74 61 72 74 74 69 63 6b 20 3d 20 28 75 69 6e  starttick = (uin
5fa0: 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69  t)Environment.Ti
5fb0: 63 6b 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20  ckCount;..      
5fc0: 75 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28  uint timeout = (
5fd0: 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d  uint)(stmt._comm
5fe0: 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65  and._commandTime
5ff0: 6f 75 74 20 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a  out * 1000);....
6000: 20 20 20 20 20 20 77 68 69 6c 65 20 28 74 72 75        while (tru
6010: 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  e)..      {..   
6020: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
6030: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6040: 69 74 65 33 5f 73 74 65 70 28 73 74 6d 74 2e 5f  ite3_step(stmt._
6050: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 0d  sqlite_stmt);...
6060: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d  .        if (n =
6070: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
6080: 65 2e 52 6f 77 29 20 72 65 74 75 72 6e 20 74 72  e.Row) return tr
6090: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ue;..        if 
60a0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
60b0: 72 43 6f 64 65 2e 44 6f 6e 65 29 20 72 65 74 75  rCode.Done) retu
60c0: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
60d0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
60e0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
60f0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
6100: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
6110: 72 6f 72 43 6f 64 65 20 72 3b 0d 0a 0d 0a 20 20  rorCode r;....  
6120: 20 20 20 20 20 20 20 20 2f 2f 20 41 6e 20 65 72          // An er
6130: 72 6f 72 20 6f 63 63 75 72 72 65 64 2c 20 61 74  ror occurred, at
6140: 74 65 6d 70 74 20 74 6f 20 72 65 73 65 74 20 74  tempt to reset t
6150: 68 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  he statement.  I
6160: 66 20 74 68 65 20 72 65 73 65 74 20 77 6f 72 6b  f the reset work
6170: 65 64 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a  ed because the..
6180: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 73 63 68            // sch
6190: 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 2c  ema has changed,
61a0: 20 72 65 2d 74 72 79 20 74 68 65 20 73 74 65 70   re-try the step
61b0: 20 61 67 61 69 6e 2e 20 20 49 66 20 69 74 20 65   again.  If it e
61c0: 72 72 6f 72 65 64 20 6f 75 72 20 62 65 63 61 75  rrored our becau
61d0: 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 0d  se the database.
61e0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 69 73  .          // is
61f0: 20 6c 6f 63 6b 65 64 2c 20 74 68 65 6e 20 6b 65   locked, then ke
6200: 65 70 20 72 65 74 72 79 69 6e 67 20 75 6e 74 69  ep retrying unti
6210: 6c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 69  l the command ti
6220: 6d 65 6f 75 74 20 6f 63 63 75 72 73 2e 0d 0a 20  meout occurs... 
6230: 20 20 20 20 20 20 20 20 20 72 20 3d 20 52 65 73           r = Res
6240: 65 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20  et(stmt);....   
6250: 20 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d 20         if (r == 
6260: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
6270: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
6280: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
6290: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
62a0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
62b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
62c0: 20 69 66 20 28 28 72 20 3d 3d 20 53 51 4c 69 74   if ((r == SQLit
62d0: 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65  eErrorCode.Locke
62e0: 64 20 7c 7c 20 72 20 3d 3d 20 53 51 4c 69 74 65  d || r == SQLite
62f0: 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20  ErrorCode.Busy) 
6300: 26 26 20 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64  && stmt._command
6310: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
6320: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6330: 20 20 20 20 2f 2f 20 4b 65 65 70 20 74 72 79 69      // Keep tryi
6340: 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng..            
6350: 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29  if (rnd == null)
6360: 20 2f 2f 20 46 69 72 73 74 20 74 69 6d 65 20 77   // First time w
6370: 65 27 76 65 20 65 6e 63 6f 75 6e 74 65 72 65 64  e've encountered
6380: 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20   the lock..     
6390: 20 20 20 20 20 20 20 20 20 72 6e 64 20 3d 20 6e           rnd = n
63a0: 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a  ew Random();....
63b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49              // I
63c0: 66 20 77 65 27 76 65 20 65 78 63 65 65 64 65 64  f we've exceeded
63d0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74   the command's t
63e0: 69 6d 65 6f 75 74 2c 20 67 69 76 65 20 75 70 20  imeout, give up 
63f0: 61 6e 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72  and throw an err
6400: 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
6410: 69 66 20 28 28 75 69 6e 74 29 45 6e 76 69 72 6f  if ((uint)Enviro
6420: 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20  nment.TickCount 
6430: 2d 20 73 74 61 72 74 74 69 63 6b 20 3e 20 74 69  - starttick > ti
6440: 6d 65 6f 75 74 29 0d 0a 20 20 20 20 20 20 20 20  meout)..        
6450: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6460: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
6470: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72  QLiteException(r
6480: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
6490: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
64a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
64b0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
64c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
64d0: 20 20 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73    // Otherwise s
64e0: 6c 65 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f  leep for a rando
64f0: 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65  m amount of time
6500: 20 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20   up to 150ms..  
6510: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
6520: 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72  em.Threading.Thr
6530: 65 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65  ead.Sleep(rnd.Ne
6540: 78 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20  xt(1, 150));..  
6550: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6560: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6570: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
6580: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
6590: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
65a0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73  iteErrorCode Res
65b0: 65 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  et(SQLiteStateme
65c0: 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d  nt stmt)..    {.
65d0: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
65e0: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66  orCode n;....#if
65f0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
6600: 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  D..      n = Uns
6610: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6620: 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69  .sqlite3_reset_i
6630: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
6640: 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73  ite_stmt);..#els
6650: 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  e..      n = Uns
6660: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6670: 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73  .sqlite3_reset(s
6680: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
6690: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
66a0: 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20 73 63      // If the sc
66b0: 68 65 6d 61 20 63 68 61 6e 67 65 64 2c 20 74 72  hema changed, tr
66c0: 79 20 61 6e 64 20 72 65 2d 70 72 65 70 61 72 65  y and re-prepare
66d0: 20 69 74 0d 0a 20 20 20 20 20 20 69 66 20 28 6e   it..      if (n
66e0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
66f0: 6f 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20  ode.Schema)..   
6700: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
6710: 20 52 65 63 72 65 61 74 65 20 61 20 64 75 6d 6d   Recreate a dumm
6720: 79 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20  y statement..   
6730: 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 20       string str 
6740: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
6750: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 53 74   using (SQLiteSt
6760: 61 74 65 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72  atement tmp = Pr
6770: 65 70 61 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74  epare(null, stmt
6780: 2e 5f 73 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20  ._sqlStatement, 
6790: 6e 75 6c 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d  null, (uint)(stm
67a0: 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d  t._command._comm
67b0: 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30  andTimeout * 100
67c0: 30 29 2c 20 72 65 66 20 73 74 72 29 29 0d 0a 20  0), ref str)).. 
67d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
67e0: 20 20 20 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20      // Finalize 
67f0: 74 68 65 20 65 78 69 73 74 69 6e 67 20 73 74 61  the existing sta
6800: 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  tement..        
6810: 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73    stmt._sqlite_s
6820: 74 6d 74 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a  tmt.Dispose();..
6830: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61            // Rea
6840: 73 73 69 67 6e 20 61 20 6e 65 77 20 73 74 61 74  ssign a new stat
6850: 65 6d 65 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f  ement pointer to
6860: 20 74 68 65 20 6f 6c 64 20 73 74 61 74 65 6d 65   the old stateme
6870: 6e 74 20 61 6e 64 20 63 6c 65 61 72 20 74 68 65  nt and clear the
6880: 20 74 65 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a   temporary one..
6890: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f            stmt._
68a0: 73 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20 74 6d  sqlite_stmt = tm
68b0: 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  p._sqlite_stmt;.
68c0: 0a 20 20 20 20 20 20 20 20 20 20 74 6d 70 2e 5f  .          tmp._
68d0: 73 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20 6e 75  sqlite_stmt = nu
68e0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
68f0: 20 2f 2f 20 52 65 61 70 70 6c 79 20 70 61 72 61   // Reapply para
6900: 6d 65 74 65 72 73 0d 0a 20 20 20 20 20 20 20 20  meters..        
6910: 20 20 73 74 6d 74 2e 42 69 6e 64 50 61 72 61 6d    stmt.BindParam
6920: 65 74 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20  eters();..      
6930: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74    }..        ret
6940: 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
6950: 6f 64 65 2e 55 6e 6b 6e 6f 77 6e 3b 20 2f 2f 20  ode.Unknown; // 
6960: 52 65 73 65 74 20 77 61 73 20 4f 4b 2c 20 77 69  Reset was OK, wi
6970: 74 68 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  th schema change
6980: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
6990: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
69a0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c  QLiteErrorCode.L
69b0: 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51  ocked || n == SQ
69c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75  LiteErrorCode.Bu
69d0: 73 79 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74  sy)..        ret
69e0: 75 72 6e 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  urn n;....      
69f0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
6a00: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
6a10: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
6a20: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
6a30: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
6a40: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  ));....      ret
6a50: 75 72 6e 20 6e 3b 20 2f 2f 20 57 65 20 72 65 73  urn n; // We res
6a60: 65 74 20 4f 4b 2c 20 6e 6f 20 73 63 68 65 6d 61  et OK, no schema
6a70: 20 63 68 61 6e 67 65 73 0d 0a 20 20 20 20 7d 0d   changes..    }.
6a80: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
6a90: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
6aa0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 0d 0a  GetLastError()..
6ab0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
6ac0: 65 74 75 72 6e 20 47 65 74 4c 61 73 74 45 72 72  eturn GetLastErr
6ad0: 6f 72 28 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d  or(null);..    }
6ae0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
6af0: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
6b00: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 73 74   GetLastError(st
6b10: 72 69 6e 67 20 64 65 66 56 61 6c 75 65 29 0d 0a  ring defValue)..
6b20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73      {..        s
6b30: 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d 20 53  tring result = S
6b40: 51 4c 69 74 65 42 61 73 65 2e 47 65 74 4c 61 73  QLiteBase.GetLas
6b50: 74 45 72 72 6f 72 28 5f 73 71 6c 2c 20 5f 73 71  tError(_sql, _sq
6b60: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  l);..        if 
6b70: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
6b80: 45 6d 70 74 79 28 72 65 73 75 6c 74 29 29 20 72  Empty(result)) r
6b90: 65 73 75 6c 74 20 3d 20 64 65 66 56 61 6c 75 65  esult = defValue
6ba0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
6bb0: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d  n result;..    }
6bc0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
6bd0: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
6be0: 53 74 61 74 65 6d 65 6e 74 20 50 72 65 70 61 72  Statement Prepar
6bf0: 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  e(SQLiteConnecti
6c00: 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e 67 20 73  on cnn, string s
6c10: 74 72 53 71 6c 2c 20 53 51 4c 69 74 65 53 74 61  trSql, SQLiteSta
6c20: 74 65 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 2c  tement previous,
6c30: 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 4d 53 2c   uint timeoutMS,
6c40: 20 72 65 66 20 73 74 72 69 6e 67 20 73 74 72 52   ref string strR
6c50: 65 6d 61 69 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20  emain)..    {.. 
6c60: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
6c70: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73  .IsNullOrEmpty(s
6c80: 74 72 53 71 6c 29 29 0d 0a 20 20 20 20 20 20 7b  trSql))..      {
6c90: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
6ca0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
6cb0: 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73  QLite does not s
6cc0: 75 70 70 6f 72 74 20 74 68 65 20 63 6f 6e 63 65  upport the conce
6cd0: 70 74 20 6f 66 20 73 65 70 61 72 61 74 65 20 73  pt of separate s
6ce0: 63 68 65 6d 61 73 0d 0a 20 20 20 20 20 20 20 20  chemas..        
6cf0: 2f 2f 20 20 20 20 20 20 20 69 6e 20 6f 6e 65 20  //       in one 
6d00: 64 61 74 61 62 61 73 65 3b 20 74 68 65 72 65 66  database; theref
6d10: 6f 72 65 2c 20 72 65 6d 6f 76 65 20 74 68 65 20  ore, remove the 
6d20: 62 61 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65  base schema name
6d30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
6d40: 20 20 20 75 73 65 64 20 74 6f 20 73 6d 6f 6f 74     used to smoot
6d50: 68 20 69 6e 74 65 67 72 61 74 69 6f 6e 20 77 69  h integration wi
6d60: 74 68 20 74 68 65 20 62 61 73 65 20 2e 4e 45 54  th the base .NET
6d70: 20 46 72 61 6d 65 77 6f 72 6b 0d 0a 20 20 20 20   Framework..    
6d80: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 61 74      //       dat
6d90: 61 20 63 6c 61 73 73 65 73 2e 0d 0a 20 20 20 20  a classes...    
6da0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
6db0: 73 74 72 69 6e 67 20 62 61 73 65 53 63 68 65 6d  string baseSchem
6dc0: 61 4e 61 6d 65 20 3d 20 28 63 6e 6e 20 21 3d 20  aName = (cnn != 
6dd0: 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 62 61 73  null) ? cnn._bas
6de0: 65 53 63 68 65 6d 61 4e 61 6d 65 20 3a 20 6e 75  eSchemaName : nu
6df0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ll;....        i
6e00: 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
6e10: 6c 4f 72 45 6d 70 74 79 28 62 61 73 65 53 63 68  lOrEmpty(baseSch
6e20: 65 6d 61 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  emaName))..     
6e30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6e40: 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e  strSql = strSql.
6e50: 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20  Replace(..      
6e60: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
6e70: 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
6e80: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
6e90: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
6ea0: 20 20 20 22 5b 7b 30 7d 5d 2e 22 2c 20 62 61 73     "[{0}].", bas
6eb0: 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74  eSchemaName), St
6ec0: 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a  ring.Empty);....
6ed0: 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c            strSql
6ee0: 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63   = strSql.Replac
6ef0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
6f00: 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
6f10: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
6f20: 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  riantCulture,.. 
6f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
6f40: 7d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e  }.", baseSchemaN
6f50: 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70  ame), String.Emp
6f60: 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ty);..        }.
6f70: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
6f80: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
6f90: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 20 3d 0d  onFlags flags =.
6fa0: 0a 20 20 20 20 20 20 20 20 20 20 28 63 6e 6e 20  .          (cnn 
6fb0: 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 46  != null) ? cnn.F
6fc0: 6c 61 67 73 20 3a 20 53 51 4c 69 74 65 43 6f 6e  lags : SQLiteCon
6fd0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 66  nectionFlags.Def
6fe0: 61 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ault;....      i
6ff0: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
7000: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7010: 73 2e 4c 6f 67 50 72 65 70 61 72 65 29 20 3d 3d  s.LogPrepare) ==
7020: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7030: 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61 72  nFlags.LogPrepar
7040: 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  e)..      {..   
7050: 20 20 20 20 20 20 20 69 66 20 28 28 73 74 72 53         if ((strS
7060: 71 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28  ql == null) || (
7070: 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3d 3d  strSql.Length ==
7080: 20 30 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 54   0) || (strSql.T
7090: 72 69 6d 28 29 2e 4c 65 6e 67 74 68 20 3d 3d 20  rim().Length == 
70a0: 30 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  0))..           
70b0: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
70c0: 4d 65 73 73 61 67 65 28 22 50 72 65 70 61 72 69  Message("Prepari
70d0: 6e 67 20 7b 3c 6e 6f 74 68 69 6e 67 3e 7d 2e 2e  ng {<nothing>}..
70e0: 2e 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  .");..          
70f0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
7100: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
7110: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
7120: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
7130: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
7140: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
7150: 6c 74 75 72 65 2c 20 22 50 72 65 70 61 72 69 6e  lture, "Preparin
7160: 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20 73  g {{{0}}}...", s
7170: 74 72 53 71 6c 29 29 3b 0d 0a 20 20 20 20 20 20  trSql));..      
7180: 7d 0d 0a 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  }....      IntPt
7190: 72 20 73 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e  r stmt = IntPtr.
71a0: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74  Zero;..      Int
71b0: 50 74 72 20 70 74 72 20 3d 20 49 6e 74 50 74 72  Ptr ptr = IntPtr
71c0: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e  .Zero;..      in
71d0: 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  t len = 0;..    
71e0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
71f0: 65 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f  e n = SQLiteErro
7200: 72 43 6f 64 65 2e 53 63 68 65 6d 61 3b 0d 0a 20  rCode.Schema;.. 
7210: 20 20 20 20 20 69 6e 74 20 72 65 74 72 69 65 73       int retries
7220: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 62 79 74   = 0;..      byt
7230: 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 73  e[] b = ToUTF8(s
7240: 74 72 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20 73  trSql);..      s
7250: 74 72 69 6e 67 20 74 79 70 65 64 65 66 73 20 3d  tring typedefs =
7260: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 53 51   null;..      SQ
7270: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 63 6d  LiteStatement cm
7280: 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  d = null;..     
7290: 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75   Random rnd = nu
72a0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20  ll;..      uint 
72b0: 73 74 61 72 74 74 69 63 6b 20 3d 20 28 75 69 6e  starttick = (uin
72c0: 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69  t)Environment.Ti
72d0: 63 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20 20 20  ckCount;....    
72e0: 20 20 47 43 48 61 6e 64 6c 65 20 68 61 6e 64 6c    GCHandle handl
72f0: 65 20 3d 20 47 43 48 61 6e 64 6c 65 2e 41 6c 6c  e = GCHandle.All
7300: 6f 63 28 62 2c 20 47 43 48 61 6e 64 6c 65 54 79  oc(b, GCHandleTy
7310: 70 65 2e 50 69 6e 6e 65 64 29 3b 0d 0a 20 20 20  pe.Pinned);..   
7320: 20 20 20 49 6e 74 50 74 72 20 70 73 71 6c 20 3d     IntPtr psql =
7330: 20 68 61 6e 64 6c 65 2e 41 64 64 72 4f 66 50 69   handle.AddrOfPi
7340: 6e 6e 65 64 4f 62 6a 65 63 74 28 29 3b 0d 0a 20  nnedObject();.. 
7350: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
7360: 6d 65 6e 74 48 61 6e 64 6c 65 20 73 74 61 74 65  mentHandle state
7370: 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 75 6c  mentHandle = nul
7380: 6c 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a 20  l;..      try.. 
7390: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
73a0: 77 68 69 6c 65 20 28 28 6e 20 3d 3d 20 53 51 4c  while ((n == SQL
73b0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68  iteErrorCode.Sch
73c0: 65 6d 61 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69  ema || n == SQLi
73d0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b  teErrorCode.Lock
73e0: 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74  ed || n == SQLit
73f0: 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29  eErrorCode.Busy)
7400: 20 26 26 20 72 65 74 72 69 65 73 20 3c 20 33 29   && retries < 3)
7410: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
7420: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
7430: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7440: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
7450: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ng...          }
7460: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6e 61  ..          fina
7470: 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72  lly /* NOTE: Thr
7480: 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74  ead.Abort() prot
7490: 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20  ection. */..    
74a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
74b0: 20 20 20 20 20 73 74 6d 74 20 3d 20 49 6e 74 50       stmt = IntP
74c0: 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
74d0: 20 20 20 20 20 20 70 74 72 20 3d 20 49 6e 74 50        ptr = IntP
74e0: 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 23 69 66 20  tr.Zero;....#if 
74f0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
7500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65  ..            le
7510: 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  n = 0;..        
7520: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
7530: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
7540: 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65  te3_prepare_inte
7550: 72 6f 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20  rop(_sql, psql, 
7560: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72 65  b.Length - 1, re
7570: 66 20 73 74 6d 74 2c 20 72 65 66 20 70 74 72 2c  f stmt, ref ptr,
7580: 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73   ref len);..#els
7590: 65 0d 0a 23 69 66 20 55 53 45 5f 50 52 45 50 41  e..#if USE_PREPA
75a0: 52 45 5f 56 32 0d 0a 20 20 20 20 20 20 20 20 20  RE_V2..         
75b0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
75c0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
75d0: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 5f 73  e3_prepare_v2(_s
75e0: 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67  ql, psql, b.Leng
75f0: 74 68 20 2d 20 31 2c 20 72 65 66 20 73 74 6d 74  th - 1, ref stmt
7600: 2c 20 72 65 66 20 70 74 72 29 3b 0d 0a 23 65 6c  , ref ptr);..#el
7610: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
7620: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
7630: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7640: 70 72 65 70 61 72 65 28 5f 73 71 6c 2c 20 70 73  prepare(_sql, ps
7650: 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31  ql, b.Length - 1
7660: 2c 20 72 65 66 20 73 74 6d 74 2c 20 72 65 66 20  , ref stmt, ref 
7670: 70 74 72 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ptr);..#endif.. 
7680: 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20 3d             len =
7690: 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a   -1;..#endif....
76a0: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
76b0: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 53 54 41  _20 && TRACE_STA
76c0: 54 45 4d 45 4e 54 0d 0a 20 20 20 20 20 20 20 20  TEMENT..        
76d0: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
76e0: 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ine(String.Forma
76f0: 74 28 22 50 72 65 70 61 72 65 20 28 7b 30 7d 29  t("Prepare ({0})
7700: 3a 20 7b 31 7d 22 2c 20 6e 2c 20 73 74 6d 74 29  : {1}", n, stmt)
7710: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
7720: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e            if ((n
7730: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
7740: 6f 64 65 2e 4f 6b 29 20 26 26 20 28 73 74 6d 74  ode.Ok) && (stmt
7750: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
7760: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
7770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7780: 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e  if (statementHan
7790: 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 73 74 61  dle != null) sta
77a0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2e 44 69 73  tementHandle.Dis
77b0: 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  pose();..       
77c0: 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
77d0: 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c  Handle = new SQL
77e0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
77f0: 6c 65 28 5f 73 71 6c 2c 20 73 74 6d 74 29 3b 0d  le(_sql, stmt);.
7800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7810: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7820: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61           if (sta
7830: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20  tementHandle != 
7840: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
7850: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7860: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7870: 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c  .OnChanged(null,
7880: 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45   new ConnectionE
7890: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
78a0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
78b0: 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79  onnectionEventTy
78c0: 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48 61  pe.NewCriticalHa
78d0: 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  ndle, null, null
78e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
78f0: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 73 74 61   null, null, sta
7900: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74  tementHandle, st
7910: 72 53 71 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74  rSql, new object
7920: 5b 5d 20 7b 20 63 6e 6e 2c 0d 0a 20 20 20 20 20  [] { cnn,..     
7930: 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 2c           strSql,
7940: 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f   previous, timeo
7950: 75 74 4d 53 20 7d 29 29 3b 0d 0a 20 20 20 20 20  utMS }));..     
7960: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7970: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
7980: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68  iteErrorCode.Sch
7990: 65 6d 61 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ema)..          
79a0: 20 20 72 65 74 72 69 65 73 2b 2b 3b 0d 0a 20 20    retries++;..  
79b0: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
79c0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
79d0: 72 43 6f 64 65 2e 45 72 72 6f 72 29 0d 0a 20 20  rCode.Error)..  
79e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
79f0: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
7a00: 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c 61 73  g.Compare(GetLas
7a10: 74 45 72 72 6f 72 28 29 2c 20 22 6e 65 61 72 20  tError(), "near 
7a20: 5c 22 54 59 50 45 53 5c 22 3a 20 73 79 6e 74 61  \"TYPES\": synta
7a30: 78 20 65 72 72 6f 72 22 2c 20 53 74 72 69 6e 67  x error", String
7a40: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
7a50: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
7a60: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
7a70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7a80: 20 20 69 6e 74 20 70 6f 73 20 3d 20 73 74 72 53    int pos = strS
7a90: 71 6c 2e 49 6e 64 65 78 4f 66 28 27 3b 27 29 3b  ql.IndexOf(';');
7aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7ab0: 69 66 20 28 70 6f 73 20 3d 3d 20 2d 31 29 20 70  if (pos == -1) p
7ac0: 6f 73 20 3d 20 73 74 72 53 71 6c 2e 4c 65 6e 67  os = strSql.Leng
7ad0: 74 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20  th - 1;....     
7ae0: 20 20 20 20 20 20 20 20 20 74 79 70 65 64 65 66           typedef
7af0: 73 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73 74  s = strSql.Subst
7b00: 72 69 6e 67 28 30 2c 20 70 6f 73 20 2b 20 31 29  ring(0, pos + 1)
7b10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7b20: 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c   strSql = strSql
7b30: 2e 53 75 62 73 74 72 69 6e 67 28 70 6f 73 20 2b  .Substring(pos +
7b40: 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   1);....        
7b50: 20 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20        strRemain 
7b60: 3d 20 22 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  = "";....       
7b70: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d         while (cm
7b80: 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72  d == null && str
7b90: 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d  Sql.Length > 0).
7ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
7bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7bc0: 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28    cmd = Prepare(
7bd0: 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65  cnn, strSql, pre
7be0: 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53  vious, timeoutMS
7bf0: 2c 20 72 65 66 20 73 74 72 52 65 6d 61 69 6e 29  , ref strRemain)
7c00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7c10: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 52     strSql = strR
7c20: 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20  emain;..        
7c30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7c40: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6d 64           if (cmd
7c50: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
7c60: 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e 53             cmd.S
7c70: 65 74 54 79 70 65 73 28 74 79 70 65 64 65 66 73  etTypes(typedefs
7c80: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
7c90: 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d      return cmd;.
7ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7cb0: 23 69 66 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e  #if (NET_35 || N
7cc0: 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 20  ET_40 || NET_45 
7cd0: 7c 7c 20 4e 45 54 5f 34 35 31 29 20 26 26 20 21  || NET_451) && !
7ce0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
7cf0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
7d00: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
7d10: 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20  _buildingSchema 
7d20: 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72 69  == false && Stri
7d30: 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c 61  ng.Compare(GetLa
7d40: 73 74 45 72 72 6f 72 28 29 2c 20 30 2c 20 22 6e  stError(), 0, "n
7d50: 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 54 45  o such table: TE
7d60: 4d 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c 20 32  MP.SCHEMA", 0, 2
7d70: 36 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  6, StringCompari
7d80: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
7d90: 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20  eCase) == 0)..  
7da0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7db0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52 65             strRe
7dc0: 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 20 20 20 20  main = "";..    
7dd0: 20 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c 64            _build
7de0: 69 6e 67 53 63 68 65 6d 61 20 3d 20 74 72 75 65  ingSchema = true
7df0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7e00: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
7e10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7e20: 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 53 63         ISQLiteSc
7e30: 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 20 65  hemaExtensions e
7e40: 78 74 20 3d 20 28 28 49 53 65 72 76 69 63 65 50  xt = ((IServiceP
7e50: 72 6f 76 69 64 65 72 29 53 51 4c 69 74 65 46 61  rovider)SQLiteFa
7e60: 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65 29 2e  ctory.Instance).
7e70: 47 65 74 53 65 72 76 69 63 65 28 74 79 70 65 6f  GetService(typeo
7e80: 66 28 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45  f(ISQLiteSchemaE
7e90: 78 74 65 6e 73 69 6f 6e 73 29 29 20 61 73 20 49  xtensions)) as I
7ea0: 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65  SQLiteSchemaExte
7eb0: 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20 20  nsions;....     
7ec0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
7ed0: 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  xt != null)..   
7ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
7ef0: 78 74 2e 42 75 69 6c 64 54 65 6d 70 53 63 68 65  xt.BuildTempSche
7f00: 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20 20 20  ma(cnn);....    
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
7f20: 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26  e (cmd == null &
7f30: 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  & strSql.Length 
7f40: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
7f50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7f60: 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 20 3d             cmd =
7f70: 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73 74   Prepare(cnn, st
7f80: 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20  rSql, previous, 
7f90: 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20 73  timeoutMS, ref s
7fa0: 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20  trRemain);..    
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
7fc0: 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e  rSql = strRemain
7fd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7fe0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7ff0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
8000: 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  md;..           
8010: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8020: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
8030: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 62                _b
8050: 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 20  uildingSchema = 
8060: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
8070: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8080: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
8090: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
80a0: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
80b0: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
80c0: 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e  Code.Locked || n
80d0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
80e0: 6f 64 65 2e 42 75 73 79 29 20 2f 2f 20 4c 6f 63  ode.Busy) // Loc
80f0: 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61 20 73  ked -- delay a s
8100: 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65 66 6f  mall amount befo
8110: 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20 20 20  re retrying..   
8120: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8130: 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74 72        // Keep tr
8140: 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ying..          
8150: 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c    if (rnd == nul
8160: 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d 65  l) // First time
8170: 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65 72   we've encounter
8180: 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20  ed the lock..   
8190: 20 20 20 20 20 20 20 20 20 20 20 72 6e 64 20 3d             rnd =
81a0: 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a   new Random();..
81b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
81c0: 20 49 66 20 77 65 27 76 65 20 65 78 63 65 65 64   If we've exceed
81d0: 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73  ed the command's
81e0: 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20 75   timeout, give u
81f0: 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20 65  p and throw an e
8200: 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
8210: 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76 69    if ((uint)Envi
8220: 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e  ronment.TickCoun
8230: 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e 20  t - starttick > 
8240: 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20  timeoutMS)..    
8250: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8260: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
8270: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
8280: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
8290: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  or());..        
82a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
82b0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
82c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
82d0: 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72 77 69        // Otherwi
82e0: 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61 20 72  se sleep for a r
82f0: 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20  andom amount of 
8300: 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30 6d 73  time up to 150ms
8310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8320: 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67  System.Threading
8330: 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28 72 6e  .Thread.Sleep(rn
8340: 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29 29 3b  d.Next(1, 150));
8350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
8360: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
8370: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8380: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
8390: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
83a0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
83b0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
83c0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
83d0: 0a 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61  .        strRema
83e0: 69 6e 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  in = UTF8ToStrin
83f0: 67 28 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a  g(ptr, len);....
8400: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61 74          if (stat
8410: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e  ementHandle != n
8420: 75 6c 6c 29 20 63 6d 64 20 3d 20 6e 65 77 20 53  ull) cmd = new S
8430: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 28 74  QLiteStatement(t
8440: 68 69 73 2c 20 66 6c 61 67 73 2c 20 73 74 61 74  his, flags, stat
8450: 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74 72  ementHandle, str
8460: 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c  Sql.Substring(0,
8470: 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d   strSql.Length -
8480: 20 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67 74   strRemain.Lengt
8490: 68 29 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d 0a  h), previous);..
84a0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
84b0: 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a   cmd;..      }..
84c0: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
84d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
84e0: 68 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d 0a  handle.Free();..
84f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
8500: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
8510: 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42  static void LogB
8520: 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ind(SQLiteStatem
8530: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
8540: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
8550: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
8560: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
8570: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
8580: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
8590: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
85a0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
85b0: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
85c0: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
85d0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
85e0: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
85f0: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
8600: 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e 2e 22  #{1} as NULL..."
8610: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68  ,..            h
8620: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
8630: 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ex));..    }....
8640: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74      protected st
8650: 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e  atic void LogBin
8660: 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  d(SQLiteStatemen
8670: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20  tHandle handle, 
8680: 69 6e 74 20 69 6e 64 65 78 2c 20 56 61 6c 75 65  int index, Value
8690: 54 79 70 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  Type value)..   
86a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
86b0: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
86c0: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
86d0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
86e0: 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67  ogMessage(String
86f0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
8700: 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73        "Binding s
8710: 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72  tatement {0} par
8720: 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79  amter #{1} as ty
8730: 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75  pe {2} with valu
8740: 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a  e {{{3}}}...",..
8750: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
8760: 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c  leIntPtr, index,
8770: 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29   value.GetType()
8780: 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  , value));..    
8790: 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65  }....    private
87a0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 46   static string F
87b0: 6f 72 6d 61 74 44 61 74 65 54 69 6d 65 28 44 61  ormatDateTime(Da
87c0: 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20  teTime value).. 
87d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 74     {..        St
87e0: 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75  ringBuilder resu
87f0: 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42  lt = new StringB
8800: 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20  uilder();....   
8810: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
8820: 6e 64 28 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e  nd(value.ToStrin
8830: 67 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48  g("yyyy-MM-ddTHH
8840: 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22  :mm:ss.FFFFFFFK"
8850: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73  ));..        res
8860: 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b  ult.Append(' ');
8870: 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74  ..        result
8880: 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b 69  .Append(value.Ki
8890: 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  nd);..        re
88a0: 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29  sult.Append(' ')
88b0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c  ;..        resul
88c0: 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54  t.Append(value.T
88d0: 69 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  icks);....      
88e0: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e    return result.
88f0: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
8900: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63   }....    protec
8910: 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20  ted static void 
8920: 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74  LogBind(SQLiteSt
8930: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
8940: 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c  ndle, int index,
8950: 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29   DateTime value)
8960: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
8970: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
8980: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
8990: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
89a0: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
89b0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
89c0: 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64             "Bind
89d0: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30  ing statement {0
89e0: 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20  } paramter #{1} 
89f0: 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68  as type {2} with
8a00: 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e   value {{{3}}}..
8a10: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
8a20: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69   handleIntPtr, i
8a30: 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61 74  ndex, typeof(Dat
8a40: 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44 61  eTime), FormatDa
8a50: 74 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29 3b  teTime(value)));
8a60: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
8a70: 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20  rotected static 
8a80: 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c  void LogBind(SQL
8a90: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
8aa0: 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69  le handle, int i
8ab0: 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c  ndex, string val
8ac0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
8ad0: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
8ae0: 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65  eIntPtr = handle
8af0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
8b00: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
8b10: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
8b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42  ..            "B
8b30: 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  inding statement
8b40: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b   {0} paramter #{
8b50: 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77  1} as type {2} w
8b60: 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d  ith value {{{3}}
8b70: 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  }...",..        
8b80: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
8b90: 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28  , index, typeof(
8ba0: 53 74 72 69 6e 67 29 2c 20 28 76 61 6c 75 65 20  String), (value 
8bb0: 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75 65  != null) ? value
8bc0: 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a   : "<null>"));..
8bd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
8be0: 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
8bf0: 6e 67 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c  ng ToHexadecimal
8c00: 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20  String(..       
8c10: 20 62 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a 20   byte[] array.. 
8c20: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
8c30: 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72 72  .        if (arr
8c40: 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ay == null)..   
8c50: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8c60: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
8c70: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72   StringBuilder r
8c80: 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69  esult = new Stri
8c90: 6e 67 42 75 69 6c 64 65 72 28 61 72 72 61 79 2e  ngBuilder(array.
8ca0: 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d 0a  Length * 2);....
8cb0: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67          int leng
8cc0: 74 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74  th = array.Lengt
8cd0: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f  h;....        fo
8ce0: 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
8cf0: 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68  ; index < length
8d00: 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
8d10: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
8d20: 70 70 65 6e 64 28 61 72 72 61 79 5b 69 6e 64 65  ppend(array[inde
8d30: 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78 32 22  x].ToString("x2"
8d40: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ));....        r
8d50: 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53  eturn result.ToS
8d60: 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d  tring();..    }.
8d70: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
8d80: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67   static void Log
8d90: 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65  Bind(SQLiteState
8da0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
8db0: 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79  e, int index, by
8dc0: 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20  te[] value)..   
8dd0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
8de0: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
8df0: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
8e00: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
8e10: 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67  ogMessage(String
8e20: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
8e30: 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73        "Binding s
8e40: 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72  tatement {0} par
8e50: 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79  amter #{1} as ty
8e60: 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75  pe {2} with valu
8e70: 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a  e {{{3}}}...",..
8e80: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
8e90: 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c  leIntPtr, index,
8ea0: 20 74 79 70 65 6f 66 28 42 79 74 65 5b 5d 29 2c   typeof(Byte[]),
8eb0: 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29   (value != null)
8ec0: 20 3f 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c   ? ToHexadecimal
8ed0: 53 74 72 69 6e 67 28 76 61 6c 75 65 29 20 3a 20  String(value) : 
8ee0: 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20  "<null>"));..   
8ef0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
8f00: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
8f10: 20 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53 51 4c   Bind_Double(SQL
8f20: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
8f30: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
8f40: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
8f50: 69 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c  int index, doubl
8f60: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  e value)..    {.
8f70: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
8f80: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
8f90: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
8fa0: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20  lite_stmt;....  
8fb0: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
8fc0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
8fd0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
8fe0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
8ff0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
9000: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
9010: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
9020: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
9030: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
9040: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c      }....#if !PL
9050: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
9060: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
9070: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9080: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
9090: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
90a0: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e  _bind_double(han
90b0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
90c0: 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
90d0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
90e0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
90f0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
9100: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
9110: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
9120: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
9130: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
9140: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
9150: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
9160: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
9170: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
9180: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
9190: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
91a0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
91b0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
91c0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
91d0: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
91e0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
91f0: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49  ride void Bind_I
9200: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
9210: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
9220: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
9230: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
9240: 78 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20  x, int value).. 
9250: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
9260: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
9270: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
9280: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
9290: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
92a0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
92b0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
92c0: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
92d0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
92e0: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
92f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9300: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
9310: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
9320: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
9330: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
9340: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
9350: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9360: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68  lite3_bind_int(h
9370: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
9380: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  lue);..        i
9390: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
93a0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
93b0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
93c0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
93d0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
93e0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
93f0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
9400: 69 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c 69 74  ind_UInt32(SQLit
9410: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
9420: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
9430: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
9440: 74 20 69 6e 64 65 78 2c 20 75 69 6e 74 20 76 61  t index, uint va
9450: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
9460: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
9470: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
9480: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
9490: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
94a0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
94b0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
94c0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
94d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
94e0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
94f0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
9500: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
9510: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9520: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
9530: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
9540: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
9550: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
9560: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
9570: 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20  Code n;....     
9580: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
9590: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
95a0: 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74 33 32  Flags.BindUInt32
95b0: 41 73 49 6e 74 36 34 29 20 3d 3d 20 53 51 4c 69  AsInt64) == SQLi
95c0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
95d0: 73 2e 42 69 6e 64 55 49 6e 74 33 32 41 73 49 6e  s.BindUInt32AsIn
95e0: 74 36 34 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  t64)..        {.
95f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e  .            lon
9600: 67 20 76 61 6c 75 65 32 20 3d 20 76 61 6c 75 65  g value2 = value
9610: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
9620: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
9630: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
9640: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
9650: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9660: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64  _bind_int64(hand
9670: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
9680: 32 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  2);..#elif !SQLI
9690: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
96a0: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
96b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
96c0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
96d0: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
96e0: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
96f0: 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 73 65 0d 0a  alue2);..#else..
9700: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
9710: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
9720: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
9730: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
9740: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
9750: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
9760: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
9770: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9780: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75  s.sqlite3_bind_u
9790: 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  int(handle, inde
97a0: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
97b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 69      }..        i
97c0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
97d0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
97e0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
97f0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
9800: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
9810: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
9820: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
9830: 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65  ind_Int64(SQLite
9840: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
9850: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
9860: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
9870: 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c   index, long val
9880: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
9890: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
98a0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
98b0: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
98c0: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
98d0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
98e0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
98f0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
9900: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
9910: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
9920: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
9930: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
9940: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9950: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
9960: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
9970: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
9980: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
9990: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
99a0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
99b0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
99c0: 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69  _int64(handle, i
99d0: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
99e0: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
99f0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53  NDARD..        S
9a00: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
9a10: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
9a20: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
9a30: 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ind_int64_intero
9a40: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
9a50: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
9a60: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72  lse..        thr
9a70: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
9a80: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
9a90: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
9aa0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
9ab0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
9ac0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
9ad0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
9ae0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
9af0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
9b00: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
9b10: 69 64 20 42 69 6e 64 5f 55 49 6e 74 36 34 28 53  id Bind_UInt64(S
9b20: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
9b30: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
9b40: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
9b50: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 6c 6f  , int index, ulo
9b60: 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
9b70: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
9b80: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
9b90: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
9ba0: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23  qlite_stmt;....#
9bb0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
9bc0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
9bd0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
9be0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
9bf0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
9c00: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
9c10: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
9c20: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
9c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
9c40: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
9c50: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
9c60: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9c70: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
9c80: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
9c90: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9ca0: 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 28 68 61  3_bind_uint64(ha
9cb0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
9cc0: 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
9cd0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
9ce0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
9cf0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
9d00: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9d10: 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36  lite3_bind_uint6
9d20: 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  4_interop(handle
9d30: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
9d40: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
9d50: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
9d60: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
9d70: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
9d80: 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  f..        if (n
9d90: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
9da0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
9db0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
9dc0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
9dd0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
9de0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9df0: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
9e00: 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74 65  Text(SQLiteState
9e10: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
9e20: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
9e30: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
9e40: 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29  x, string value)
9e50: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
9e60: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
9e70: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
9e80: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
9e90: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
9ea0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
9eb0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
9ec0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
9ed0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
9ee0: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
9ef0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
9f00: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
9f10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9f20: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
9f30: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
9f40: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
9f50: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
9f60: 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54   byte[] b = ToUT
9f70: 46 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 23 69  F8(value);....#i
9f80: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
9f90: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
9fa0: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
9fb0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
9fc0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
9fd0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
9fe0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
9ff0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
a000: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
a010: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
a020: 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20  x, b);..        
a030: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
a040: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
a050: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
a060: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a070: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68  ite3_bind_text(h
a080: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c  andle, index, b,
a090: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28   b.Length - 1, (
a0a0: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
a0b0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
a0c0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
a0d0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
a0e0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
a0f0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
a100: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
a110: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
a120: 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74 65  e void Bind_Date
a130: 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Time(SQLiteState
a140: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
a150: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
a160: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
a170: 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29 0d  x, DateTime dt).
a180: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
a190: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
a1a0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
a1b0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
a1c0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
a1d0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
a1e0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
a1f0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
a200: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
a210: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
a220: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
a230: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
a240: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a250: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
a260: 65 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d 0a  e, index, dt);..
a270: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
a280: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 77 69  f....        swi
a290: 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46 6f  tch (_datetimeFo
a2a0: 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b  rmat)..        {
a2b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
a2c0: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
a2d0: 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20  mats.Ticks:..   
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
a2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a300: 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d      long value =
a310: 20 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 23 69   dt.Ticks;....#i
a320: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
a330: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
a340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a350: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
a360: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
a370: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
a380: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
a390: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
a3a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a3b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3d0: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
a3e0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
a3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a400: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a410: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
a420: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
a430: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
a440: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
a450: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
a460: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
a470: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
a480: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
a490: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
a4a0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
a4b0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a4c0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
a4d0: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68  _int64_interop(h
a4e0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
a4f0: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  f value);..#else
a500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a510: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
a520: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
a530: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
a540: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
a550: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
a560: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
a570: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
a580: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
a590: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
a5a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a5b0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
a5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5d0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
a5e0: 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f  ase SQLiteDateFo
a5f0: 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79 3a  rmats.JulianDay:
a600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a610: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a620: 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20           double 
a630: 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69 61 6e  value = ToJulian
a640: 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20  Day(dt);....#if 
a650: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
a660: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
a670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a680: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
a690: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
a6a0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
a6b0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
a6c0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
a6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f                Lo
a700: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
a710: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
a720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a730: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a740: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
a750: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
a760: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
a770: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
a780: 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69  double(handle, i
a790: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
a7a0: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
a7b0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
a7c0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
a7d0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
a7e0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
a7f0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
a800: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68  double_interop(h
a810: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
a820: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  f value);..#else
a830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a840: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
a850: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
a860: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
a870: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
a880: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
a890: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
a8a0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
a8b0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
a8c0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
a8d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a8e0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
a8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a900: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
a910: 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f  ase SQLiteDateFo
a920: 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 3a  rmats.UnixEpoch:
a930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a940: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a950: 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61           long va
a960: 6c 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f  lue = Convert.To
a970: 49 6e 74 36 34 28 64 74 2e 53 75 62 74 72 61 63  Int64(dt.Subtrac
a980: 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f 74  t(UnixEpoch).Tot
a990: 61 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a 23  alSeconds);....#
a9a0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
a9b0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
a9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9d0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
a9e0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
a9f0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
aa00: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
aa10: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
aa20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aa30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
aa40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa50: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
aa60: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
aa70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aa80: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
aa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
aaa0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
aab0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
aac0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
aad0: 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c  nd_int64(handle,
aae0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
aaf0: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
ab00: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
ab20: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
ab30: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ab40: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
ab50: 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  d_int64_interop(
ab60: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
ab70: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
ab80: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
ab90: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
aba0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
abb0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
abc0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
abd0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
abe0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
abf0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
ac00: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
ac10: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
ac20: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
ac30: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
ac40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ac50: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ac60: 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20  default:..      
ac70: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ac80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac90: 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54   byte[] b = ToUT
aca0: 46 38 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21  F8(dt);....#if !
acb0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
acc0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
acd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
ace0: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
acf0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
ad00: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
ad10: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
ad20: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
ad30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ad50: 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67               Log
ad60: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
ad70: 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20  ex, b);..       
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
ad90: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
ada0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
adb0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
adc0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
add0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
ade0: 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c 20  nd_text(handle, 
adf0: 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67  index, b, b.Leng
ae00: 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29  th - 1, (IntPtr)
ae10: 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  (-1));..        
ae20: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ae30: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
ae40: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
ae50: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
ae60: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
ae70: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  or());..        
ae80: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
ae90: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
aea0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
aeb0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
aec0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
aed0: 20 76 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62 28   void Bind_Blob(
aee0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
aef0: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
af00: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
af10: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79  s, int index, by
af20: 74 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29 0d 0a  te[] blobData)..
af30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
af40: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
af50: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
af60: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
af70: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
af80: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
af90: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
afa0: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
afb0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
afc0: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
afd0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
afe0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
aff0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b000: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
b010: 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74  , index, blobDat
b020: 61 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  a);..        }..
b030: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
b040: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
b050: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
b060: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
b070: 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 68 61 6e 64  3_bind_blob(hand
b080: 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44  le, index, blobD
b090: 61 74 61 2c 20 62 6c 6f 62 44 61 74 61 2e 4c 65  ata, blobData.Le
b0a0: 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28 2d  ngth, (IntPtr)(-
b0b0: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  1));..        if
b0c0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
b0d0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
b0e0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
b0f0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
b100: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
b110: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
b120: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
b130: 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74  nd_Null(SQLiteSt
b140: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
b150: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
b160: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
b170: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
b180: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
b190: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
b1a0: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
b1b0: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21  e_stmt;....#if !
b1c0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
b1d0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
b1e0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
b1f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
b200: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
b210: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
b220: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
b230: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
b240: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
b250: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b  (handle, index);
b260: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
b270: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  dif....        S
b280: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
b290: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
b2a0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
b2b0: 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65 2c  ind_null(handle,
b2c0: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
b2d0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
b2e0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
b2f0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
b300: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
b310: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
b320: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
b330: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
b340: 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74   Bind_ParamCount
b350: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
b360: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
b370: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
b380: 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  gs)..    {..    
b390: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
b3a0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
b3b0: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
b3c0: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69  stmt;..        i
b3d0: 6e 74 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66  nt value = Unsaf
b3e0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b3f0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
b400: 6d 65 74 65 72 5f 63 6f 75 6e 74 28 68 61 6e 64  meter_count(hand
b410: 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  le);....        
b420: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
b430: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
b440: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
b450: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
b460: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
b470: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b480: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
b490: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
b4a0: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
b4b0: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
b4c0: 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46  Message(String.F
b4d0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
b4e0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
b4f0: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
b500: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
b510: 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20       "Statement 
b520: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 63 6f 75  {0} paramter cou
b530: 6e 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20 20  nt is {1}.",..  
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
b550: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c 75  ndleIntPtr, valu
b560: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e));..        }.
b570: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
b580: 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d  n value;..    }.
b590: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
b5a0: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
b5b0: 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28 53  Bind_ParamName(S
b5c0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
b5d0: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
b5e0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
b5f0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
b600: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
b610: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
b620: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
b630: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
b640: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
b650: 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  ame;....#if !SQL
b660: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
b670: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
b680: 30 3b 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65  0;..        name
b690: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
b6a0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
b6b0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
b6c0: 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f  _parameter_name_
b6d0: 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20  interop(handle, 
b6e0: 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c  index, ref len),
b6f0: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
b700: 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54         name = UT
b710: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
b720: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b730: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
b740: 6d 65 74 65 72 5f 6e 61 6d 65 28 68 61 6e 64 6c  meter_name(handl
b750: 65 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  e, index), -1);.
b760: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
b770: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
b780: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
b790: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
b7a0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
b7b0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
b7c0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
b7d0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
b7e0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
b7f0: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
b800: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
b810: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
b820: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
b830: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
b840: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
b850: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
b860: 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65          "Stateme
b870: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
b880: 23 7b 31 7d 20 6e 61 6d 65 20 69 73 20 7b 7b 7b  #{1} name is {{{
b890: 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20  2}}}.",..       
b8a0: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
b8b0: 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 6e 61  ntPtr, index, na
b8c0: 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  me));..        }
b8d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
b8e0: 72 6e 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d  rn name;..    }.
b8f0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
b900: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e  override int Bin
b910: 64 5f 50 61 72 61 6d 49 6e 64 65 78 28 53 51 4c  d_ParamIndex(SQL
b920: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
b930: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
b940: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
b950: 73 74 72 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65  string paramName
b960: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
b970: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
b980: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
b990: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
b9a0: 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  mt;..        int
b9b0: 20 69 6e 64 65 78 20 3d 20 55 6e 73 61 66 65 4e   index = UnsafeN
b9c0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
b9d0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
b9e0: 74 65 72 5f 69 6e 64 65 78 28 68 61 6e 64 6c 65  ter_index(handle
b9f0: 2c 20 54 6f 55 54 46 38 28 70 61 72 61 6d 4e 61  , ToUTF8(paramNa
ba00: 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me));....       
ba10: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
ba20: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
ba30: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
ba40: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
ba50: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
ba60: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ba70: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
ba80: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
ba90: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
baa0: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
bab0: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
bac0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
bad0: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
bae0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
baf0: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
bb00: 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74        "Statement
bb10: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 69 6e   {0} paramter in
bb20: 64 65 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31  dex of name {{{1
bb30: 7d 7d 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a  }}} is #{2}.",..
bb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb50: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70 61  handleIntPtr, pa
bb60: 72 61 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29  ramName, index))
bb70: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
bb80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 69          return i
bb90: 6e 64 65 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ndex;..    }....
bba0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
bbb0: 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e  rride int Column
bbc0: 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74  Count(SQLiteStat
bbd0: 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20  ement stmt)..   
bbe0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
bbf0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
bc00: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
bc10: 75 6d 6e 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f  umn_count(stmt._
bc20: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20  sqlite_stmt);.. 
bc30: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
bc40: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
bc50: 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28  ring ColumnName(
bc60: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
bc70: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
bc80: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
bc90: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
bca0: 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30       int len = 0
bcb0: 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
bcc0: 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
bcd0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
bce0: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65  column_name_inte
bcf0: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
bd00: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65  _stmt, index, re
bd10: 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  f len);..#else..
bd20: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d        IntPtr p =
bd30: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
bd40: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
bd50: 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73  umn_name(stmt._s
bd60: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
bd70: 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  x);..#endif..   
bd80: 20 20 20 69 66 20 28 70 20 3d 3d 20 49 6e 74 50     if (p == IntP
bd90: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
bda0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
bdb0: 74 65 45 78 63 65 70 74 69 6f 6e 28 53 51 4c 69  teException(SQLi
bdc0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f 4d 65  teErrorCode.NoMe
bdd0: 6d 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  m, GetLastError(
bde0: 29 29 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ));..#if !SQLITE
bdf0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
be00: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
be10: 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 23  ring(p, len);..#
be20: 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
be30: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
be40: 70 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  p, -1);..#endif.
be50: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
be60: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
be70: 54 79 70 65 41 66 66 69 6e 69 74 79 20 43 6f 6c  TypeAffinity Col
be80: 75 6d 6e 41 66 66 69 6e 69 74 79 28 53 51 4c 69  umnAffinity(SQLi
be90: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
bea0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
beb0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
bec0: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
bed0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
bee0: 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d 74 2e 5f  lumn_type(stmt._
bef0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
bf00: 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ex);..    }.... 
bf10: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
bf20: 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75  ride string Colu
bf30: 6d 6e 54 79 70 65 28 53 51 4c 69 74 65 53 74 61  mnType(SQLiteSta
bf40: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
bf50: 20 69 6e 64 65 78 2c 20 72 65 66 20 54 79 70 65   index, ref Type
bf60: 41 66 66 69 6e 69 74 79 20 6e 41 66 66 69 6e 69  Affinity nAffini
bf70: 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ty)..    {..    
bf80: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66 20    int len;..#if 
bf90: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
bfa0: 0d 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 30 3b  ..      len = 0;
bfb0: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
bfc0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
bfd0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
bfe0: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f 69  olumn_decltype_i
bff0: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
c000: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
c010: 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73   ref len);..#els
c020: 65 0d 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d  e..      len = -
c030: 31 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  1;..      IntPtr
c040: 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   p = UnsafeNativ
c050: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c060: 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
c070: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
c080: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e  mt, index);..#en
c090: 64 69 66 0d 0a 20 20 20 20 20 20 6e 41 66 66 69  dif..      nAffi
c0a0: 6e 69 74 79 20 3d 20 43 6f 6c 75 6d 6e 41 66 66  nity = ColumnAff
c0b0: 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65  inity(stmt, inde
c0c0: 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  x);....      if 
c0d0: 28 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  (p != IntPtr.Zer
c0e0: 6f 29 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f  o) return UTF8To
c0f0: 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d  String(p, len);.
c100: 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20  .      else..   
c110: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 74     {..        st
c120: 72 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74 6d 74  ring[] ar = stmt
c130: 2e 54 79 70 65 44 65 66 69 6e 69 74 69 6f 6e 73  .TypeDefinitions
c140: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61  ;..        if (a
c150: 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r != null)..    
c160: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c170: 20 69 66 20 28 69 6e 64 65 78 20 3c 20 61 72 2e   if (index < ar.
c180: 4c 65 6e 67 74 68 20 26 26 20 61 72 5b 69 6e 64  Length && ar[ind
c190: 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ex] != null)..  
c1a0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c1b0: 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20   ar[index];..   
c1c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c1d0: 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d  return String.Em
c1e0: 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  pty;....        
c1f0: 2f 2f 73 77 69 74 63 68 20 28 6e 41 66 66 69 6e  //switch (nAffin
c200: 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ity)..        //
c210: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63  {..        //  c
c220: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
c230: 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20  .Int64:..       
c240: 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 42   //    return "B
c250: 49 47 49 4e 54 22 3b 0d 0a 20 20 20 20 20 20 20  IGINT";..       
c260: 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41 66   //  case TypeAf
c270: 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a  finity.Double:..
c280: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65          //    re
c290: 74 75 72 6e 20 22 44 4f 55 42 4c 45 22 3b 0d 0a  turn "DOUBLE";..
c2a0: 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65          //  case
c2b0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c   TypeAffinity.Bl
c2c0: 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  ob:..        // 
c2d0: 20 20 20 72 65 74 75 72 6e 20 22 42 4c 4f 42 22     return "BLOB"
c2e0: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 64  ;..        //  d
c2f0: 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20  efault:..       
c300: 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 54   //    return "T
c310: 45 58 54 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f  EXT";..        /
c320: 2f 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  /}..      }..   
c330: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
c340: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
c350: 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51 4c 69  ColumnIndex(SQLi
c360: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
c370: 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e  , string columnN
c380: 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ame)..    {..   
c390: 20 20 20 69 6e 74 20 78 20 3d 20 43 6f 6c 75 6d     int x = Colum
c3a0: 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d  nCount(stmt);...
c3b0: 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20  .      for (int 
c3c0: 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b  n = 0; n < x; n+
c3d0: 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  +)..      {..   
c3e0: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
c3f0: 43 6f 6d 70 61 72 65 28 63 6f 6c 75 6d 6e 4e 61  Compare(columnNa
c400: 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 73  me, ColumnName(s
c410: 74 6d 74 2c 20 6e 29 2c 20 53 74 72 69 6e 67 43  tmt, n), StringC
c420: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
c430: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20  lIgnoreCase) == 
c440: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  0)..          re
c450: 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 7d  turn n;..      }
c460: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d  ..      return -
c470: 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  1;..    }....   
c480: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c490: 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
c4a0: 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51 4c  OriginalName(SQL
c4b0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
c4c0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
c4d0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
c4e0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
c4f0: 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a    int len = 0;..
c500: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
c510: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
c520: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c530: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
c540: 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  gin_name_interop
c550: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
c560: 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c  mt, index, ref l
c570: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
c580: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
c590: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
c5a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c5b0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
c5c0: 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74  origin_name(stmt
c5d0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
c5e0: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
c5f0: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
c600: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
c610: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
c620: 6e 44 61 74 61 62 61 73 65 4e 61 6d 65 28 53 51  nDatabaseName(SQ
c630: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
c640: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
c650: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
c660: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
c670: 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d     int len = 0;.
c680: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
c690: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
c6a0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c6b0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
c6c0: 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69 6e 74 65  tabase_name_inte
c6d0: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
c6e0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65  _stmt, index, re
c6f0: 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  f len), len);..#
c700: 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
c710: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
c720: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
c730: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
c740: 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
c750: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
c760: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b  mt, index), -1);
c770: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
c780: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
c790: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
c7a0: 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28  ColumnTableName(
c7b0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
c7c0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
c7d0: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
c7e0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
c7f0: 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30       int len = 0
c800: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
c810: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
c820: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c830: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
c840: 74 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72  table_name_inter
c850: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
c860: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66  stmt, index, ref
c870: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
c880: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
c890: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
c8a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
c8b0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
c8c0: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d  n_table_name(stm
c8d0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
c8e0: 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65  index), -1);..#e
c8f0: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
c900: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
c910: 72 69 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d 6e  ride void Column
c920: 4d 65 74 61 44 61 74 61 28 73 74 72 69 6e 67 20  MetaData(string 
c930: 64 61 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67  dataBase, string
c940: 20 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63   table, string c
c950: 6f 6c 75 6d 6e 2c 20 72 65 66 20 73 74 72 69 6e  olumn, ref strin
c960: 67 20 64 61 74 61 54 79 70 65 2c 20 72 65 66 20  g dataType, ref 
c970: 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65  string collateSe
c980: 71 75 65 6e 63 65 2c 20 72 65 66 20 62 6f 6f 6c  quence, ref bool
c990: 20 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 62 6f   notNull, ref bo
c9a0: 6f 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20 72  ol primaryKey, r
c9b0: 65 66 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72  ef bool autoIncr
c9c0: 65 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  ement)..    {.. 
c9d0: 20 20 20 20 20 49 6e 74 50 74 72 20 64 61 74 61       IntPtr data
c9e0: 54 79 70 65 50 74 72 20 3d 20 49 6e 74 50 74 72  TypePtr = IntPtr
c9f0: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e  .Zero;..      In
ca00: 74 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72 20  tPtr collSeqPtr 
ca10: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
ca20: 20 20 20 20 20 20 69 6e 74 20 6e 6e 6f 74 4e 75        int nnotNu
ca30: 6c 6c 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69  ll = 0;..      i
ca40: 6e 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d  nt nprimaryKey =
ca50: 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e   0;..      int n
ca60: 61 75 74 6f 49 6e 63 20 3d 20 30 3b 0d 0a 20 20  autoInc = 0;..  
ca70: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
ca80: 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e  ode n;..      in
ca90: 74 20 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20  t dtLen;..      
caa0: 69 6e 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69  int csLen;....#i
cab0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
cac0: 52 44 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20  RD..      dtLen 
cad0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65  = 0;..      csLe
cae0: 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6e 20  n = 0;..      n 
caf0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
cb00: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61  thods.sqlite3_ta
cb10: 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64  ble_column_metad
cb20: 61 74 61 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  ata_interop(_sql
cb30: 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42 61 73  , ToUTF8(dataBas
cb40: 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65  e), ToUTF8(table
cb50: 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e  ), ToUTF8(column
cb60: 29 2c 20 72 65 66 20 64 61 74 61 54 79 70 65 50  ), ref dataTypeP
cb70: 74 72 2c 20 72 65 66 20 63 6f 6c 6c 53 65 71 50  tr, ref collSeqP
cb80: 74 72 2c 20 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c  tr, ref nnotNull
cb90: 2c 20 72 65 66 20 6e 70 72 69 6d 61 72 79 4b 65  , ref nprimaryKe
cba0: 79 2c 20 72 65 66 20 6e 61 75 74 6f 49 6e 63 2c  y, ref nautoInc,
cbb0: 20 72 65 66 20 64 74 4c 65 6e 2c 20 72 65 66 20   ref dtLen, ref 
cbc0: 63 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  csLen);..#else..
cbd0: 20 20 20 20 20 20 64 74 4c 65 6e 20 3d 20 2d 31        dtLen = -1
cbe0: 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e 20 3d  ;..      csLen =
cbf0: 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 20   -1;....      n 
cc00: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
cc10: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61  thods.sqlite3_ta
cc20: 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64  ble_column_metad
cc30: 61 74 61 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  ata(_sql, ToUTF8
cc40: 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54  (dataBase), ToUT
cc50: 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46  F8(table), ToUTF
cc60: 38 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 64  8(column), ref d
cc70: 61 74 61 54 79 70 65 50 74 72 2c 20 72 65 66 20  ataTypePtr, ref 
cc80: 63 6f 6c 6c 53 65 71 50 74 72 2c 20 72 65 66 20  collSeqPtr, ref 
cc90: 6e 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 6e 70  nnotNull, ref np
cca0: 72 69 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 6e  rimaryKey, ref n
ccb0: 61 75 74 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64 69  autoInc);..#endi
ccc0: 66 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  f..      if (n !
ccd0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
cce0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
ccf0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
cd00: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
cd10: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 64 61 74  ));....      dat
cd20: 61 54 79 70 65 20 3d 20 55 54 46 38 54 6f 53 74  aType = UTF8ToSt
cd30: 72 69 6e 67 28 64 61 74 61 54 79 70 65 50 74 72  ring(dataTypePtr
cd40: 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20 20 20 20 20  , dtLen);..     
cd50: 20 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65   collateSequence
cd60: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
cd70: 63 6f 6c 6c 53 65 71 50 74 72 2c 20 63 73 4c 65  collSeqPtr, csLe
cd80: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6f 74  n);....      not
cd90: 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75 6c 6c  Null = (nnotNull
cda0: 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 70   == 1);..      p
cdb0: 72 69 6d 61 72 79 4b 65 79 20 3d 20 28 6e 70 72  rimaryKey = (npr
cdc0: 69 6d 61 72 79 4b 65 79 20 3d 3d 20 31 29 3b 0d  imaryKey == 1);.
cdd0: 0a 20 20 20 20 20 20 61 75 74 6f 49 6e 63 72 65  .      autoIncre
cde0: 6d 65 6e 74 20 3d 20 28 6e 61 75 74 6f 49 6e 63  ment = (nautoInc
cdf0: 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a   == 1);..    }..
ce00: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ce10: 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47  verride double G
ce20: 65 74 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53  etDouble(SQLiteS
ce30: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
ce40: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
ce50: 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76  ..      double v
ce60: 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54  alue;..#if !PLAT
ce70: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
ce80: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c  EWORK..      val
ce90: 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ue = UnsafeNativ
cea0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ceb0: 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73  _column_double(s
cec0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
ced0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 69 66  , index);..#elif
cee0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
cef0: 44 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d  D..      value =
cf00: 20 30 2e 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73   0.0;..      Uns
cf10: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
cf20: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
cf30: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73  double_interop(s
cf40: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
cf50: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
cf60: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
cf70: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
cf80: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
cf90: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
cfa0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61  .      return va
cfb0: 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  lue;..    }.... 
cfc0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
cfd0: 72 69 64 65 20 73 62 79 74 65 20 47 65 74 53 42  ride sbyte GetSB
cfe0: 79 74 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  yte(SQLiteStatem
cff0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
d000: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
d010: 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63     return unchec
d020: 6b 65 64 28 28 73 62 79 74 65 29 28 47 65 74 49  ked((sbyte)(GetI
d030: 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
d040: 29 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c 75  ) & byte.MaxValu
d050: 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  e));..    }.... 
d060: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
d070: 72 69 64 65 20 62 79 74 65 20 47 65 74 42 79 74  ride byte GetByt
d080: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
d090: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
d0a0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
d0b0: 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65   return unchecke
d0c0: 64 28 28 62 79 74 65 29 28 47 65 74 49 6e 74 33  d((byte)(GetInt3
d0d0: 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26  2(stmt, index) &
d0e0: 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65 29 29   byte.MaxValue))
d0f0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
d100: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
d110: 65 20 73 68 6f 72 74 20 47 65 74 49 6e 74 31 36  e short GetInt16
d120: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
d130: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
d140: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
d150: 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
d160: 28 28 73 68 6f 72 74 29 28 47 65 74 49 6e 74 33  ((short)(GetInt3
d170: 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26  2(stmt, index) &
d180: 20 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75 65   ushort.MaxValue
d190: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
d1a0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
d1b0: 69 64 65 20 75 73 68 6f 72 74 20 47 65 74 55 49  ide ushort GetUI
d1c0: 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61 74 65  nt16(SQLiteState
d1d0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
d1e0: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
d1f0: 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65      return unche
d200: 63 6b 65 64 28 28 75 73 68 6f 72 74 29 28 47 65  cked((ushort)(Ge
d210: 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64  tInt32(stmt, ind
d220: 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61 78  ex) & ushort.Max
d230: 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d  Value));..    }.
d240: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
d250: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74  override int Get
d260: 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74  Int32(SQLiteStat
d270: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
d280: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
d290: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
d2a0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
d2b0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
d2c0: 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  nt(stmt._sqlite_
d2d0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
d2e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d2f0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75 69  rnal override ui
d300: 6e 74 20 47 65 74 55 49 6e 74 33 32 28 53 51 4c  nt GetUInt32(SQL
d310: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
d320: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
d330: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
d340: 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75 69  rn unchecked((ui
d350: 6e 74 29 47 65 74 49 6e 74 33 32 28 73 74 6d 74  nt)GetInt32(stmt
d360: 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20  , index));..    
d370: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
d380: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
d390: 47 65 74 49 6e 74 36 34 28 53 51 4c 69 74 65 53  GetInt64(SQLiteS
d3a0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
d3b0: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
d3c0: 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c  ..      long val
d3d0: 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ue;..#if !PLATFO
d3e0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
d3f0: 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65  ORK..      value
d400: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
d410: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
d420: 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74  olumn_int64(stmt
d430: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
d440: 6e 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53  ndex);..#elif !S
d450: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
d460: 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 30 3b        value = 0;
d470: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
d480: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d490: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34  te3_column_int64
d4a0: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
d4b0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
d4c0: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
d4d0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
d4e0: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
d4f0: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
d500: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
d510: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
d520: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d530: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75  ernal override u
d540: 6c 6f 6e 67 20 47 65 74 55 49 6e 74 36 34 28 53  long GetUInt64(S
d550: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
d560: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
d570: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
d580: 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28  turn unchecked((
d590: 75 6c 6f 6e 67 29 47 65 74 49 6e 74 36 34 28 73  ulong)GetInt64(s
d5a0: 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20  tmt, index));.. 
d5b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d5c0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
d5d0: 72 69 6e 67 20 47 65 74 54 65 78 74 28 53 51 4c  ring GetText(SQL
d5e0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
d5f0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
d600: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
d610: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
d620: 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a    int len = 0;..
d630: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
d640: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
d650: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d660: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
d670: 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  t_interop(stmt._
d680: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
d690: 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65  ex, ref len), le
d6a0: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
d6b0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
d6c0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
d6d0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d6e0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74  3_column_text(st
d6f0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
d700: 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20 20   index),..      
d710: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
d720: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
d730: 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e  lumn_bytes(stmt.
d740: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
d750: 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  dex));..#endif..
d760: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d770: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 44  ernal override D
d780: 61 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54  ateTime GetDateT
d790: 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ime(SQLiteStatem
d7a0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
d7b0: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
d7c0: 20 20 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65     if (_datetime
d7d0: 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65  Format == SQLite
d7e0: 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b  DateFormats.Tick
d7f0: 73 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  s)..        retu
d800: 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 47 65  rn ToDateTime(Ge
d810: 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
d820: 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69  ex), _datetimeKi
d830: 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65  nd);..      else
d840: 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46 6f   if (_datetimeFo
d850: 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44 61  rmat == SQLiteDa
d860: 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e  teFormats.Julian
d870: 44 61 79 29 0d 0a 20 20 20 20 20 20 20 20 72 65  Day)..        re
d880: 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28  turn ToDateTime(
d890: 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20  GetDouble(stmt, 
d8a0: 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d  index), _datetim
d8b0: 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65  eKind);..      e
d8c0: 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d  lse if (_datetim
d8d0: 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74  eFormat == SQLit
d8e0: 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69  eDateFormats.Uni
d8f0: 78 45 70 6f 63 68 29 0d 0a 20 20 20 20 20 20 20  xEpoch)..       
d900: 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69   return ToDateTi
d910: 6d 65 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74  me(GetInt32(stmt
d920: 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74  , index), _datet
d930: 69 6d 65 4b 69 6e 64 29 3b 0d 0a 0d 0a 23 69 66  imeKind);....#if
d940: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
d950: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
d960: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74   = 0;..      ret
d970: 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55  urn ToDateTime(U
d980: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
d990: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
d9a0: 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73  n_text_interop(s
d9b0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
d9c0: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e  , index, ref len
d9d0: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
d9e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f  .      return To
d9f0: 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e  DateTime(UnsafeN
da00: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
da10: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
da20: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
da30: 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20  mt, index),..   
da40: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
da50: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
da60: 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74  _column_bytes(st
da70: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
da80: 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69   index));..#endi
da90: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
daa0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
dab0: 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73 28  e long GetBytes(
dac0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
dad0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
dae0: 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74   int nDataOffset
daf0: 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20  , byte[] bDest, 
db00: 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20  int nStart, int 
db10: 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d  nLength)..    {.
db20: 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20  .      int nlen 
db30: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
db40: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
db50: 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e  lumn_bytes(stmt.
db60: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
db70: 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  dex);....      /
db80: 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74  / If no destinat
db90: 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75  ion buffer, retu
dba0: 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64  rn the size need
dbb0: 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62  ed...      if (b
dbc0: 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  Dest == null) re
dbd0: 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20  turn nlen;....  
dbe0: 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20      int nCopied 
dbf0: 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  = nLength;....  
dc00: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
dc10: 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74  + nStart > bDest
dc20: 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64  .Length) nCopied
dc30: 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20   = bDest.Length 
dc40: 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20  - nStart;..     
dc50: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
dc60: 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65  DataOffset > nle
dc70: 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65  n) nCopied = nle
dc80: 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b  n - nDataOffset;
dc90: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
dca0: 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20  opied > 0)..    
dcb0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
dcc0: 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65  Ptr ptr = Unsafe
dcd0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
dce0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f  lite3_column_blo
dcf0: 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  b(stmt._sqlite_s
dd00: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a  tmt, index);....
dd10: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
dd20: 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70 74  Copy((IntPtr)(pt
dd30: 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44  r.ToInt64() + nD
dd40: 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73  ataOffset), bDes
dd50: 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69  t, nStart, nCopi
dd60: 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ed);..      }.. 
dd70: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
dd80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70   {..        nCop
dd90: 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ied = 0;..      
dda0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
ddb0: 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20  n nCopied;..    
ddc0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
ddd0: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
dde0: 47 65 74 43 68 61 72 73 28 53 51 4c 69 74 65 53  GetChars(SQLiteS
ddf0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
de00: 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44  nt index, int nD
de10: 61 74 61 4f 66 66 73 65 74 2c 20 63 68 61 72 5b  ataOffset, char[
de20: 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74  ] bDest, int nSt
de30: 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68  art, int nLength
de40: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
de50: 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20  int nlen;..     
de60: 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e   int nCopied = n
de70: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
de80: 20 73 74 72 69 6e 67 20 73 74 72 20 3d 20 47 65   string str = Ge
de90: 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65  tText(stmt, inde
dea0: 78 29 3b 0d 0a 20 20 20 20 20 20 6e 6c 65 6e 20  x);..      nlen 
deb0: 3d 20 73 74 72 2e 4c 65 6e 67 74 68 3b 0d 0a 0d  = str.Length;...
dec0: 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74  .      if (bDest
ded0: 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
dee0: 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20   nlen;....      
def0: 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53  if (nCopied + nS
df00: 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e  tart > bDest.Len
df10: 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62  gth) nCopied = b
df20: 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53  Dest.Length - nS
df30: 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20  tart;..      if 
df40: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61  (nCopied + nData
df50: 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e  Offset > nlen) n
df60: 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20  Copied = nlen - 
df70: 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a  nDataOffset;....
df80: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
df90: 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  d > 0)..        
dfa0: 73 74 72 2e 43 6f 70 79 54 6f 28 6e 44 61 74 61  str.CopyTo(nData
dfb0: 4f 66 66 73 65 74 2c 20 62 44 65 73 74 2c 20 6e  Offset, bDest, n
dfc0: 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b  Start, nCopied);
dfd0: 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 6e 43 6f  ..      else nCo
dfe0: 70 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20  pied = 0;....   
dff0: 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65     return nCopie
e000: 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  d;..    }....   
e010: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
e020: 64 65 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53  de bool IsNull(S
e030: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
e040: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
e050: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
e060: 74 75 72 6e 20 28 43 6f 6c 75 6d 6e 41 66 66 69  turn (ColumnAffi
e070: 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78  nity(stmt, index
e080: 29 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74  ) == TypeAffinit
e090: 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d  y.Null);..    }.
e0a0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
e0b0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 41 67 67  override int Agg
e0c0: 72 65 67 61 74 65 43 6f 75 6e 74 28 49 6e 74 50  regateCount(IntP
e0d0: 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20  tr context)..   
e0e0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
e0f0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
e100: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67  hods.sqlite3_agg
e110: 72 65 67 61 74 65 5f 63 6f 75 6e 74 28 63 6f 6e  regate_count(con
e120: 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  text);..    }...
e130: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
e140: 65 72 72 69 64 65 20 76 6f 69 64 20 43 72 65 61  erride void Crea
e150: 74 65 46 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e  teFunction(strin
e160: 67 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69  g strFunction, i
e170: 6e 74 20 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e  nt nArgs, bool n
e180: 65 65 64 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69  eedCollSeq, SQLi
e190: 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c  teCallback func,
e1a0: 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20   SQLiteCallback 
e1b0: 66 75 6e 63 73 74 65 70 2c 20 53 51 4c 69 74 65  funcstep, SQLite
e1c0: 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75  FinalCallback fu
e1d0: 6e 63 66 69 6e 61 6c 29 0d 0a 20 20 20 20 7b 0d  ncfinal)..    {.
e1e0: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
e1f0: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66  orCode n;....#if
e200: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
e210: 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  D..      n = Uns
e220: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
e230: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
e240: 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70  function_interop
e250: 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
e260: 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67  rFunction), nArg
e270: 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72  s, 4, IntPtr.Zer
e280: 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65  o, func, funcste
e290: 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e  p, funcfinal, (n
e2a0: 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72  eedCollSeq == tr
e2b0: 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 20  ue) ? 1 : 0);.. 
e2c0: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
e2d0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
e2e0: 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ) n = UnsafeNati
e2f0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
e300: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
e310: 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  n_interop(_sql, 
e320: 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
e330: 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49  on), nArgs, 1, I
e340: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
e350: 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
e360: 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c  final, (needColl
e370: 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31  Seq == true) ? 1
e380: 20 3a 20 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   : 0);..#else.. 
e390: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
e3a0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
e3b0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
e3c0: 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46  tion(_sql, ToUTF
e3d0: 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
e3e0: 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72  nArgs, 4, IntPtr
e3f0: 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
e400: 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
e410: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
e420: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
e430: 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66  de.Ok) n = Unsaf
e440: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
e450: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
e460: 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55  nction(_sql, ToU
e470: 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29  TF8(strFunction)
e480: 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50  , nArgs, 1, IntP
e490: 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66  tr.Zero, func, f
e4a0: 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
e4b0: 61 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  al);..#endif..  
e4c0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
e4d0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
e4e0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
e4f0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
e500: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
e510: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
e520: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
e530: 6f 69 64 20 43 72 65 61 74 65 43 6f 6c 6c 61 74  oid CreateCollat
e540: 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 43 6f  ion(string strCo
e550: 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c 69 74 65 43  llation, SQLiteC
e560: 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 2c 20 53  ollation func, S
e570: 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66  QLiteCollation f
e580: 75 6e 63 31 36 29 0d 0a 20 20 20 20 7b 0d 0a 20  unc16)..    {.. 
e590: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
e5a0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
e5b0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
e5c0: 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
e5d0: 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54  ation(_sql, ToUT
e5e0: 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29  F8(strCollation)
e5f0: 2c 20 32 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 2, IntPtr.Zero
e600: 2c 20 66 75 6e 63 31 36 29 3b 0d 0a 20 20 20 20  , func16);..    
e610: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
e620: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e  eErrorCode.Ok) n
e630: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
e640: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
e650: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
e660: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
e670: 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 31 2c 20 49  Collation), 1, I
e680: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
e690: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
e6a0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
e6b0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
e6c0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
e6d0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
e6e0: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
e6f0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
e700: 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74  ride int Context
e710: 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43  CollateCompare(C
e720: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
e730: 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72  Enum enc, IntPtr
e740: 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67   context, string
e750: 20 73 31 2c 20 73 74 72 69 6e 67 20 73 32 29 0d   s1, string s2).
e760: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
e770: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
e780: 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a      byte[] b1;..
e790: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b        byte[] b2;
e7a0: 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54  ..      System.T
e7b0: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e  ext.Encoding con
e7c0: 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a  verter = null;..
e7d0: 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28  ..      switch (
e7e0: 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  enc)..      {.. 
e7f0: 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
e800: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
e810: 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20  m.UTF8:..       
e820: 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
e830: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
e840: 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20  ing.UTF8;..     
e850: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
e860: 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
e870: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
e880: 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20  UTF16LE:..      
e890: 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
e8a0: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
e8b0: 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20  ding.Unicode;.. 
e8c0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
e8d0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
e8e0: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
e8f0: 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20  num.UTF16BE:..  
e900: 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
e910: 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
e920: 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69  Encoding.BigEndi
e930: 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20  anUnicode;..    
e940: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
e950: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62      }....      b
e960: 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65  1 = converter.Ge
e970: 74 42 79 74 65 73 28 73 31 29 3b 0d 0a 20 20 20  tBytes(s1);..   
e980: 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65     b2 = converte
e990: 72 2e 47 65 74 42 79 74 65 73 28 73 32 29 3b 0d  r.GetBytes(s2);.
e9a0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
e9b0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
e9c0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ods.sqlite3_cont
e9d0: 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f  ext_collcompare_
e9e0: 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c  interop(context,
e9f0: 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20   b1, b1.Length, 
ea00: 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d  b2, b2.Length);.
ea10: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
ea20: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
ea30: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
ea40: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
ea50: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
ea60: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
ea70: 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d  ontextCollateCom
ea80: 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e  pare(CollationEn
ea90: 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20  codingEnum enc, 
eaa0: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
eab0: 63 68 61 72 5b 5d 20 63 31 2c 20 63 68 61 72 5b  char[] c1, char[
eac0: 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ] c2)..    {..#i
ead0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
eae0: 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  RD..      byte[]
eaf0: 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65   b1;..      byte
eb00: 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79  [] b2;..      Sy
eb10: 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
eb20: 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e  ng converter = n
eb30: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77  ull;....      sw
eb40: 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20  itch (enc)..    
eb50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73    {..        cas
eb60: 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
eb70: 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20  ingEnum.UTF8:.. 
eb80: 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
eb90: 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
eba0: 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d  .Encoding.UTF8;.
ebb0: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
ebc0: 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
ebd0: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
ebe0: 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a  gEnum.UTF16LE:..
ebf0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
ec00: 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
ec10: 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f  t.Encoding.Unico
ec20: 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  de;..          b
ec30: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
ec40: 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
ec50: 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42  odingEnum.UTF16B
ec60: 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
ec70: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
ec80: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42  .Text.Encoding.B
ec90: 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b  igEndianUnicode;
eca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
ecb0: 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  k;..      }.... 
ecc0: 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72       b1 = conver
ecd0: 74 65 72 2e 47 65 74 42 79 74 65 73 28 63 31 29  ter.GetBytes(c1)
ece0: 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f  ;..      b2 = co
ecf0: 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
ed00: 28 63 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  (c2);....      r
ed10: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
ed20: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
ed30: 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f  3_context_collco
ed40: 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f  mpare_interop(co
ed50: 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65  ntext, b1, b1.Le
ed60: 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e  ngth, b2, b2.Len
ed70: 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  gth);..#else..  
ed80: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
ed90: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
eda0: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
edb0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
edc0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
edd0: 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   CollationSequen
ede0: 63 65 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53  ce GetCollationS
edf0: 65 71 75 65 6e 63 65 28 53 51 4c 69 74 65 46 75  equence(SQLiteFu
ee00: 6e 63 74 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74  nction func, Int
ee10: 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20  Ptr context)..  
ee20: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
ee30: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
ee40: 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   CollationSequen
ee50: 63 65 20 73 65 71 20 3d 20 6e 65 77 20 43 6f 6c  ce seq = new Col
ee60: 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 29  lationSequence()
ee70: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  ;..      int len
ee80: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74   = 0;..      int
ee90: 20 74 79 70 65 20 3d 20 30 3b 0d 0a 20 20 20 20   type = 0;..    
eea0: 20 20 69 6e 74 20 65 6e 63 20 3d 20 30 3b 0d 0a    int enc = 0;..
eeb0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d        IntPtr p =
eec0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
eed0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
eee0: 74 65 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74  text_collseq_int
eef0: 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65  erop(context, re
ef00: 66 20 74 79 70 65 2c 20 72 65 66 20 65 6e 63 2c  f type, ref enc,
ef10: 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20   ref len);....  
ef20: 20 20 20 20 69 66 20 28 70 20 21 3d 20 6e 75 6c      if (p != nul
ef30: 6c 29 20 73 65 71 2e 4e 61 6d 65 20 3d 20 55 54  l) seq.Name = UT
ef40: 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65  F8ToString(p, le
ef50: 6e 29 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 54  n);..      seq.T
ef60: 79 70 65 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e  ype = (Collation
ef70: 54 79 70 65 45 6e 75 6d 29 74 79 70 65 3b 0d 0a  TypeEnum)type;..
ef80: 20 20 20 20 20 20 73 65 71 2e 5f 66 75 6e 63 20        seq._func 
ef90: 3d 20 66 75 6e 63 3b 0d 0a 20 20 20 20 20 20 73  = func;..      s
efa0: 65 71 2e 45 6e 63 6f 64 69 6e 67 20 3d 20 28 43  eq.Encoding = (C
efb0: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
efc0: 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20 20  Enum)enc;....   
efd0: 20 20 20 72 65 74 75 72 6e 20 73 65 71 3b 0d 0a     return seq;..
efe0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
eff0: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
f000: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
f010: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
f020: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
f030: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
f040: 65 74 50 61 72 61 6d 56 61 6c 75 65 42 79 74 65  etParamValueByte
f050: 73 28 49 6e 74 50 74 72 20 70 2c 20 69 6e 74 20  s(IntPtr p, int 
f060: 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74  nDataOffset, byt
f070: 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  e[] bDest, int n
f080: 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
f090: 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
f0a0: 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73    int nlen = Uns
f0b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
f0c0: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  .sqlite3_value_b
f0d0: 79 74 65 73 28 70 29 3b 0d 0a 0d 0a 20 20 20 20  ytes(p);....    
f0e0: 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69    // If no desti
f0f0: 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72  nation buffer, r
f100: 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e  eturn the size n
f110: 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66  eeded...      if
f120: 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29   (bDest == null)
f130: 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d   return nlen;...
f140: 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69  .      int nCopi
f150: 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d  ed = nLength;...
f160: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
f170: 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44  ed + nStart > bD
f180: 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70  est.Length) nCop
f190: 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67  ied = bDest.Leng
f1a0: 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20  th - nStart;..  
f1b0: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
f1c0: 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20  + nDataOffset > 
f1d0: 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20  nlen) nCopied = 
f1e0: 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73  nlen - nDataOffs
f1f0: 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  et;....      if 
f200: 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20  (nCopied > 0).. 
f210: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f220: 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73  IntPtr ptr = Uns
f230: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
f240: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  .sqlite3_value_b
f250: 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20  lob(p);....     
f260: 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28     Marshal.Copy(
f270: 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49  (IntPtr)(ptr.ToI
f280: 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66  nt64() + nDataOf
f290: 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53  fset), bDest, nS
f2a0: 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d  tart, nCopied);.
f2b0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
f2c0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  else..      {.. 
f2d0: 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d         nCopied =
f2e0: 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a   0;..      }....
f2f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f        return nCo
f300: 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  pied;..    }....
f310: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
f320: 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74  rride double Get
f330: 50 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65  ParamValueDouble
f340: 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
f350: 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c    {..      doubl
f360: 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50  e value;..#if !P
f370: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
f380: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
f390: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
f3a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f3b0: 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65  te3_value_double
f3c0: 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53  (ptr);..#elif !S
f3d0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
f3e0: 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 30 2e        value = 0.
f3f0: 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  0;..      Unsafe
f400: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f410: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62  lite3_value_doub
f420: 6c 65 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20  le_interop(ptr, 
f430: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
f440: 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
f450: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
f460: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
f470: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65  #endif..      re
f480: 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20  turn value;..   
f490: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
f4a0: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
f4b0: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74  GetParamValueInt
f4c0: 33 32 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a  32(IntPtr ptr)..
f4d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
f4e0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
f4f0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
f500: 76 61 6c 75 65 5f 69 6e 74 28 70 74 72 29 3b 0d  value_int(ptr);.
f510: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
f520: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
f530: 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c  long GetParamVal
f540: 75 65 49 6e 74 36 34 28 49 6e 74 50 74 72 20 70  ueInt64(IntPtr p
f550: 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  tr)..    {..    
f560: 20 20 49 6e 74 36 34 20 76 61 6c 75 65 3b 0d 0a    Int64 value;..
f570: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
f580: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
f590: 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e        value = Un
f5a0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f5b0: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
f5c0: 69 6e 74 36 34 28 70 74 72 29 3b 0d 0a 23 65 6c  int64(ptr);..#el
f5d0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
f5e0: 41 52 44 0d 0a 20 20 20 20 20 20 76 61 6c 75 65  ARD..      value
f5f0: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73   = 0;..      Uns
f600: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
f610: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69  .sqlite3_value_i
f620: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 70 74 72  nt64_interop(ptr
f630: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
f640: 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
f650: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
f660: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
f670: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
f680: 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20  return value;.. 
f690: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
f6a0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
f6b0: 72 69 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c  ring GetParamVal
f6c0: 75 65 54 65 78 74 28 49 6e 74 50 74 72 20 70 74  ueText(IntPtr pt
f6d0: 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  r)..    {..#if !
f6e0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
f6f0: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d  .      int len =
f700: 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72   0;..      retur
f710: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
f720: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
f730: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
f740: 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 70 74  _text_interop(pt
f750: 72 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e  r, ref len), len
f760: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
f770: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
f780: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
f790: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
f7a0: 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 74 72 29  _value_text(ptr)
f7b0: 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  ,..        Unsaf
f7c0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
f7d0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
f7e0: 65 73 28 70 74 72 29 29 3b 0d 0a 23 65 6e 64 69  es(ptr));..#endi
f7f0: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
f800: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
f810: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 47  e TypeAffinity G
f820: 65 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65  etParamValueType
f830: 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
f840: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
f850: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
f860: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
f870: 6c 75 65 5f 74 79 70 65 28 70 74 72 29 3b 0d 0a  lue_type(ptr);..
f880: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
f890: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
f8a0: 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f 62 28 49  oid ReturnBlob(I
f8b0: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 62  ntPtr context, b
f8c0: 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20  yte[] value)..  
f8d0: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
f8e0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
f8f0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c  qlite3_result_bl
f900: 6f 62 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75  ob(context, valu
f910: 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c  e, value.Length,
f920: 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
f930: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
f940: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
f950: 76 6f 69 64 20 52 65 74 75 72 6e 44 6f 75 62 6c  void ReturnDoubl
f960: 65 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  e(IntPtr context
f970: 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d  , double value).
f980: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41  .    {..#if !PLA
f990: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
f9a0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e  MEWORK..      Un
f9b0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f9c0: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
f9d0: 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c  _double(context,
f9e0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20   value);..#elif 
f9f0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
fa00: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
fa10: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
fa20: 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c  te3_result_doubl
fa30: 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78  e_interop(contex
fa40: 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  t, ref value);..
fa50: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
fa60: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
fa70: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
fa80: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
fa90: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
faa0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
fab0: 65 74 75 72 6e 45 72 72 6f 72 28 49 6e 74 50 74  eturnError(IntPt
fac0: 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e  r context, strin
fad0: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
fae0: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
faf0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
fb00: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
fb10: 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28  context, ToUTF8(
fb20: 76 61 6c 75 65 29 2c 20 76 61 6c 75 65 2e 4c 65  value), value.Le
fb30: 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ngth);..    }...
fb40: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
fb50: 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
fb60: 72 6e 49 6e 74 33 32 28 49 6e 74 50 74 72 20 63  rnInt32(IntPtr c
fb70: 6f 6e 74 65 78 74 2c 20 69 6e 74 20 76 61 6c 75  ontext, int valu
fb80: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
fb90: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
fba0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
fbb0: 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c  ult_int(context,
fbc0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d   value);..    }.
fbd0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
fbe0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
fbf0: 74 75 72 6e 49 6e 74 36 34 28 49 6e 74 50 74 72  turnInt64(IntPtr
fc00: 20 63 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67 20 76   context, long v
fc10: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  alue)..    {..#i
fc20: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
fc30: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
fc40: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
fc50: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
fc60: 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e  result_int64(con
fc70: 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  text, value);..#
fc80: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
fc90: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73  NDARD..      Uns
fca0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
fcb0: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
fcc0: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 63 6f  int64_interop(co
fcd0: 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65  ntext, ref value
fce0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
fcf0: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
fd00: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
fd10: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
fd20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
fd30: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
fd40: 69 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28 49 6e  id ReturnNull(In
fd50: 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20  tPtr context).. 
fd60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
fd70: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
fd80: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e  sqlite3_result_n
fd90: 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20  ull(context);.. 
fda0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
fdb0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
fdc0: 69 64 20 52 65 74 75 72 6e 54 65 78 74 28 49 6e  id ReturnText(In
fdd0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74  tPtr context, st
fde0: 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  ring value)..   
fdf0: 20 7b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d   {..      byte[]
fe00: 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75   b = ToUTF8(valu
fe10: 65 29 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  e);..      Unsaf
fe20: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
fe30: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
fe40: 78 74 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54  xt(context, ToUT
fe50: 46 38 28 76 61 6c 75 65 29 2c 20 62 2e 4c 65 6e  F8(value), b.Len
fe60: 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72  gth - 1, (IntPtr
fe70: 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  )(-1));..    }..
fe80: 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49  ..#if INTEROP_VI
fe90: 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20  RTUAL_TABLE..   
fea0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
feb0: 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68      /// Calls th
fec0: 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20  e native SQLite 
fed0: 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20  core library in 
fee0: 6f 72 64 65 72 20 74 6f 20 63 72 65 61 74 65 20  order to create 
fef0: 61 20 64 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20  a disposable..  
ff00: 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20 63 6f 6e    /// module con
ff10: 74 61 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c  taining the impl
ff20: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20  ementation of a 
ff30: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
ff40: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
ff50: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
ff60: 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22  am name="module"
ff70: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d  >..    /// The m
ff80: 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 74 6f 20  odule object to 
ff90: 62 65 20 75 73 65 64 20 77 68 65 6e 20 63 72 65  be used when cre
ffa0: 61 74 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65  ating the native
ffb0: 20 64 69 73 70 6f 73 61 62 6c 65 20 6d 6f 64 75   disposable modu
ffc0: 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  le...    /// </p
ffd0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
ffe0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67  param name="flag
fff0: 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  s">..    /// The
10000 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 61   flags for the a
10010 73 73 6f 63 69 61 74 65 64 20 3c 73 65 65 20 63  ssociated <see c
10020 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65  ref="SQLiteConne
10030 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74  ction" /> object
10040 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
10050 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
10060 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
10070 69 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 4d  ide void CreateM
10080 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75  odule(SQLiteModu
10090 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74  le module, SQLit
100a0 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
100b0 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a   flags)..    {..
100c0 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
100d0 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
100e0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
100f0 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
10100 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65  xception("module
10110 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
10120 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
10130 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
10140 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 29 20 21  s.NoLogModule) !
10150 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
10160 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64  onFlags.NoLogMod
10170 75 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ule)..        {.
10180 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64  .            mod
10190 75 6c 65 2e 4c 6f 67 45 72 72 6f 72 73 20 3d 20  ule.LogErrors = 
101a0 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
101b0 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
101c0 4c 6f 67 4d 6f 64 75 6c 65 45 72 72 6f 72 29 20  LogModuleError) 
101d0 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
101e0 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75  ionFlags.LogModu
101f0 6c 65 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  leError);..     
10200 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f         module.Lo
10210 67 45 78 63 65 70 74 69 6f 6e 73 20 3d 20 28 28  gExceptions = ((
10220 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
10230 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
10240 67 4d 6f 64 75 6c 65 45 78 63 65 70 74 69 6f 6e  gModuleException
10250 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
10260 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f  ctionFlags.LogMo
10270 64 75 6c 65 45 78 63 65 70 74 69 6f 6e 29 3b 0d  duleException);.
10280 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
10290 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
102a0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
102b0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
102c0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
102d0 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61  connection has a
102e0 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
102f0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
10300 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28  etLoadExtension(
10310 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
10320 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 55 6e  LoadExtension(Un
10330 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10340 73 2e 53 51 4c 49 54 45 5f 44 4c 4c 2c 20 22 73  s.SQLITE_DLL, "s
10350 71 6c 69 74 65 33 5f 76 74 73 68 69 6d 5f 69 6e  qlite3_vtshim_in
10360 69 74 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  it");....       
10370 20 69 66 20 28 6d 6f 64 75 6c 65 2e 43 72 65 61   if (module.Crea
10380 74 65 44 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75  teDisposableModu
10390 6c 65 28 5f 73 71 6c 29 29 0d 0a 20 20 20 20 20  le(_sql))..     
103a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
103b0 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20 3d    if (_modules =
103c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
103d0 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65           _module
103e0 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  s = new Dictiona
103f0 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69 74  ry<string, SQLit
10400 65 4d 6f 64 75 6c 65 3e 28 29 3b 0d 0a 0d 0a 20  eModule>();.... 
10410 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75             _modu
10420 6c 65 73 2e 41 64 64 28 6d 6f 64 75 6c 65 2e 4e  les.Add(module.N
10430 61 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b 0d 0a 0d  ame, module);...
10440 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
10450 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20  (_usePool)..    
10460 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10470 20 20 20 20 20 20 20 20 20 20 20 5f 75 73 65 50             _useP
10480 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  ool = false;....
10490 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
104a0 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
104b0 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
104c0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
104d0 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e  riteLine(String.
104e0 46 6f 72 6d 61 74 28 22 43 72 65 61 74 65 4d 6f  Format("CreateMo
104f0 64 75 6c 65 20 28 50 6f 6f 6c 29 20 44 69 73 61  dule (Pool) Disa
10500 62 6c 65 64 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c  bled: {0}", _sql
10510 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
10520 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
10530 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
10540 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lse..        {..
10550 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
10560 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
10570 70 74 69 6f 6e 28 47 65 74 4c 61 73 74 45 72 72  ption(GetLastErr
10580 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  or());..        
10590 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
105a0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
105b0 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65     /// Calls the
105c0 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63   native SQLite c
105d0 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f  ore library in o
105e0 72 64 65 72 20 74 6f 20 63 6c 65 61 6e 75 70 20  rder to cleanup 
105f0 74 68 65 20 72 65 73 6f 75 72 63 65 73 0d 0a 20  the resources.. 
10600 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65     /// associate
10610 64 20 77 69 74 68 20 61 20 6d 6f 64 75 6c 65 20  d with a module 
10620 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 69  containing the i
10630 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
10640 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
10650 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
10660 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
10670 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75  param name="modu
10680 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  le">..    /// Th
10690 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20  e module object 
106a0 70 72 65 76 69 6f 75 73 6c 79 20 70 61 73 73 65  previously passe
106b0 64 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72  d to the <see cr
106c0 65 66 3d 22 43 72 65 61 74 65 4d 6f 64 75 6c 65  ef="CreateModule
106d0 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6d 65  " />..    /// me
106e0 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  thod...    /// <
106f0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
10700 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c   <param name="fl
10710 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ags">..    /// T
10720 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65  he flags for the
10730 20 61 73 73 6f 63 69 61 74 65 64 20 3c 73 65 65   associated <see
10740 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e   cref="SQLiteCon
10750 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65  nection" /> obje
10760 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
10770 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
10780 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10790 72 72 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f  rride void Dispo
107a0 73 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d  seModule(SQLiteM
107b0 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51  odule module, SQ
107c0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
107d0 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20  ags flags)..    
107e0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d  {..        if (m
107f0 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
10800 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
10810 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
10820 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64  llException("mod
10830 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ule");....      
10840 20 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65    module.Dispose
10850 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64  ();..    }..#end
10860 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  if....    intern
10870 61 6c 20 6f 76 65 72 72 69 64 65 20 49 6e 74 50  al override IntP
10880 74 72 20 41 67 67 72 65 67 61 74 65 43 6f 6e 74  tr AggregateCont
10890 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ext(IntPtr conte
108a0 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  xt)..    {..    
108b0 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
108c0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
108d0 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63  ite3_aggregate_c
108e0 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20  ontext(context, 
108f0 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69  1);..    }....#i
10900 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  f INTEROP_VIRTUA
10910 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f  L_TABLE..    ///
10920 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
10930 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61  /// Calls the na
10940 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65  tive SQLite core
10950 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65   library in orde
10960 72 20 74 6f 20 64 65 63 6c 61 72 65 20 61 20 76  r to declare a v
10970 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
10980 20 20 2f 2f 2f 20 69 6e 20 72 65 73 70 6f 6e 73    /// in respons
10990 65 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f  e to a call into
109a0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
109b0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
109c0 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d  ule.xCreate" />.
109d0 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65  .    /// or <see
109e0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
109f0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e  tiveModule.xConn
10a00 65 63 74 22 20 2f 3e 20 76 69 72 74 75 61 6c 20  ect" /> virtual 
10a10 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a  table methods...
10a20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
10a30 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
10a40 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22  am name="module"
10a50 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76  >..    /// The v
10a60 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64  irtual table mod
10a70 75 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62  ule that is to b
10a80 65 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  e responsible fo
10a90 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  r the virtual ta
10aa0 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 69  ble..    /// bei
10ab0 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20  ng declared...  
10ac0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
10ad0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
10ae0 61 6d 65 3d 22 73 74 72 53 71 6c 22 3e 0d 0a 20  ame="strSql">.. 
10af0 20 20 20 2f 2f 2f 20 54 68 65 20 73 74 72 69 6e     /// The strin
10b00 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  g containing the
10b10 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 64   SQL statement d
10b20 65 73 63 72 69 62 69 6e 67 20 74 68 65 20 76 69  escribing the vi
10b30 72 74 75 61 6c 20 74 61 62 6c 65 20 74 6f 0d 0a  rtual table to..
10b40 20 20 20 20 2f 2f 2f 20 62 65 20 64 65 63 6c 61      /// be decla
10b50 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  red...    /// </
10b60 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
10b70 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72  <param name="err
10b80 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70  or">..    /// Up
10b90 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 65 20  on success, the 
10ba0 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 69 73  contents of this
10bb0 20 70 61 72 61 6d 65 74 65 72 20 61 72 65 20 75   parameter are u
10bc0 6e 64 65 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20  ndefined.  Upon 
10bd0 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f  failure,..    //
10be0 2f 20 69 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74  / it should cont
10bf0 61 69 6e 20 61 6e 20 61 70 70 72 6f 70 72 69 61  ain an appropria
10c00 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  te error message
10c10 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
10c20 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
10c30 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
10c40 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
10c50 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
10c60 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
10c70 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
10c80 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
10c90 45 72 72 6f 72 43 6f 64 65 20 44 65 63 6c 61 72  ErrorCode Declar
10ca0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28 0d 0a  eVirtualTable(..
10cb0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f          SQLiteMo
10cc0 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20  dule module,..  
10cd0 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72        string str
10ce0 53 71 6c 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  Sql,..        re
10cf0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
10d00 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
10d10 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73  ..        if (_s
10d20 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql == null)..   
10d30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10d40 20 20 20 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e      error = "con
10d50 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69  nection has an i
10d60 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 3b 0d  nvalid handle";.
10d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
10d80 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
10d90 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20  ode.Error;..    
10da0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10db0 20 49 6e 74 50 74 72 20 70 53 71 6c 20 3d 20 49   IntPtr pSql = I
10dc0 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
10dd0 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
10de0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10df0 20 20 20 70 53 71 6c 20 3d 20 53 51 4c 69 74 65     pSql = SQLite
10e00 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74  String.Utf8IntPt
10e10 72 46 72 6f 6d 53 74 72 69 6e 67 28 73 74 72 53  rFromString(strS
10e20 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ql);....        
10e30 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
10e40 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
10e50 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10e60 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
10e70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
10e80 20 20 20 5f 73 71 6c 2c 20 70 53 71 6c 29 3b 0d     _sql, pSql);.
10e90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
10ea0 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  f ((n == SQLiteE
10eb0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20  rrorCode.Ok) && 
10ec0 28 6d 6f 64 75 6c 65 20 21 3d 20 6e 75 6c 6c 29  (module != null)
10ed0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10ee0 20 20 20 6d 6f 64 75 6c 65 2e 44 65 63 6c 61 72     module.Declar
10ef0 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20  ed = true;....  
10f00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
10f10 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
10f20 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47  de.Ok) error = G
10f30 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a  etLastError();..
10f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
10f50 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20  turn n;..       
10f60 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61   }..        fina
10f70 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lly..        {..
10f80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10f90 70 53 71 6c 20 21 3d 20 49 6e 74 50 74 72 2e 5a  pSql != IntPtr.Z
10fa0 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
10fb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10fc0 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72       SQLiteMemor
10fd0 79 2e 46 72 65 65 28 70 53 71 6c 29 3b 0d 0a 20  y.Free(pSql);.. 
10fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
10ff0 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  Sql = IntPtr.Zer
11000 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
11010 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
11020 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
11030 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
11040 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69  / Calls the nati
11050 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  ve SQLite core l
11060 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20  ibrary in order 
11070 74 6f 20 64 65 63 6c 61 72 65 20 61 20 76 69 72  to declare a vir
11080 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20  tual table..    
11090 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20  /// function in 
110a0 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 63 61  response to a ca
110b0 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73 65 65  ll into the <see
110c0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
110d0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61  tiveModule.xCrea
110e0 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20  te" />..    /// 
110f0 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  or <see cref="IS
11100 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
11110 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76  e.xConnect" /> v
11120 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74  irtual table met
11130 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  hods...    /// <
11140 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
11150 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
11160 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f  module">..    //
11170 2f 20 54 68 65 20 76 69 72 74 75 61 6c 20 74 61  / The virtual ta
11180 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61 74 20  ble module that 
11190 69 73 20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73  is to be respons
111a0 69 62 6c 65 20 66 6f 72 20 74 68 65 20 76 69 72  ible for the vir
111b0 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20  tual table..    
111c0 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 62 65 69  /// function bei
111d0 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20  ng declared...  
111e0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
111f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
11200 61 6d 65 3d 22 61 72 67 75 6d 65 6e 74 43 6f 75  ame="argumentCou
11210 6e 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  nt">..    /// Th
11220 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
11230 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 66 75 6e  ments to the fun
11240 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c  ction being decl
11250 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ared...    /// <
11260 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
11270 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61   <param name="na
11280 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  me">..    /// Th
11290 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  e name of the fu
112a0 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63  nction being dec
112b0 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lared...    /// 
112c0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
112d0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65  / <param name="e
112e0 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  rror">..    /// 
112f0 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68  Upon success, th
11300 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  e contents of th
11310 69 73 20 70 61 72 61 6d 65 74 65 72 20 61 72 65  is parameter are
11320 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 55 70 6f   undefined.  Upo
11330 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20 20  n failure,..    
11340 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20 63 6f  /// it should co
11350 6e 74 61 69 6e 20 61 6e 20 61 70 70 72 6f 70 72  ntain an appropr
11360 69 61 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61  iate error messa
11370 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ge...    /// </p
11380 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
11390 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
113a0 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
113b0 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
113c0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
113d0 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
113e0 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
113f0 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65 63 6c  teErrorCode Decl
11400 61 72 65 56 69 72 74 75 61 6c 46 75 6e 63 74 69  areVirtualFuncti
11410 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  on(..        SQL
11420 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65  iteModule module
11430 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 61  ,..        int a
11440 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20  rgumentCount,.. 
11450 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
11460 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66  me,..        ref
11470 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
11480 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
11490 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71  .        if (_sq
114a0 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  l == null)..    
114b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
114c0 20 20 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e     error = "conn
114d0 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e  ection has an in
114e0 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 3b 0d 0a  valid handle";..
114f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
11500 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
11510 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20  de.Error;..     
11520 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
11530 49 6e 74 50 74 72 20 70 4e 61 6d 65 20 3d 20 49  IntPtr pName = I
11540 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
11550 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
11560 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11570 20 20 20 70 4e 61 6d 65 20 3d 20 53 51 4c 69 74     pName = SQLit
11580 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50  eString.Utf8IntP
11590 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 6e 61 6d  trFromString(nam
115a0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
115b0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
115c0 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
115d0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
115e0 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66 75 6e 63  e3_overload_func
115f0 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
11600 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70 4e 61         _sql, pNa
11610 6d 65 2c 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e  me, argumentCoun
11620 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
11630 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
11640 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
11650 65 72 72 6f 72 20 3d 20 47 65 74 4c 61 73 74 45  error = GetLastE
11660 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rror();....     
11670 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b         return n;
11680 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
11690 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
116a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
116b0 20 20 20 20 20 69 66 20 28 70 4e 61 6d 65 20 21       if (pName !
116c0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
116d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
116f0 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65  QLiteMemory.Free
11700 28 70 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  (pName);..      
11710 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20            pName 
11720 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
11730 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
11740 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
11750 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
11760 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
11770 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72    /// Enables or
11780 20 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e 73   disabled extens
11790 69 6f 6e 20 6c 6f 61 64 69 6e 67 20 62 79 20 53  ion loading by S
117a0 51 4c 69 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  QLite...    /// 
117b0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
117c0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
117d0 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20 20 2f  "bOnOff">..    /
117e0 2f 2f 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  // True to enabl
117f0 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78 74  e loading of ext
11800 65 6e 73 69 6f 6e 73 2c 20 66 61 6c 73 65 20 74  ensions, false t
11810 6f 20 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20 20  o disable...    
11820 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
11830 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
11840 69 64 65 20 76 6f 69 64 20 53 65 74 4c 6f 61 64  ide void SetLoad
11850 45 78 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20 62  Extension(bool b
11860 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20  OnOff)..    {.. 
11870 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
11880 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
11890 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
118a0 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f  qlite3_enable_lo
118b0 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20  ad_extension(.. 
118c0 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c             _sql,
118d0 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20   (bOnOff ? -1 : 
118e0 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  0));....        
118f0 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
11900 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
11910 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
11920 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
11930 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
11940 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
11950 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
11960 4c 6f 61 64 73 20 61 20 53 51 4c 69 74 65 20 65  Loads a SQLite e
11970 78 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72 79  xtension library
11980 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20   from the named 
11990 66 69 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  file...    /// <
119a0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
119b0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
119c0 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20 20  fileName">..    
119d0 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  /// The name of 
119e0 74 68 65 20 64 79 6e 61 6d 69 63 20 6c 69 6e 6b  the dynamic link
119f0 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 63 6f   library file co
11a00 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65 78 74  ntaining the ext
11a10 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ension...    ///
11a20 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
11a30 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
11a40 70 72 6f 63 4e 61 6d 65 22 3e 0d 0a 20 20 20 20  procName">..    
11a50 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  /// The name of 
11a60 74 68 65 20 65 78 70 6f 72 74 65 64 20 66 75 6e  the exported fun
11a70 63 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 69 6e  ction used to in
11a80 69 74 69 61 6c 69 7a 65 20 74 68 65 20 65 78 74  itialize the ext
11a90 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ension...    ///
11aa0 20 49 66 20 6e 75 6c 6c 2c 20 74 68 65 20 64 65   If null, the de
11ab0 66 61 75 6c 74 20 22 73 71 6c 69 74 65 33 5f 65  fault "sqlite3_e
11ac0 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 22 20 77  xtension_init" w
11ad0 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20 20  ill be used...  
11ae0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
11af0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
11b00 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 61 64 45  rride void LoadE
11b10 78 74 65 6e 73 69 6f 6e 28 73 74 72 69 6e 67 20  xtension(string 
11b20 66 69 6c 65 4e 61 6d 65 2c 20 73 74 72 69 6e 67  fileName, string
11b30 20 70 72 6f 63 4e 61 6d 65 29 0d 0a 20 20 20 20   procName)..    
11b40 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 66  {..        if (f
11b50 69 6c 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29  ileName == null)
11b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
11b70 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
11b80 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 66  NullException("f
11b90 69 6c 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20  ileName");....  
11ba0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 45 72        IntPtr pEr
11bb0 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ror = IntPtr.Zer
11bc0 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  o;....        tr
11bd0 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
11be0 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
11bf0 20 75 74 66 38 46 69 6c 65 4e 61 6d 65 20 3d 20   utf8FileName = 
11c00 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46  UTF8Encoding.UTF
11c10 38 2e 47 65 74 42 79 74 65 73 28 66 69 6c 65 4e  8.GetBytes(fileN
11c20 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 20 20  ame + '\0');..  
11c30 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
11c40 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20   utf8ProcName = 
11c50 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
11c60 20 20 20 20 20 69 66 20 28 70 72 6f 63 4e 61 6d       if (procNam
11c70 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
11c80 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38              utf8
11c90 50 72 6f 63 4e 61 6d 65 20 3d 20 55 54 46 38 45  ProcName = UTF8E
11ca0 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74  ncoding.UTF8.Get
11cb0 42 79 74 65 73 28 70 72 6f 63 4e 61 6d 65 20 2b  Bytes(procName +
11cc0 20 27 5c 30 27 29 3b 0d 0a 0d 0a 20 20 20 20 20   '\0');....     
11cd0 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
11ce0 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
11cf0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
11d00 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65  qlite3_load_exte
11d10 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  nsion(..        
11d20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 75 74          _sql, ut
11d30 66 38 46 69 6c 65 4e 61 6d 65 2c 20 75 74 66 38  f8FileName, utf8
11d40 50 72 6f 63 4e 61 6d 65 2c 20 72 65 66 20 70 45  ProcName, ref pE
11d50 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rror);....      
11d60 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
11d70 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
11d80 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
11d90 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
11da0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
11db0 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 45   UTF8ToString(pE
11dc0 72 72 6f 72 2c 20 2d 31 29 29 3b 0d 0a 20 20 20  rror, -1));..   
11dd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11de0 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
11df0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11e00 69 66 20 28 70 45 72 72 6f 72 20 21 3d 20 49 6e  if (pError != In
11e10 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
11e20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11e30 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
11e40 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
11e50 71 6c 69 74 65 33 5f 66 72 65 65 28 70 45 72 72  qlite3_free(pErr
11e60 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
11e70 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 49        pError = I
11e80 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
11e90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
11ea0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
11eb0 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20      /// Enables 
11ec0 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65  or disabled exte
11ed0 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64 65  nded result code
11ee0 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 53 51  s returned by SQ
11ef0 4c 69 74 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e  Lite..    intern
11f00 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
11f10 20 53 65 74 45 78 74 65 6e 64 65 64 52 65 73 75   SetExtendedResu
11f20 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f 6e  ltCodes(bool bOn
11f30 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  Off)..    {..   
11f40 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
11f50 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
11f60 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
11f70 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73 75  e3_extended_resu
11f80 6c 74 5f 63 6f 64 65 73 28 0d 0a 20 20 20 20 20  lt_codes(..     
11f90 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f       _sql, (bOnO
11fa0 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a  ff ? -1 : 0));..
11fb0 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
11fc0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
11fd0 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
11fe0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
11ff0 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
12000 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f  );..    }..    /
12010 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73 74  // Gets the last
12020 20 53 51 4c 69 74 65 20 65 72 72 6f 72 20 63 6f   SQLite error co
12030 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  de..    internal
12040 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
12050 45 72 72 6f 72 43 6f 64 65 20 52 65 73 75 6c 74  ErrorCode Result
12060 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Code()..    {.. 
12070 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
12080 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12090 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
120a0 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20  _sql);..    }.. 
120b0 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20     /// Gets the 
120c0 6c 61 73 74 20 53 51 4c 69 74 65 20 65 78 74 65  last SQLite exte
120d0 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65 0d  nded error code.
120e0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
120f0 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
12100 6f 72 43 6f 64 65 20 45 78 74 65 6e 64 65 64 52  orCode ExtendedR
12110 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20  esultCode()..   
12120 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
12130 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
12140 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74  hods.sqlite3_ext
12150 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 5f 73  ended_errcode(_s
12160 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ql);..    }.... 
12170 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f 67     /// Add a log
12180 20 6d 65 73 73 61 67 65 20 76 69 61 20 74 68 65   message via the
12190 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65 33 5f   SQLite sqlite3_
121a0 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a  log interface...
121b0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
121c0 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 67 4d 65  rride void LogMe
121d0 73 73 61 67 65 28 53 51 4c 69 74 65 45 72 72 6f  ssage(SQLiteErro
121e0 72 43 6f 64 65 20 69 45 72 72 43 6f 64 65 2c 20  rCode iErrCode, 
121f0 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65 29  string zMessage)
12200 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
12210 74 61 74 69 63 4c 6f 67 4d 65 73 73 61 67 65 28  taticLogMessage(
12220 69 45 72 72 43 6f 64 65 2c 20 7a 4d 65 73 73 61  iErrCode, zMessa
12230 67 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ge);..    }.... 
12240 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f 67     /// Add a log
12250 20 6d 65 73 73 61 67 65 20 76 69 61 20 74 68 65   message via the
12260 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65 33 5f   SQLite sqlite3_
12270 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a  log interface...
12280 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
12290 74 69 63 20 76 6f 69 64 20 53 74 61 74 69 63 4c  tic void StaticL
122a0 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65  ogMessage(SQLite
122b0 45 72 72 6f 72 43 6f 64 65 20 69 45 72 72 43 6f  ErrorCode iErrCo
122c0 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73 73  de, string zMess
122d0 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  age)..    {..   
122e0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
122f0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c  ethods.sqlite3_l
12300 6f 67 28 69 45 72 72 43 6f 64 65 2c 20 54 6f 55  og(iErrCode, ToU
12310 54 46 38 28 7a 4d 65 73 73 61 67 65 29 29 3b 0d  TF8(zMessage));.
12320 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e  .    }....#if IN
12330 54 45 52 4f 50 5f 43 4f 44 45 43 0d 0a 20 20 20  TEROP_CODEC..   
12340 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
12350 64 65 20 76 6f 69 64 20 53 65 74 50 61 73 73 77  de void SetPassw
12360 6f 72 64 28 62 79 74 65 5b 5d 20 70 61 73 73 77  ord(byte[] passw
12370 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b  ordBytes)..    {
12380 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
12390 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
123a0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
123b0 73 71 6c 69 74 65 33 5f 6b 65 79 28 5f 73 71 6c  sqlite3_key(_sql
123c0 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 2c  , passwordBytes,
123d0 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c   passwordBytes.L
123e0 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69  ength);..      i
123f0 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
12400 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
12410 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
12420 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
12430 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
12440 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
12450 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
12460 68 61 6e 67 65 50 61 73 73 77 6f 72 64 28 62 79  hangePassword(by
12470 74 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f 72 64  te[] newPassword
12480 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20  Bytes)..    {.. 
12490 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
124a0 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
124b0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
124c0 69 74 65 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c  ite3_rekey(_sql,
124d0 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65   newPasswordByte
124e0 73 2c 20 28 6e 65 77 50 61 73 73 77 6f 72 64 42  s, (newPasswordB
124f0 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20  ytes == null) ? 
12500 30 20 3a 20 6e 65 77 50 61 73 73 77 6f 72 64 42  0 : newPasswordB
12510 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20  ytes.Length);.. 
12520 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
12530 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
12540 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
12550 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
12560 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
12570 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a  .    }..#endif..
12580 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
12590 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
125a0 41 75 74 68 6f 72 69 7a 65 72 48 6f 6f 6b 28 53  AuthorizerHook(S
125b0 51 4c 69 74 65 41 75 74 68 6f 72 69 7a 65 72 43  QLiteAuthorizerC
125c0 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
125d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
125e0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
125f0 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74 68  sqlite3_set_auth
12600 6f 72 69 7a 65 72 28 5f 73 71 6c 2c 20 66 75 6e  orizer(_sql, fun
12610 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
12620 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
12630 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12640 20 76 6f 69 64 20 53 65 74 55 70 64 61 74 65 48   void SetUpdateH
12650 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64 61 74 65  ook(SQLiteUpdate
12660 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
12670 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
12680 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
12690 2e 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f  .sqlite3_update_
126a0 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  hook(_sql, func,
126b0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
126c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
126d0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
126e0 6f 69 64 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f  oid SetCommitHoo
126f0 6b 28 53 51 4c 69 74 65 43 6f 6d 6d 69 74 43 61  k(SQLiteCommitCa
12700 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
12710 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
12720 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12730 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f  qlite3_commit_ho
12740 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49  ok(_sql, func, I
12750 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
12760 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
12770 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
12780 64 20 53 65 74 54 72 61 63 65 43 61 6c 6c 62 61  d SetTraceCallba
12790 63 6b 28 53 51 4c 69 74 65 54 72 61 63 65 43 61  ck(SQLiteTraceCa
127a0 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
127b0 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
127c0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
127d0 71 6c 69 74 65 33 5f 74 72 61 63 65 28 5f 73 71  qlite3_trace(_sq
127e0 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
127f0 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
12800 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
12810 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 52  erride void SetR
12820 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69  ollbackHook(SQLi
12830 74 65 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  teRollbackCallba
12840 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
12850 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
12860 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
12870 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b  e3_rollback_hook
12880 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
12890 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
128a0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
128b0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
128c0 41 6c 6c 6f 77 73 20 74 68 65 20 73 65 74 74 69  Allows the setti
128d0 6e 67 20 6f 66 20 61 20 6c 6f 67 67 69 6e 67 20  ng of a logging 
128e0 63 61 6c 6c 62 61 63 6b 20 69 6e 76 6f 6b 65 64  callback invoked
128f0 20 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 20   by SQLite when 
12900 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 67 20 65  a..    /// log e
12910 76 65 6e 74 20 6f 63 63 75 72 73 2e 20 20 4f 6e  vent occurs.  On
12920 6c 79 20 6f 6e 65 20 63 61 6c 6c 62 61 63 6b 20  ly one callback 
12930 6d 61 79 20 62 65 20 73 65 74 2e 20 20 49 66 20  may be set.  If 
12940 4e 55 4c 4c 20 69 73 20 70 61 73 73 65 64 2c 0d  NULL is passed,.
12950 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6c 6f 67  .    /// the log
12960 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 73  ging callback is
12970 20 75 6e 72 65 67 69 73 74 65 72 65 64 2e 0d 0a   unregistered...
12980 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
12990 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
129a0 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 22 3e 54  am name="func">T
129b0 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  he callback func
129c0 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c  tion to invoke.<
129d0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
129e0 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
129f0 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64 65 3c  s a result code<
12a00 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
12a10 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12a20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12a30 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28   SetLogCallback(
12a40 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63  SQLiteLogCallbac
12a50 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
12a60 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
12a70 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
12a80 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
12a90 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f  .sqlite3_config_
12aa0 6c 6f 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20  log(..          
12ab0 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70    SQLiteConfigOp
12ac0 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e  sEnum.SQLITE_CON
12ad0 46 49 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20 49  FIG_LOG, func, I
12ae0 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a  ntPtr.Zero);....
12af0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
12b00 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  c;..    }....   
12b10 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
12b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b70 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
12b80 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
12b90 72 65 61 74 65 73 20 61 20 6e 65 77 20 53 51 4c  reates a new SQL
12ba0 69 74 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ite backup objec
12bb0 74 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 70  t based on the p
12bc0 72 6f 76 69 64 65 64 20 64 65 73 74 69 6e 61 74  rovided destinat
12bd0 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74  ion..    /// dat
12be0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12bf0 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20 64 61  .  The source da
12c00 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
12c10 6e 20 69 73 20 74 68 65 20 6f 6e 65 0d 0a 20 20  n is the one..  
12c20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
12c30 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63   with this objec
12c40 74 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20 61  t.  The source a
12c50 6e 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  nd destination d
12c60 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f  atabase..    ///
12c70 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 63 61 6e   connections can
12c80 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d 65 2e  not be the same.
12c90 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
12ca0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
12cb0 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 43  aram name="destC
12cc0 6e 6e 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74  nn">The destinat
12cd0 69 6f 6e 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ion database con
12ce0 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e  nection.</param>
12cf0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
12d00 20 6e 61 6d 65 3d 22 64 65 73 74 4e 61 6d 65 22   name="destName"
12d10 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e  >The destination
12d20 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c   database name.<
12d30 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
12d40 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f   <param name="so
12d50 75 72 63 65 4e 61 6d 65 22 3e 54 68 65 20 73 6f  urceName">The so
12d60 75 72 63 65 20 64 61 74 61 62 61 73 65 20 6e 61  urce database na
12d70 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  me.</param>..   
12d80 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
12d90 65 20 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20  e newly created 
12da0 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 3c 2f  backup object.</
12db0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
12dc0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
12dd0 53 51 4c 69 74 65 42 61 63 6b 75 70 20 49 6e 69  SQLiteBackup Ini
12de0 74 69 61 6c 69 7a 65 42 61 63 6b 75 70 28 0d 0a  tializeBackup(..
12df0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
12e00 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74 43 6e 6e  nnection destCnn
12e10 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
12e20 67 20 64 65 73 74 4e 61 6d 65 2c 0d 0a 20 20 20  g destName,..   
12e30 20 20 20 20 20 73 74 72 69 6e 67 20 73 6f 75 72       string sour
12e40 63 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  ceName..        
12e50 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
12e60 20 20 69 66 20 28 64 65 73 74 43 6e 6e 20 3d 3d    if (destCnn ==
12e70 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
12e80 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
12e90 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
12ea0 69 6f 6e 28 22 64 65 73 74 43 6e 6e 22 29 3b 0d  ion("destCnn");.
12eb0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  ...        if (d
12ec0 65 73 74 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29  estName == null)
12ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
12ee0 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
12ef0 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64  NullException("d
12f00 65 73 74 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20  estName");....  
12f10 20 20 20 20 20 20 69 66 20 28 73 6f 75 72 63 65        if (source
12f20 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Name == null).. 
12f30 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
12f40 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
12f50 6c 45 78 63 65 70 74 69 6f 6e 28 22 73 6f 75 72  lException("sour
12f60 63 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20  ceName");....   
12f70 20 20 20 20 20 53 51 4c 69 74 65 33 20 64 65 73       SQLite3 des
12f80 74 53 71 6c 69 74 65 33 20 3d 20 64 65 73 74 43  tSqlite3 = destC
12f90 6e 6e 2e 5f 73 71 6c 20 61 73 20 53 51 4c 69 74  nn._sql as SQLit
12fa0 65 33 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  e3;....        i
12fb0 66 20 28 64 65 73 74 53 71 6c 69 74 65 33 20 3d  f (destSqlite3 =
12fc0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
12fd0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
12fe0 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e  rgumentException
12ff0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13000 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20     "Destination 
13010 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 6e  connection has n
13020 6f 20 77 72 61 70 70 65 72 2e 22 2c 0d 0a 20 20  o wrapper.",..  
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64                "d
13040 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20  estCnn");....   
13050 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
13060 63 74 69 6f 6e 48 61 6e 64 6c 65 20 64 65 73 74  ctionHandle dest
13070 48 61 6e 64 6c 65 20 3d 20 64 65 73 74 53 71 6c  Handle = destSql
13080 69 74 65 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20  ite3._sql;....  
13090 20 20 20 20 20 20 69 66 20 28 64 65 73 74 48 61        if (destHa
130a0 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
130b0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
130c0 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63   new ArgumentExc
130d0 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
130e0 20 20 20 20 20 20 20 20 20 22 44 65 73 74 69 6e           "Destin
130f0 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  ation connection
13100 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
13110 68 61 6e 64 6c 65 2e 22 2c 0d 0a 20 20 20 20 20  handle.",..     
13120 20 20 20 20 20 20 20 20 20 20 20 22 64 65 73 74             "dest
13130 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Cnn");....      
13140 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
13150 6f 6e 48 61 6e 64 6c 65 20 73 6f 75 72 63 65 48  onHandle sourceH
13160 61 6e 64 6c 65 20 3d 20 5f 73 71 6c 3b 0d 0a 0d  andle = _sql;...
13170 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 6f 75  .        if (sou
13180 72 63 65 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  rceHandle == nul
13190 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
131a0 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
131b0 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
131c0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
131d0 20 20 20 20 20 20 22 53 6f 75 72 63 65 20 63 6f        "Source co
131e0 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
131f0 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
13200 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 79  );....        by
13210 74 65 5b 5d 20 7a 44 65 73 74 4e 61 6d 65 20 3d  te[] zDestName =
13220 20 54 6f 55 54 46 38 28 64 65 73 74 4e 61 6d 65   ToUTF8(destName
13230 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65  );..        byte
13240 5b 5d 20 7a 53 6f 75 72 63 65 4e 61 6d 65 20 3d  [] zSourceName =
13250 20 54 6f 55 54 46 38 28 73 6f 75 72 63 65 4e 61   ToUTF8(sourceNa
13260 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
13270 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
13280 6c 65 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20  le backupHandle 
13290 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
132a0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
132b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
132c0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
132d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
132e0 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54    finally /* NOT
132f0 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28  E: Thread.Abort(
13300 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f  ) protection. */
13310 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
13320 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
13330 62 61 63 6b 75 70 20 3d 20 55 6e 73 61 66 65 4e  backup = UnsafeN
13340 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
13350 69 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74  ite3_backup_init
13360 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13370 20 20 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a     destHandle, z
13380 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65  DestName, source
13390 48 61 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65 4e  Handle, zSourceN
133a0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
133b0 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
133c0 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
133d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
133e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133f0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
13400 72 65 73 75 6c 74 43 6f 64 65 20 3d 20 52 65 73  resultCode = Res
13410 75 6c 74 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20  ultCode();....  
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13430 20 28 72 65 73 75 6c 74 43 6f 64 65 20 21 3d 20   (resultCode != 
13440 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
13450 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
13460 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
13470 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
13480 6f 6e 28 72 65 73 75 6c 74 43 6f 64 65 2c 20 47  on(resultCode, G
13490 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
134a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
134b0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
134c0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
134d0 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
134e0 74 69 6f 6e 28 22 66 61 69 6c 65 64 20 74 6f 20  tion("failed to 
134f0 69 6e 69 74 69 61 6c 69 7a 65 20 62 61 63 6b 75  initialize backu
13500 70 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  p");..          
13510 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
13520 20 20 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20     backupHandle 
13530 3d 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63 6b  = new SQLiteBack
13540 75 70 48 61 6e 64 6c 65 28 64 65 73 74 48 61 6e  upHandle(destHan
13550 64 6c 65 2c 20 62 61 63 6b 75 70 29 3b 0d 0a 20  dle, backup);.. 
13560 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
13570 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
13580 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e  tion.OnChanged(n
13590 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74  ull, new Connect
135a0 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  ionEventArgs(.. 
135b0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
135c0 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74  eConnectionEvent
135d0 54 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c  Type.NewCritical
135e0 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 75  Handle, null, nu
135f0 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
13600 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 62 61 63   null, null, bac
13610 6b 75 70 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c  kupHandle, null,
13620 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 20   new object[] { 
13630 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20 20 20 20  destCnn,..      
13640 20 20 20 20 20 20 64 65 73 74 4e 61 6d 65 2c 20        destName, 
13650 73 6f 75 72 63 65 4e 61 6d 65 20 7d 29 29 3b 0d  sourceName }));.
13660 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
13670 6e 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63 6b  n new SQLiteBack
13680 75 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  up(..           
13690 20 74 68 69 73 2c 20 62 61 63 6b 75 70 48 61 6e   this, backupHan
136a0 64 6c 65 2c 20 64 65 73 74 48 61 6e 64 6c 65 2c  dle, destHandle,
136b0 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72   zDestName, sour
136c0 63 65 48 61 6e 64 6c 65 2c 0d 0a 20 20 20 20 20  ceHandle,..     
136d0 20 20 20 20 20 20 20 7a 53 6f 75 72 63 65 4e 61         zSourceNa
136e0 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  me);..    }.... 
136f0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
13700 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 70 69 65 73  ..    /// Copies
13710 20 75 70 20 74 6f 20 4e 20 70 61 67 65 73 20 66   up to N pages f
13720 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 20 64  rom the source d
13730 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 64  atabase to the d
13740 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20  estination..    
13750 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 61 73 73  /// database ass
13760 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
13770 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b 75   specified backu
13780 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f  p object...    /
13790 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
137a0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
137b0 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
137c0 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
137d0 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20   use.</param>.. 
137e0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
137f0 6d 65 3d 22 6e 50 61 67 65 22 3e 0d 0a 20 20 20  me="nPage">..   
13800 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
13810 6f 66 20 70 61 67 65 73 20 74 6f 20 63 6f 70 79  of pages to copy
13820 2c 20 6e 65 67 61 74 69 76 65 20 74 6f 20 63 6f  , negative to co
13830 70 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67  py all remaining
13840 20 70 61 67 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f   pages...    ///
13850 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
13860 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
13870 72 65 74 72 79 22 3e 0d 0a 20 20 20 20 2f 2f 2f  retry">..    ///
13880 20 53 65 74 20 74 6f 20 74 72 75 65 20 69 66 20   Set to true if 
13890 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6e 65  the operation ne
138a0 65 64 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  eds to be retrie
138b0 64 20 64 75 65 20 74 6f 20 64 61 74 61 62 61 73  d due to databas
138c0 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 63 6b 69  e..    /// locki
138d0 6e 67 20 69 73 73 75 65 73 3b 20 6f 74 68 65 72  ng issues; other
138e0 77 69 73 65 2c 20 73 65 74 20 74 6f 20 66 61 6c  wise, set to fal
138f0 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  se...    /// </p
13900 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
13910 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
13920 2f 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  / True if there 
13930 61 72 65 20 6d 6f 72 65 20 70 61 67 65 73 20 74  are more pages t
13940 6f 20 62 65 20 63 6f 70 69 65 64 2c 20 66 61 6c  o be copied, fal
13950 73 65 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20  se otherwise... 
13960 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
13970 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
13980 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53 74  override bool St
13990 65 70 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  epBackup(..     
139a0 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20     SQLiteBackup 
139b0 62 61 63 6b 75 70 2c 0d 0a 20 20 20 20 20 20 20  backup,..       
139c0 20 69 6e 74 20 6e 50 61 67 65 2c 0d 0a 20 20 20   int nPage,..   
139d0 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 72 65       ref bool re
139e0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  try..        )..
139f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
13a00 65 74 72 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  etry = false;...
13a10 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63  .        if (bac
13a20 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  kup == null)..  
13a30 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
13a40 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
13a50 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75  Exception("backu
13a60 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p");....        
13a70 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
13a80 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b  le handle = back
13a90 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75  up._sqlite_backu
13aa0 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  p;....        if
13ab0 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c   (handle == null
13ac0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
13ad0 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
13ae0 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
13af0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
13b00 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
13b10 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
13b20 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
13b30 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
13b40 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64  handlePtr = hand
13b50 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  le;....        i
13b60 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20  f (handlePtr == 
13b70 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
13b80 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
13b90 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
13ba0 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
13bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bc0 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
13bd0 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
13be0 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b  ndle pointer.");
13bf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
13c00 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
13c10 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
13c20 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
13c30 75 70 5f 73 74 65 70 28 68 61 6e 64 6c 65 50 74  up_step(handlePt
13c40 72 2c 20 6e 50 61 67 65 29 3b 0d 0a 20 20 20 20  r, nPage);..    
13c50 20 20 20 20 62 61 63 6b 75 70 2e 5f 73 74 65 70      backup._step
13c60 52 65 73 75 6c 74 20 3d 20 6e 3b 20 2f 2a 20 4e  Result = n; /* N
13c70 4f 54 45 3a 20 53 61 76 65 20 66 6f 72 20 75 73  OTE: Save for us
13c80 65 20 62 79 20 46 69 6e 69 73 68 42 61 63 6b 75  e by FinishBacku
13c90 70 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  p. */....       
13ca0 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
13cb0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
13cc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
13cd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
13ce0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
13cf0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
13d00 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
13d10 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20  Code.Busy)..    
13d20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13d30 20 20 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b     retry = true;
13d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
13d50 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
13d60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
13d70 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  lse if (n == SQL
13d80 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63  iteErrorCode.Loc
13d90 6b 65 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ked)..        {.
13da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
13db0 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ry = true;..    
13dc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
13dd0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
13de0 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66  .        else if
13df0 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
13e00 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 0d 0a 20 20  orCode.Done)..  
13e10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13e20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
13e30 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
13e40 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
13e50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13e60 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
13e70 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
13e80 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
13e90 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
13ea0 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
13eb0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
13ec0 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75  / Returns the nu
13ed0 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72 65  mber of pages re
13ee0 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f  maining to be co
13ef0 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 73 6f  pied from the so
13f00 75 72 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 64 61  urce..    /// da
13f10 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 64 65  tabase to the de
13f20 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
13f30 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  se associated wi
13f40 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
13f50 0d 0a 20 20 20 20 2f 2f 2f 20 62 61 63 6b 75 70  ..    /// backup
13f60 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f   object...    //
13f70 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
13f80 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
13f90 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62  e="backup">The b
13fa0 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20  ackup object to 
13fb0 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  check.</param>..
13fc0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
13fd0 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70  >The number of p
13fe0 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74  ages remaining t
13ff0 6f 20 62 65 20 63 6f 70 69 65 64 2e 3c 2f 72 65  o be copied.</re
14000 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
14010 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
14020 74 20 52 65 6d 61 69 6e 69 6e 67 42 61 63 6b 75  t RemainingBacku
14030 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
14040 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d  teBackup backup.
14050 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
14060 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62  {..        if (b
14070 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ackup == null)..
14080 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
14090 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
140a0 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63  llException("bac
140b0 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  kup");....      
140c0 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61    SQLiteBackupHa
140d0 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61  ndle handle = ba
140e0 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63  ckup._sqlite_bac
140f0 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  kup;....        
14100 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75  if (handle == nu
14110 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
14120 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
14130 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
14140 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
14150 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
14160 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
14170 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
14180 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
14190 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61  r handlePtr = ha
141a0 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
141b0 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d   if (handlePtr =
141c0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
141d0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
141e0 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
141f0 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
14200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14210 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
14220 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
14230 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22  handle pointer."
14240 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
14250 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
14260 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
14270 5f 62 61 63 6b 75 70 5f 72 65 6d 61 69 6e 69 6e  _backup_remainin
14280 67 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20  g(handlePtr);.. 
14290 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
142a0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
142b0 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 74  // Returns the t
142c0 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70  otal number of p
142d0 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72  ages in the sour
142e0 63 65 20 64 61 74 61 62 61 73 65 20 61 73 73 6f  ce database asso
142f0 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  ciated..    /// 
14300 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
14310 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  ed backup object
14320 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
14330 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
14340 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
14350 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
14360 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c  bject to check.<
14370 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
14380 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 74 6f   <returns>The to
14390 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  tal number of pa
143a0 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63  ges in the sourc
143b0 65 20 64 61 74 61 62 61 73 65 2e 3c 2f 72 65 74  e database.</ret
143c0 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
143d0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
143e0 20 50 61 67 65 43 6f 75 6e 74 42 61 63 6b 75 70   PageCountBackup
143f0 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
14400 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a  eBackup backup..
14410 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
14420 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61  ..        if (ba
14430 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ckup == null).. 
14440 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
14450 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
14460 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b  lException("back
14470 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  up");....       
14480 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
14490 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63  dle handle = bac
144a0 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b  kup._sqlite_back
144b0 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  up;....        i
144c0 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  f (handle == nul
144d0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
144e0 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
144f0 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
14500 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
14510 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
14520 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
14530 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
14540 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
14550 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e   handlePtr = han
14560 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
14570 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d  if (handlePtr ==
14580 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
14590 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
145a0 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
145b0 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
145c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
145d0 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
145e0 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
145f0 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29  andle pointer.")
14600 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
14610 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
14620 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
14630 62 61 63 6b 75 70 5f 70 61 67 65 63 6f 75 6e 74  backup_pagecount
14640 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20  (handlePtr);..  
14650 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
14660 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
14670 2f 20 44 65 73 74 72 6f 79 73 20 74 68 65 20 62  / Destroys the b
14680 61 63 6b 75 70 20 6f 62 6a 65 63 74 2c 20 72 6f  ackup object, ro
14690 6c 6c 69 6e 67 20 62 61 63 6b 20 61 6e 79 20 62  lling back any b
146a0 61 63 6b 75 70 20 74 68 61 74 20 6d 61 79 20 62  ackup that may b
146b0 65 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 70 72  e in..    /// pr
146c0 6f 67 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ogess...    /// 
146d0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
146e0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
146f0 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63  "backup">The bac
14700 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 64 65  kup object to de
14710 73 74 72 6f 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  stroy.</param>..
14720 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
14730 72 72 69 64 65 20 76 6f 69 64 20 46 69 6e 69 73  rride void Finis
14740 68 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  hBackup(..      
14750 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62    SQLiteBackup b
14760 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29  ackup..        )
14770 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
14780 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e   if (backup == n
14790 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
147a0 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
147b0 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
147c0 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a  n("backup");....
147d0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
147e0 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c  ckupHandle handl
147f0 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69  e = backup._sqli
14800 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20  te_backup;....  
14810 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
14820 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
14830 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
14840 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
14850 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
14870 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
14880 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
14890 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
148a0 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74   IntPtr handlePt
148b0 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
148c0 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
148d0 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  ePtr == IntPtr.Z
148e0 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
148f0 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
14900 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
14910 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
14920 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
14930 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
14940 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69  valid handle poi
14950 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 23 69 66 20  nter.");....#if 
14960 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
14970 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
14980 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
14990 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
149a0 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
149b0 5f 66 69 6e 69 73 68 5f 69 6e 74 65 72 6f 70 28  _finish_interop(
149c0 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6c  handlePtr);..#el
149d0 73 65 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  se..        SQLi
149e0 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
149f0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
14a00 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
14a10 75 70 5f 66 69 6e 69 73 68 28 68 61 6e 64 6c 65  up_finish(handle
14a20 50 74 72 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  Ptr);..#endif.. 
14a30 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 53 65         handle.Se
14a40 74 48 61 6e 64 6c 65 41 73 49 6e 76 61 6c 69 64  tHandleAsInvalid
14a50 28 29 3b 0d 0a 0d 0a 23 69 66 20 43 4f 55 4e 54  ();....#if COUNT
14a60 5f 48 41 4e 44 4c 45 0d 0a 20 20 20 20 20 20 20  _HANDLE..       
14a70 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74   if ((n == SQLit
14a80 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c  eErrorCode.Ok) |
14a90 7c 20 28 6e 20 3d 3d 20 62 61 63 6b 75 70 2e 5f  | (n == backup._
14aa0 73 74 65 70 52 65 73 75 6c 74 29 29 20 68 61 6e  stepResult)) han
14ab0 64 6c 65 2e 57 61 73 52 65 6c 65 61 73 65 64 4f  dle.WasReleasedO
14ac0 6b 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  k();..#endif....
14ad0 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 21          if ((n !
14ae0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
14af0 65 2e 4f 6b 29 20 26 26 20 28 6e 20 21 3d 20 62  e.Ok) && (n != b
14b00 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c  ackup._stepResul
14b10 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
14b20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
14b30 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
14b40 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
14b50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
14b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
14bc0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
14bd0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72  >..    /// Deter
14be0 6d 69 6e 65 73 20 69 66 20 74 68 65 20 53 51 4c  mines if the SQL
14bf0 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
14c00 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61   has been initia
14c10 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a 20  lized for the.. 
14c20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70     /// current p
14c30 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
14c40 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
14c50 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
14c60 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61      /// A boolea
14c70 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  n indicating whe
14c80 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
14c90 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
14ca0 61 72 79 20 68 61 73 20 62 65 65 6e 0d 0a 20 20  ary has been..  
14cb0 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65    /// initialize
14cc0 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
14cd0 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
14ce0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
14cf0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
14d00 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 49 6e 69  rride bool IsIni
14d10 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20  tialized()..    
14d20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
14d30 6e 20 53 74 61 74 69 63 49 73 49 6e 69 74 69 61  n StaticIsInitia
14d40 6c 69 7a 65 64 28 29 3b 0d 0a 20 20 20 20 7d 0d  lized();..    }.
14d50 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
14d60 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65  ary>..    /// De
14d70 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20  termines if the 
14d80 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
14d90 61 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69  ary has been ini
14da0 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65  tialized for the
14db0 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e  ..    /// curren
14dc0 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
14dd0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
14de0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
14df0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f  >..    /// A boo
14e00 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20  lean indicating 
14e10 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
14e20 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
14e30 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d  ibrary has been.
14e40 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c  .    /// initial
14e50 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75 72  ized for the cur
14e60 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process... 
14e70 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
14e80 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
14e90 73 74 61 74 69 63 20 62 6f 6f 6c 20 53 74 61 74  static bool Stat
14ea0 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  icIsInitialized(
14eb0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
14ec0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
14ed0 20 42 55 47 46 49 58 3a 20 50 72 65 76 65 6e 74   BUGFIX: Prevent
14ee0 20 72 61 63 65 73 20 77 69 74 68 20 6f 74 68 65   races with othe
14ef0 72 20 74 68 72 65 61 64 73 20 66 6f 72 20 74 68  r threads for th
14f00 69 73 20 65 6e 74 69 72 65 20 62 6c 6f 63 6b 2c  is entire block,
14f10 20 64 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   due..        //
14f20 20 20 20 20 20 20 20 20 20 74 6f 20 74 68 65 20           to the 
14f30 74 72 79 2f 66 69 6e 61 6c 6c 79 20 73 65 6d 61  try/finally sema
14f40 6e 74 69 63 73 2e 20 20 53 65 65 20 74 69 63 6b  ntics.  See tick
14f50 65 74 20 5b 37 32 39 30 35 63 39 61 37 37 5d 2e  et [72905c9a77].
14f60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
14f70 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63        lock (sync
14f80 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 7b  Root)..        {
14f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
14fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
14fb0 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20   NOTE: Save the 
14fc0 73 74 61 74 65 20 6f 66 20 74 68 65 20 6c 6f 67  state of the log
14fd0 67 69 6e 67 20 63 6c 61 73 73 20 61 6e 64 20 74  ging class and t
14fe0 68 65 6e 20 72 65 73 74 6f 72 65 20 69 74 0d 0a  hen restore it..
14ff0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
15000 20 20 20 20 20 61 66 74 65 72 20 77 65 20 61 72       after we ar
15010 65 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20  e done to avoid 
15020 6c 6f 67 67 69 6e 67 20 74 6f 6f 20 6d 61 6e 79  logging too many
15030 20 66 61 6c 73 65 20 65 72 72 6f 72 73 2e 0d 0a   false errors...
15040 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
15050 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
15060 20 73 61 76 65 64 45 6e 61 62 6c 65 64 20 3d 20   savedEnabled = 
15070 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65  SQLiteLog.Enable
15080 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
15090 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65  SQLiteLog.Enable
150a0 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  d = false;....  
150b0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
150c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
150e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
150f0 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20    // NOTE: This 
15100 6d 65 74 68 6f 64 20 5b 61 62 5d 75 73 65 73 20  method [ab]uses 
15110 74 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51  the fact that SQ
15120 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  Lite will always
15130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15140 20 20 2f 2f 20 20 20 20 20 20 20 72 65 74 75 72    //       retur
15150 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 66  n SQLITE_ERROR f
15160 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f 77 6e 20 63  or any unknown c
15170 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
15180 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
15190 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 2a 75       //       *u
151a0 6e 6c 65 73 73 2a 20 74 68 65 20 53 51 4c 69 74  nless* the SQLit
151b0 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c  e library has al
151c0 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69  ready been initi
151d0 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20  alized...       
151e0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
151f0 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 20 69    In that case i
15200 74 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 72 65  t will always re
15210 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
15220 53 45 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  SE...           
15230 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
15240 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
15250 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e  rrorCode rc = Un
15260 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
15270 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  s.sqlite3_config
15280 5f 6e 6f 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  _none(..        
15290 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
152a0 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e  teConfigOpsEnum.
152b0 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f  SQLITE_CONFIG_NO
152c0 4e 45 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  NE);....        
152d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
152e0 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc == SQLiteErro
152f0 72 43 6f 64 65 2e 4d 69 73 75 73 65 29 3b 0d 0a  rCode.Misuse);..
15300 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
15310 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
15320 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
15330 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15340 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61     SQLiteLog.Ena
15350 62 6c 65 64 20 3d 20 73 61 76 65 64 45 6e 61 62  bled = savedEnab
15360 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  led;..          
15370 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
15380 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
15390 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
153a0 2f 2f 2f 20 48 65 6c 70 65 72 20 66 75 6e 63 74  /// Helper funct
153b0 69 6f 6e 20 74 6f 20 72 65 74 72 69 65 76 65 20  ion to retrieve 
153c0 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 64 61 74 61  a column of data
153d0 20 66 72 6f 6d 20 61 6e 20 61 63 74 69 76 65 20   from an active 
153e0 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20  statement...    
153f0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
15400 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
15410 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65 20 73  ame="stmt">The s
15420 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 73  tatement being s
15430 74 65 70 28 29 27 64 20 74 68 72 6f 75 67 68 3c  tep()'d through<
15440 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
15450 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c   <param name="fl
15460 61 67 73 22 3e 54 68 65 20 66 6c 61 67 73 20 61  ags">The flags a
15470 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
15480 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f  he connection.</
15490 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
154a0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64  <param name="ind
154b0 65 78 22 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 69  ex">The column i
154c0 6e 64 65 78 20 74 6f 20 72 65 74 72 69 65 76 65  ndex to retrieve
154d0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
154e0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
154f0 79 70 22 3e 54 68 65 20 74 79 70 65 20 6f 66 20  yp">The type of 
15500 64 61 74 61 20 63 6f 6e 74 61 69 6e 65 64 20 69  data contained i
15510 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49  n the column.  I
15520 66 20 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 2c  f Uninitialized,
15530 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77   this function w
15540 69 6c 6c 20 72 65 74 72 69 65 76 65 20 74 68 65  ill retrieve the
15550 20 64 61 74 61 74 79 70 65 20 69 6e 66 6f 72 6d   datatype inform
15560 61 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  ation.</param>..
15570 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
15580 3e 52 65 74 75 72 6e 73 20 74 68 65 20 64 61 74  >Returns the dat
15590 61 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c  a in the column<
155a0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
155b0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
155c0 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65   object GetValue
155d0 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
155e0 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
155f0 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
15600 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 53  gs, int index, S
15610 51 4c 69 74 65 54 79 70 65 20 74 79 70 29 0d 0a  QLiteType typ)..
15620 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 54 79 70      {..      Typ
15630 65 41 66 66 69 6e 69 74 79 20 61 66 66 20 3d 20  eAffinity aff = 
15640 74 79 70 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20  typ.Affinity;.. 
15650 20 20 20 20 20 69 66 20 28 61 66 66 20 3d 3d 20       if (aff == 
15660 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c  TypeAffinity.Nul
15670 6c 29 20 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c  l) return DBNull
15680 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 54  .Value;..      T
15690 79 70 65 20 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  ype t = null;...
156a0 0a 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54  .      if (typ.T
156b0 79 70 65 20 21 3d 20 44 62 54 79 70 65 2e 4f 62  ype != DbType.Ob
156c0 6a 65 63 74 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  ject)..      {..
156d0 20 20 20 20 20 20 20 20 74 20 3d 20 53 51 4c 69          t = SQLi
156e0 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65  teConvert.SQLite
156f0 54 79 70 65 54 6f 54 79 70 65 28 74 79 70 29 3b  TypeToType(typ);
15700 0d 0a 20 20 20 20 20 20 20 20 61 66 66 20 3d 20  ..        aff = 
15710 54 79 70 65 54 6f 41 66 66 69 6e 69 74 79 28 74  TypeToAffinity(t
15720 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  );..      }.... 
15730 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
15740 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
15750 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73  onFlags.GetAllAs
15760 54 65 78 74 29 20 3d 3d 20 53 51 4c 69 74 65 43  Text) == SQLiteC
15770 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47  onnectionFlags.G
15780 65 74 41 6c 6c 41 73 54 65 78 74 29 0d 0a 20 20  etAllAsText)..  
15790 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
157a0 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64  etText(stmt, ind
157b0 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77  ex);....      sw
157c0 69 74 63 68 20 28 61 66 66 29 0d 0a 20 20 20 20  itch (aff)..    
157d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73    {..        cas
157e0 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42  e TypeAffinity.B
157f0 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  lob:..          
15800 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20  if (typ.Type == 
15810 44 62 54 79 70 65 2e 47 75 69 64 20 26 26 20 74  DbType.Guid && t
15820 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54  yp.Affinity == T
15830 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74  ypeAffinity.Text
15840 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
15850 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28 47  eturn new Guid(G
15860 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64  etText(stmt, ind
15870 65 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ex));....       
15880 20 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29     int n = (int)
15890 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69  GetBytes(stmt, i
158a0 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30  ndex, 0, null, 0
158b0 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  , 0);..         
158c0 20 62 79 74 65 5b 5d 20 62 20 3d 20 6e 65 77 20   byte[] b = new 
158d0 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20  byte[n];..      
158e0 20 20 20 20 47 65 74 42 79 74 65 73 28 73 74 6d      GetBytes(stm
158f0 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62 2c 20  t, index, 0, b, 
15900 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  0, n);....      
15910 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65      if (typ.Type
15920 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20   == DbType.Guid 
15930 26 26 20 6e 20 3d 3d 20 31 36 29 0d 0a 20 20 20  && n == 16)..   
15940 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
15950 6e 65 77 20 47 75 69 64 28 62 29 3b 0d 0a 0d 0a  new Guid(b);....
15960 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
15970 20 62 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73   b;..        cas
15980 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44  e TypeAffinity.D
15990 61 74 65 54 69 6d 65 3a 0d 0a 20 20 20 20 20 20  ateTime:..      
159a0 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 44 61      return GetDa
159b0 74 65 54 69 6d 65 28 73 74 6d 74 2c 20 69 6e 64  teTime(stmt, ind
159c0 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  ex);..        ca
159d0 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
159e0 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20  Double:..       
159f0 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c     if (t == null
15a00 29 20 72 65 74 75 72 6e 20 47 65 74 44 6f 75 62  ) return GetDoub
15a10 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  le(stmt, index);
15a20 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
15a30 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67  rn Convert.Chang
15a40 65 54 79 70 65 28 47 65 74 44 6f 75 62 6c 65 28  eType(GetDouble(
15a50 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c  stmt, index), t,
15a60 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
15a70 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
15a80 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20  ty.Int64:..     
15a90 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75       if (t == nu
15aa0 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e  ll) return GetIn
15ab0 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
15ac0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
15ad0 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 53 42 79  (t == typeof(SBy
15ae0 74 65 29 29 20 72 65 74 75 72 6e 20 47 65 74 53  te)) return GetS
15af0 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  Byte(stmt, index
15b00 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
15b10 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 42 79   (t == typeof(By
15b20 74 65 29 29 20 72 65 74 75 72 6e 20 47 65 74 42  te)) return GetB
15b30 79 74 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  yte(stmt, index)
15b40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
15b50 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74  (t == typeof(Int
15b60 31 36 29 29 20 72 65 74 75 72 6e 20 47 65 74 49  16)) return GetI
15b70 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt16(stmt, index
15b80 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
15b90 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49   (t == typeof(UI
15ba0 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20 47 65  nt16)) return Ge
15bb0 74 55 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e  tUInt16(stmt, in
15bc0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
15bd0 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
15be0 28 49 6e 74 33 32 29 29 20 72 65 74 75 72 6e 20  (Int32)) return 
15bf0 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69  GetInt32(stmt, i
15c00 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
15c10 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
15c20 66 28 55 49 6e 74 33 32 29 29 20 72 65 74 75 72  f(UInt32)) retur
15c30 6e 20 47 65 74 55 49 6e 74 33 32 28 73 74 6d 74  n GetUInt32(stmt
15c40 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
15c50 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
15c60 70 65 6f 66 28 55 49 6e 74 36 34 29 29 20 72 65  peof(UInt64)) re
15c70 74 75 72 6e 20 47 65 74 55 49 6e 74 36 34 28 73  turn GetUInt64(s
15c80 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
15c90 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43          return C
15ca0 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70  onvert.ChangeTyp
15cb0 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c  e(GetInt64(stmt,
15cc0 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c   index), t, null
15cd0 29 3b 0d 0a 20 20 20 20 20 20 20 20 64 65 66 61  );..        defa
15ce0 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ult:..          
15cf0 72 65 74 75 72 6e 20 47 65 74 54 65 78 74 28 73  return GetText(s
15d00 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
15d10 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
15d20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
15d30 72 72 69 64 65 20 69 6e 74 20 47 65 74 43 75 72  rride int GetCur
15d40 73 6f 72 46 6f 72 54 61 62 6c 65 28 53 51 4c 69  sorForTable(SQLi
15d50 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
15d60 2c 20 69 6e 74 20 64 62 2c 20 69 6e 74 20 72 6f  , int db, int ro
15d70 6f 74 50 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a  otPage)..    {..
15d80 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
15d90 44 41 52 44 0d 0a 20 20 20 20 20 20 72 65 74 75  DARD..      retu
15da0 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
15db0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74  ethods.sqlite3_t
15dc0 61 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65  able_cursor_inte
15dd0 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
15de0 5f 73 74 6d 74 2c 20 64 62 2c 20 72 6f 6f 74 50  _stmt, db, rootP
15df0 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  age);..#else..  
15e00 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a      return -1;..
15e10 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
15e20 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
15e30 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 52  erride long GetR
15e40 6f 77 49 64 46 6f 72 43 75 72 73 6f 72 28 53 51  owIdForCursor(SQ
15e50 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
15e60 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f 72 29 0d  mt, int cursor).
15e70 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
15e80 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
15e90 20 20 20 20 6c 6f 6e 67 20 72 6f 77 69 64 20 3d      long rowid =
15ea0 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74   0;..      SQLit
15eb0 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
15ec0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
15ed0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 75 72 73  ods.sqlite3_curs
15ee0 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70  or_rowid_interop
15ef0 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
15f00 6d 74 2c 20 63 75 72 73 6f 72 2c 20 72 65 66 20  mt, cursor, ref 
15f10 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20 20 69  rowid);..      i
15f20 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  f (rc == SQLiteE
15f30 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 72 65 74  rrorCode.Ok) ret
15f40 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20 20  urn rowid;....  
15f50 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23      return 0;..#
15f60 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
15f70 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  rn 0;..#endif.. 
15f80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
15f90 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
15fa0 69 64 20 47 65 74 49 6e 64 65 78 43 6f 6c 75 6d  id GetIndexColum
15fb0 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f 28 73 74  nExtendedInfo(st
15fc0 72 69 6e 67 20 64 61 74 61 62 61 73 65 2c 20 73  ring database, s
15fd0 74 72 69 6e 67 20 69 6e 64 65 78 2c 20 73 74 72  tring index, str
15fe0 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 72 65 66 20  ing column, ref 
15ff0 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20 72 65  int sortMode, re
16000 66 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c 20 72  f int onError, r
16010 65 66 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74  ef string collat
16020 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a 20 20  ionSequence)..  
16030 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
16040 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
16050 20 49 6e 74 50 74 72 20 63 6f 6c 6c 20 3d 20 49   IntPtr coll = I
16060 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
16070 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65 6e 20 3d     int colllen =
16080 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74   0;..      SQLit
16090 65 45 72 72 6f 72 43 6f 64 65 20 72 63 3b 0d 0a  eErrorCode rc;..
160a0 0d 0a 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73  ..      rc = Uns
160b0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
160c0 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63  .sqlite3_index_c
160d0 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72  olumn_info_inter
160e0 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  op(_sql, ToUTF8(
160f0 64 61 74 61 62 61 73 65 29 2c 20 54 6f 55 54 46  database), ToUTF
16100 38 28 69 6e 64 65 78 29 2c 20 54 6f 55 54 46 38  8(index), ToUTF8
16110 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 73 6f  (column), ref so
16120 72 74 4d 6f 64 65 2c 20 72 65 66 20 6f 6e 45 72  rtMode, ref onEr
16130 72 6f 72 2c 20 72 65 66 20 63 6f 6c 6c 2c 20 72  ror, ref coll, r
16140 65 66 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20  ef colllen);..  
16150 20 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51      if (rc != SQ
16160 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
16170 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
16180 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20  teException(rc, 
16190 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  null);....      
161a0 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  collationSequenc
161b0 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
161c0 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b  (coll, colllen);
161d0 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 73  ..#else..      s
161e0 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20 20  ortMode = 0;..  
161f0 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20 32 3b      onError = 2;
16200 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f  ..      collatio
16210 6e 53 65 71 75 65 6e 63 65 20 3d 20 22 42 49 4e  nSequence = "BIN
16220 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ARY";..#endif.. 
16230 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
16240 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
16250 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69  LiteErrorCode Fi
16260 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72 69 6e 67  leControl(string
16270 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74 20 6f 70   zDbName, int op
16280 2c 20 49 6e 74 50 74 72 20 70 41 72 67 29 0d 0a  , IntPtr pArg)..
16290 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
162a0 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
162b0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
162c0 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71  file_control(_sq
162d0 6c 2c 20 28 7a 44 62 4e 61 6d 65 20 21 3d 20 6e  l, (zDbName != n
162e0 75 6c 6c 29 20 3f 20 54 6f 55 54 46 38 28 7a 44  ull) ? ToUTF8(zD
162f0 62 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f  bName) : null, o
16300 70 2c 20 70 41 72 67 29 3b 0d 0a 20 20 20 20 7d  p, pArg);..    }
16310 0d 0a 20 20 7d 0d 0a 7d 0d 0a                    ..  }..}..