System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 31a8eb0742a5fcf09a4d1aa176b49eb7e117821f:


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 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
6bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c20: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
6c30: 72 65 67 69 6f 6e 20 51 75 65 72 79 20 44 69 61  region Query Dia
6c40: 67 6e 6f 73 74 69 63 73 20 53 75 70 70 6f 72 74  gnostics Support
6c50: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
6c60: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
6c70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
6c80: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
6c90: 73 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  s field is used 
6ca0: 74 6f 20 6b 65 65 70 20 74 72 61 63 6b 20 6f 66  to keep track of
6cb0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
6cc0: 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 22 53 51  the..    /// "SQ
6cd0: 4c 69 74 65 5f 46 6f 72 63 65 4c 6f 67 50 72 65  Lite_ForceLogPre
6ce0: 70 61 72 65 22 20 65 6e 76 69 72 6f 6e 6d 65 6e  pare" environmen
6cf0: 74 20 76 61 72 69 61 62 6c 65 20 68 61 73 20 62  t variable has b
6d00: 65 65 6e 20 71 75 65 72 69 65 64 2e 20 20 49 66  een queried.  If
6d10: 20 73 6f 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74   so,..    /// it
6d20: 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 6e 6f   will only be no
6d30: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 65 6e  n-zero if the en
6d40: 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
6d50: 6c 65 20 77 61 73 20 70 72 65 73 65 6e 74 2e 0d  le was present..
6d60: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
6d70: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
6d80: 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 66 6f   static bool? fo
6d90: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 20  rceLogPrepare = 
6da0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  null;....    ///
6db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6e10: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
6e20: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72  >..    /// Deter
6e30: 6d 69 6e 65 73 20 69 66 20 61 6c 6c 20 63 61 6c  mines if all cal
6e40: 6c 73 20 74 6f 20 70 72 65 70 61 72 65 20 61 20  ls to prepare a 
6e50: 53 51 4c 20 71 75 65 72 79 20 77 69 6c 6c 20 62  SQL query will b
6e60: 65 20 6c 6f 67 67 65 64 2c 0d 0a 20 20 20 20 2f  e logged,..    /
6e70: 2f 2f 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  // regardless of
6e80: 20 74 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74   the flags for t
6e90: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f  he associated co
6ea0: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
6eb0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
6ec0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
6ed0: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
6ee0: 72 6f 20 74 6f 20 6c 6f 67 20 61 6c 6c 20 63 61  ro to log all ca
6ef0: 6c 6c 73 20 74 6f 20 70 72 65 70 61 72 65 20 61  lls to prepare a
6f00: 20 53 51 4c 20 71 75 65 72 79 2e 0d 0a 20 20 20   SQL query...   
6f10: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
6f20: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
6f30: 74 69 63 20 62 6f 6f 6c 20 46 6f 72 63 65 4c 6f  tic bool ForceLo
6f40: 67 50 72 65 70 61 72 65 28 29 0d 0a 20 20 20 20  gPrepare()..    
6f50: 7b 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20  {..        lock 
6f60: 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20  (syncRoot)..    
6f70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6f80: 20 20 20 69 66 20 28 66 6f 72 63 65 4c 6f 67 50     if (forceLogP
6f90: 72 65 70 61 72 65 20 3d 3d 20 6e 75 6c 6c 29 0d  repare == null).
6fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6fc0: 69 66 20 28 55 6e 73 61 66 65 4e 61 74 69 76 65  if (UnsafeNative
6fd0: 4d 65 74 68 6f 64 73 2e 47 65 74 53 65 74 74 69  Methods.GetSetti
6fe0: 6e 67 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  ngValue(..      
6ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7000: 20 20 22 53 51 4c 69 74 65 5f 46 6f 72 63 65 4c    "SQLite_ForceL
7010: 6f 67 50 72 65 70 61 72 65 22 2c 20 6e 75 6c 6c  ogPrepare", null
7020: 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  ) != null)..    
7030: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7050: 20 20 20 66 6f 72 63 65 4c 6f 67 50 72 65 70 61     forceLogPrepa
7060: 72 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  re = true;..    
7070: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
7080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
7090: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
70a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
70b0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 63              forc
70c0: 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 20 66 61  eLogPrepare = fa
70d0: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
70e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
70f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7100: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 62 6f        return (bo
7110: 6f 6c 29 66 6f 72 63 65 4c 6f 67 50 72 65 70 61  ol)forceLogPrepa
7120: 72 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  re;..        }..
7130: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20      }..#endif.. 
7140: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
7150: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
7160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71b0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ////....    inte
71c0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
71d0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 50 72  LiteStatement Pr
71e0: 65 70 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e  epare(SQLiteConn
71f0: 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69  ection cnn, stri
7200: 6e 67 20 73 74 72 53 71 6c 2c 20 53 51 4c 69 74  ng strSql, SQLit
7210: 65 53 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69  eStatement previ
7220: 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75  ous, uint timeou
7230: 74 4d 53 2c 20 72 65 66 20 73 74 72 69 6e 67 20  tMS, ref string 
7240: 73 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20 20 20  strRemain)..    
7250: 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 21 53 74  {..      if (!St
7260: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
7270: 74 79 28 73 74 72 53 71 6c 29 29 0d 0a 20 20 20  ty(strSql))..   
7280: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
7290: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
72a0: 45 3a 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e  E: SQLite does n
72b0: 6f 74 20 73 75 70 70 6f 72 74 20 74 68 65 20 63  ot support the c
72c0: 6f 6e 63 65 70 74 20 6f 66 20 73 65 70 61 72 61  oncept of separa
72d0: 74 65 20 73 63 68 65 6d 61 73 0d 0a 20 20 20 20  te schemas..    
72e0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 20      //       in 
72f0: 6f 6e 65 20 64 61 74 61 62 61 73 65 3b 20 74 68  one database; th
7300: 65 72 65 66 6f 72 65 2c 20 72 65 6d 6f 76 65 20  erefore, remove 
7310: 74 68 65 20 62 61 73 65 20 73 63 68 65 6d 61 20  the base schema 
7320: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  name..        //
7330: 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 73         used to s
7340: 6d 6f 6f 74 68 20 69 6e 74 65 67 72 61 74 69 6f  mooth integratio
7350: 6e 20 77 69 74 68 20 74 68 65 20 62 61 73 65 20  n with the base 
7360: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d 0a  .NET Framework..
7370: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
7380: 20 64 61 74 61 20 63 6c 61 73 73 65 73 2e 0d 0a   data classes...
7390: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
73a0: 20 20 20 20 73 74 72 69 6e 67 20 62 61 73 65 53      string baseS
73b0: 63 68 65 6d 61 4e 61 6d 65 20 3d 20 28 63 6e 6e  chemaName = (cnn
73c0: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e   != null) ? cnn.
73d0: 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20  _baseSchemaName 
73e0: 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  : null;....     
73f0: 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
7400: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 62 61 73  sNullOrEmpty(bas
7410: 65 53 63 68 65 6d 61 4e 61 6d 65 29 29 0d 0a 20  eSchemaName)).. 
7420: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7430: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
7440: 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20  Sql.Replace(..  
7450: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
7460: 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72  ng.Format(Cultur
7470: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
7480: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
7490: 20 20 20 20 20 20 20 22 5b 7b 30 7d 5d 2e 22 2c         "[{0}].",
74a0: 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29   baseSchemaName)
74b0: 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b  , String.Empty);
74c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  ....          st
74d0: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65  rSql = strSql.Re
74e0: 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  place(..        
74f0: 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
7500: 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
7510: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
7520: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
7530: 20 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63 68   "{0}.", baseSch
7540: 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67  emaName), String
7550: 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20  .Empty);..      
7560: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
7570: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
7580: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
7590: 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 28  s =..          (
75a0: 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63  cnn != null) ? c
75b0: 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69 74  nn.Flags : SQLit
75c0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
75d0: 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20 20 20  .Default;....   
75e0: 20 20 20 69 66 20 28 0d 0a 23 69 66 20 21 50 4c     if (..#if !PL
75f0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
7600: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
7610: 20 20 20 46 6f 72 63 65 4c 6f 67 50 72 65 70 61     ForceLogPrepa
7620: 72 65 28 29 20 7c 7c 0d 0a 23 65 6e 64 69 66 0d  re() ||..#endif.
7630: 0a 20 20 20 20 20 20 20 20 20 20 28 28 66 6c 61  .          ((fla
7640: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
7650: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72  ctionFlags.LogPr
7660: 65 70 61 72 65 29 20 3d 3d 20 53 51 4c 69 74 65  epare) == SQLite
7670: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7680: 4c 6f 67 50 72 65 70 61 72 65 29 29 0d 0a 20 20  LogPrepare))..  
7690: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
76a0: 20 69 66 20 28 28 73 74 72 53 71 6c 20 3d 3d 20   if ((strSql == 
76b0: 6e 75 6c 6c 29 20 7c 7c 20 28 73 74 72 53 71 6c  null) || (strSql
76c0: 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 20 7c 7c  .Length == 0) ||
76d0: 20 28 73 74 72 53 71 6c 2e 54 72 69 6d 28 29 2e   (strSql.Trim().
76e0: 4c 65 6e 67 74 68 20 3d 3d 20 30 29 29 0d 0a 20  Length == 0)).. 
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
7700: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
7710: 65 28 22 50 72 65 70 61 72 69 6e 67 20 7b 3c 6e  e("Preparing {<n
7720: 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a  othing>}...");..
7730: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
7740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
7750: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
7760: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
7770: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7780: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
7790: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
77a0: 20 22 50 72 65 70 61 72 69 6e 67 20 7b 7b 7b 30   "Preparing {{{0
77b0: 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72 53 71 6c 29  }}}...", strSql)
77c0: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  );..      }.... 
77d0: 20 20 20 20 20 49 6e 74 50 74 72 20 73 74 6d 74       IntPtr stmt
77e0: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
77f0: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74  .      IntPtr pt
7800: 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
7810: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
7820: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  = 0;..      SQLi
7830: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
7840: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
7850: 53 63 68 65 6d 61 3b 0d 0a 20 20 20 20 20 20 69  Schema;..      i
7860: 6e 74 20 72 65 74 72 69 65 73 20 3d 20 30 3b 0d  nt retries = 0;.
7870: 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20  .      byte[] b 
7880: 3d 20 54 6f 55 54 46 38 28 73 74 72 53 71 6c 29  = ToUTF8(strSql)
7890: 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ;..      string 
78a0: 74 79 70 65 64 65 66 73 20 3d 20 6e 75 6c 6c 3b  typedefs = null;
78b0: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53 74  ..      SQLiteSt
78c0: 61 74 65 6d 65 6e 74 20 63 6d 64 20 3d 20 6e 75  atement cmd = nu
78d0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f  ll;..      Rando
78e0: 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  m rnd = null;.. 
78f0: 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74 74       uint startt
7900: 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69  ick = (uint)Envi
7910: 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e  ronment.TickCoun
7920: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 47 43 48 61  t;....      GCHa
7930: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 47 43  ndle handle = GC
7940: 48 61 6e 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20  Handle.Alloc(b, 
7950: 47 43 48 61 6e 64 6c 65 54 79 70 65 2e 50 69 6e  GCHandleType.Pin
7960: 6e 65 64 29 3b 0d 0a 20 20 20 20 20 20 49 6e 74  ned);..      Int
7970: 50 74 72 20 70 73 71 6c 20 3d 20 68 61 6e 64 6c  Ptr psql = handl
7980: 65 2e 41 64 64 72 4f 66 50 69 6e 6e 65 64 4f 62  e.AddrOfPinnedOb
7990: 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 53  ject();..      S
79a0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
79b0: 6e 64 6c 65 20 73 74 61 74 65 6d 65 6e 74 48 61  ndle statementHa
79c0: 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  ndle = null;..  
79d0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 7b      try..      {
79e0: 0d 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20  ..        while 
79f0: 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
7a00: 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 20 7c 7c  orCode.Schema ||
7a10: 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   n == SQLiteErro
7a20: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
7a30: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
7a40: 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20 72 65  Code.Busy) && re
7a50: 74 72 69 65 73 20 3c 20 33 29 0d 0a 20 20 20 20  tries < 3)..    
7a60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7a70: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
7a80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
7a90: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
7aa0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
7ab0: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a        finally /*
7ac0: 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62   NOTE: Thread.Ab
7ad0: 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e  ort() protection
7ae0: 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  . */..          
7af0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
7b00: 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tmt = IntPtr.Zer
7b10: 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
7b20: 70 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ptr = IntPtr.Zer
7b30: 6f 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  o;....#if !SQLIT
7b40: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
7b50: 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 30 3b          len = 0;
7b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
7b70: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
7b80: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72  thods.sqlite3_pr
7b90: 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 5f 73  epare_interop(_s
7ba0: 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67  ql, psql, b.Leng
7bb0: 74 68 20 2d 20 31 2c 20 72 65 66 20 73 74 6d 74  th - 1, ref stmt
7bc0: 2c 20 72 65 66 20 70 74 72 2c 20 72 65 66 20 6c  , ref ptr, ref l
7bd0: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 23 69 66  en);..#else..#if
7be0: 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56 32 0d   USE_PREPARE_V2.
7bf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
7c00: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
7c10: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65  hods.sqlite3_pre
7c20: 70 61 72 65 5f 76 32 28 5f 73 71 6c 2c 20 70 73  pare_v2(_sql, ps
7c30: 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31  ql, b.Length - 1
7c40: 2c 20 72 65 66 20 73 74 6d 74 2c 20 72 65 66 20  , ref stmt, ref 
7c50: 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ptr);..#else..  
7c60: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
7c70: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7c80: 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  s.sqlite3_prepar
7c90: 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e  e(_sql, psql, b.
7ca0: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72 65 66 20  Length - 1, ref 
7cb0: 73 74 6d 74 2c 20 72 65 66 20 70 74 72 29 3b 0d  stmt, ref ptr);.
7cc0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
7cd0: 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a       len = -1;..
7ce0: 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 21 4e  #endif....#if !N
7cf0: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
7d00: 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54   TRACE_STATEMENT
7d10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72  ..            Tr
7d20: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74  ace.WriteLine(St
7d30: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 50 72 65  ring.Format("Pre
7d40: 70 61 72 65 20 28 7b 30 7d 29 3a 20 7b 31 7d 22  pare ({0}): {1}"
7d50: 2c 20 6e 2c 20 73 74 6d 74 29 29 3b 0d 0a 23 65  , n, stmt));..#e
7d60: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
7d70: 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51      if ((n == SQ
7d80: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
7d90: 29 20 26 26 20 28 73 74 6d 74 20 21 3d 20 49 6e  ) && (stmt != In
7da0: 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20  tPtr.Zero))..   
7db0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7dc0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
7dd0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d  atementHandle !=
7de0: 20 6e 75 6c 6c 29 20 73 74 61 74 65 6d 65 6e 74   null) statement
7df0: 48 61 6e 64 6c 65 2e 44 69 73 70 6f 73 65 28 29  Handle.Dispose()
7e00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7e10: 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65   statementHandle
7e20: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61   = new SQLiteSta
7e30: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 28 5f 73 71  tementHandle(_sq
7e40: 6c 2c 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20  l, stmt);..     
7e50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7e60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7e70: 20 20 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74     if (statement
7e80: 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d  Handle != null).
7e90: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
7ea0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
7eb0: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61  Connection.OnCha
7ec0: 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43  nged(null, new C
7ed0: 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72  onnectionEventAr
7ee0: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
7ef0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
7f00: 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77  ionEventType.New
7f10: 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20  CriticalHandle, 
7f20: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20  null, null,..   
7f30: 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c             null,
7f40: 20 6e 75 6c 6c 2c 20 73 74 61 74 65 6d 65 6e 74   null, statement
7f50: 48 61 6e 64 6c 65 2c 20 73 74 72 53 71 6c 2c 20  Handle, strSql, 
7f60: 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 20 63  new object[] { c
7f70: 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nn,..           
7f80: 20 20 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69     strSql, previ
7f90: 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 20 7d  ous, timeoutMS }
7fa0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ));..          }
7fb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
7fc0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
7fd0: 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 29 0d 0a  orCode.Schema)..
7fe0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72              retr
7ff0: 69 65 73 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ies++;..        
8000: 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
8010: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
8020: 45 72 72 6f 72 29 0d 0a 20 20 20 20 20 20 20 20  Error)..        
8030: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8040: 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70   if (String.Comp
8050: 61 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f 72  are(GetLastError
8060: 28 29 2c 20 22 6e 65 61 72 20 5c 22 54 59 50 45  (), "near \"TYPE
8070: 53 5c 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f  S\": syntax erro
8080: 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  r", StringCompar
8090: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
80a0: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
80b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
80c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
80d0: 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 49 6e 64  pos = strSql.Ind
80e0: 65 78 4f 66 28 27 3b 27 29 3b 0d 0a 20 20 20 20  exOf(';');..    
80f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6f            if (po
8100: 73 20 3d 3d 20 2d 31 29 20 70 6f 73 20 3d 20 73  s == -1) pos = s
8110: 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 31  trSql.Length - 1
8120: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8130: 20 20 20 74 79 70 65 64 65 66 73 20 3d 20 73 74     typedefs = st
8140: 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30  rSql.Substring(0
8150: 2c 20 70 6f 73 20 2b 20 31 29 3b 0d 0a 20 20 20  , pos + 1);..   
8160: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71             strSq
8170: 6c 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73 74  l = strSql.Subst
8180: 72 69 6e 67 28 70 6f 73 20 2b 20 31 29 3b 0d 0a  ring(pos + 1);..
8190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
81a0: 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b 0d  strRemain = "";.
81b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
81c0: 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e   while (cmd == n
81d0: 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65  ull && strSql.Le
81e0: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
81f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8200: 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 20              cmd 
8210: 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73  = Prepare(cnn, s
8220: 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c  trSql, previous,
8230: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20   timeoutMS, ref 
8240: 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20  strRemain);..   
8250: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
8260: 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b  Sql = strRemain;
8270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8280: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
8290: 20 20 20 69 66 20 28 63 6d 64 20 21 3d 20 6e 75     if (cmd != nu
82a0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
82b0: 20 20 20 20 20 63 6d 64 2e 53 65 74 54 79 70 65       cmd.SetType
82c0: 73 28 74 79 70 65 64 65 66 73 29 3b 0d 0a 0d 0a  s(typedefs);....
82d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
82e0: 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20  turn cmd;..     
82f0: 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 28 4e         }..#if (N
8300: 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f 34 30 20  ET_35 || NET_40 
8310: 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54  || NET_45 || NET
8320: 5f 34 35 31 29 20 26 26 20 21 50 4c 41 54 46 4f  _451) && !PLATFO
8330: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
8340: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
8350: 20 65 6c 73 65 20 69 66 20 28 5f 62 75 69 6c 64   else if (_build
8360: 69 6e 67 53 63 68 65 6d 61 20 3d 3d 20 66 61 6c  ingSchema == fal
8370: 73 65 20 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d  se && String.Com
8380: 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f  pare(GetLastErro
8390: 72 28 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68  r(), 0, "no such
83a0: 20 74 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48   table: TEMP.SCH
83b0: 45 4d 41 22 2c 20 30 2c 20 32 36 2c 20 53 74 72  EMA", 0, 26, Str
83c0: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
83d0: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
83e0: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
83f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8400: 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d       strRemain =
8410: 20 22 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   "";..          
8420: 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68      _buildingSch
8430: 65 6d 61 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ema = true;..   
8440: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
8450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
8460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8470: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
8480: 74 65 6e 73 69 6f 6e 73 20 65 78 74 20 3d 20 28  tensions ext = (
8490: 28 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65  (IServiceProvide
84a0: 72 29 53 51 4c 69 74 65 46 61 63 74 6f 72 79 2e  r)SQLiteFactory.
84b0: 49 6e 73 74 61 6e 63 65 29 2e 47 65 74 53 65 72  Instance).GetSer
84c0: 76 69 63 65 28 74 79 70 65 6f 66 28 49 53 51 4c  vice(typeof(ISQL
84d0: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
84e0: 6f 6e 73 29 29 20 61 73 20 49 53 51 4c 69 74 65  ons)) as ISQLite
84f0: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
8500: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8510: 20 20 20 20 20 69 66 20 28 65 78 74 20 21 3d 20       if (ext != 
8520: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8530: 20 20 20 20 20 20 20 20 20 65 78 74 2e 42 75 69           ext.Bui
8540: 6c 64 54 65 6d 70 53 63 68 65 6d 61 28 63 6e 6e  ldTempSchema(cnn
8550: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
8560: 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64        while (cmd
8570: 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53   == null && strS
8580: 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  ql.Length > 0)..
8590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
85b0: 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61       cmd = Prepa
85c0: 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20  re(cnn, strSql, 
85d0: 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75  previous, timeou
85e0: 74 4d 53 2c 20 72 65 66 20 73 74 72 52 65 6d 61  tMS, ref strRema
85f0: 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  in);..          
8600: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
8610: 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20   strRemain;..   
8620: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
8630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8640: 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20    return cmd;.. 
8650: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
8660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
8670: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
8680: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8690: 20 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e          _buildin
86a0: 67 53 63 68 65 6d 61 20 3d 20 66 61 6c 73 65 3b  gSchema = false;
86b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
86c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
86d0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
86e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
86f0: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
8700: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c  QLiteErrorCode.L
8710: 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51  ocked || n == SQ
8720: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75  LiteErrorCode.Bu
8730: 73 79 29 20 2f 2f 20 4c 6f 63 6b 65 64 20 2d 2d  sy) // Locked --
8740: 20 64 65 6c 61 79 20 61 20 73 6d 61 6c 6c 20 61   delay a small a
8750: 6d 6f 75 6e 74 20 62 65 66 6f 72 65 20 72 65 74  mount before ret
8760: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
8770: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8780: 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a  // Keep trying..
8790: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
87a0: 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20  rnd == null) // 
87b0: 46 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65  First time we've
87c0: 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65   encountered the
87d0: 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20   lock..         
87e0: 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52       rnd = new R
87f0: 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20  andom();....    
8800: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
8810: 27 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65  've exceeded the
8820: 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f   command's timeo
8830: 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20  ut, give up and 
8840: 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a  throw an error..
8850: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8860: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
8870: 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74  t.TickCount - st
8880: 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75  arttick > timeou
8890: 74 4d 53 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tMS)..          
88a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
88b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
88c0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
88d0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
88e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
88f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
8900: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
8910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8920: 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65  // Otherwise sle
8930: 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20  ep for a random 
8940: 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75  amount of time u
8950: 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20  p to 150ms..    
8960: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
8970: 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61  .Threading.Threa
8980: 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74  d.Sleep(rnd.Next
8990: 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20  (1, 150));..    
89a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
89b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
89c0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
89d0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
89e0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
89f0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
8a00: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
8a10: 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
8a20: 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 55     strRemain = U
8a30: 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c  TF8ToString(ptr,
8a40: 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   len);....      
8a50: 20 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48    if (statementH
8a60: 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 63  andle != null) c
8a70: 6d 64 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53  md = new SQLiteS
8a80: 74 61 74 65 6d 65 6e 74 28 74 68 69 73 2c 20 66  tatement(this, f
8a90: 6c 61 67 73 2c 20 73 74 61 74 65 6d 65 6e 74 48  lags, statementH
8aa0: 61 6e 64 6c 65 2c 20 73 74 72 53 71 6c 2e 53 75  andle, strSql.Su
8ab0: 62 73 74 72 69 6e 67 28 30 2c 20 73 74 72 53 71  bstring(0, strSq
8ac0: 6c 2e 4c 65 6e 67 74 68 20 2d 20 73 74 72 52 65  l.Length - strRe
8ad0: 6d 61 69 6e 2e 4c 65 6e 67 74 68 29 2c 20 70 72  main.Length), pr
8ae0: 65 76 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20 20 20  evious);....    
8af0: 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d      return cmd;.
8b00: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
8b10: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 7b  finally..      {
8b20: 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65  ..        handle
8b30: 2e 46 72 65 65 28 29 3b 0d 0a 20 20 20 20 20 20  .Free();..      
8b40: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
8b50: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
8b60: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
8b70: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
8b80: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
8b90: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
8ba0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
8bb0: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
8bc0: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
8bd0: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
8be0: 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  sage(String.Form
8bf0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
8c00: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
8c10: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
8c20: 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69            "Bindi
8c30: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d  ng statement {0}
8c40: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61   paramter #{1} a
8c50: 73 20 4e 55 4c 4c 2e 2e 2e 22 2c 0d 0a 20 20 20  s NULL...",..   
8c60: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
8c70: 6e 74 50 74 72 2c 20 69 6e 64 65 78 29 29 3b 0d  ntPtr, index));.
8c80: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
8c90: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
8ca0: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
8cb0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
8cc0: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
8cd0: 64 65 78 2c 20 56 61 6c 75 65 54 79 70 65 20 76  dex, ValueType v
8ce0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
8cf0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
8d00: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
8d10: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  le;....        S
8d20: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
8d30: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
8d40: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
8d50: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
8d60: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
8d70: 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d  #{1} as type {2}
8d80: 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33   with value {{{3
8d90: 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  }}}...",..      
8da0: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
8db0: 74 72 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  tr, index, value
8dc0: 2e 47 65 74 54 79 70 65 28 29 2c 20 76 61 6c 75  .GetType(), valu
8dd0: 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  e));..    }.... 
8de0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
8df0: 63 20 73 74 72 69 6e 67 20 46 6f 72 6d 61 74 44  c string FormatD
8e00: 61 74 65 54 69 6d 65 28 44 61 74 65 54 69 6d 65  ateTime(DateTime
8e10: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
8e20: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75          StringBu
8e30: 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e  ilder result = n
8e40: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
8e50: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ();....        r
8e60: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c  esult.Append(val
8e70: 75 65 2e 54 6f 53 74 72 69 6e 67 28 22 79 79 79  ue.ToString("yyy
8e80: 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73  y-MM-ddTHH:mm:ss
8e90: 2e 46 46 46 46 46 46 46 4b 22 29 29 3b 0d 0a 20  .FFFFFFFK"));.. 
8ea0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
8eb0: 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20  pend(' ');..    
8ec0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
8ed0: 64 28 76 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d 0a  d(value.Kind);..
8ee0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
8ef0: 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20  ppend(' ');..   
8f00: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
8f10: 6e 64 28 76 61 6c 75 65 2e 54 69 63 6b 73 29 3b  nd(value.Ticks);
8f20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
8f30: 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69  rn result.ToStri
8f40: 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ng();..    }....
8f50: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74      protected st
8f60: 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e  atic void LogBin
8f70: 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  d(SQLiteStatemen
8f80: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20  tHandle handle, 
8f90: 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54  int index, DateT
8fa0: 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ime value)..    
8fb0: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
8fc0: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
8fd0: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
8fe0: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
8ff0: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
9000: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
9010: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
9020: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
9030: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
9040: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
9050: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
9060: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
9070: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
9080: 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29  typeof(DateTime)
9090: 2c 20 46 6f 72 6d 61 74 44 61 74 65 54 69 6d 65  , FormatDateTime
90a0: 28 76 61 6c 75 65 29 29 29 3b 0d 0a 20 20 20 20  (value)));..    
90b0: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
90c0: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
90d0: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
90e0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
90f0: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
9100: 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20  string value).. 
9110: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
9120: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
9130: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
9140: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
9150: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
9160: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
9170: 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67          "Binding
9180: 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70   statement {0} p
9190: 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20  aramter #{1} as 
91a0: 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61  type {2} with va
91b0: 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c  lue {{{3}}}...",
91c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61  ..            ha
91d0: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65  ndleIntPtr, inde
91e0: 78 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67  x, typeof(String
91f0: 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c  ), (value != nul
9200: 6c 29 20 3f 20 76 61 6c 75 65 20 3a 20 22 3c 6e  l) ? value : "<n
9210: 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d  ull>"));..    }.
9220: 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  ...    private s
9230: 74 61 74 69 63 20 73 74 72 69 6e 67 20 54 6f 48  tatic string ToH
9240: 65 78 61 64 65 63 69 6d 61 6c 53 74 72 69 6e 67  exadecimalString
9250: 28 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b  (..        byte[
9260: 5d 20 61 72 72 61 79 0d 0a 20 20 20 20 20 20 20  ] array..       
9270: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
9280: 20 20 20 69 66 20 28 61 72 72 61 79 20 3d 3d 20     if (array == 
9290: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
92a0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
92b0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e  ...        Strin
92c0: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
92d0: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
92e0: 64 65 72 28 61 72 72 61 79 2e 4c 65 6e 67 74 68  der(array.Length
92f0: 20 2a 20 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   * 2);....      
9300: 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61    int length = a
9310: 72 72 61 79 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  rray.Length;....
9320: 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
9330: 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65   index = 0; inde
9340: 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65  x < length; inde
9350: 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x++)..          
9360: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
9370: 61 72 72 61 79 5b 69 6e 64 65 78 5d 2e 54 6f 53  array[index].ToS
9380: 74 72 69 6e 67 28 22 78 32 22 29 29 3b 0d 0a 0d  tring("x2"));...
9390: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
93a0: 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28  result.ToString(
93b0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
93c0: 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69   protected stati
93d0: 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53  c void LogBind(S
93e0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
93f0: 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74  ndle handle, int
9400: 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 76   index, byte[] v
9410: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
9420: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
9430: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
9440: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  le;....        S
9450: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
9460: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
9470: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
9480: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
9490: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
94a0: 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d  #{1} as type {2}
94b0: 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33   with value {{{3
94c0: 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  }}}...",..      
94d0: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
94e0: 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f  tr, index, typeo
94f0: 66 28 42 79 74 65 5b 5d 29 2c 20 28 76 61 6c 75  f(Byte[]), (valu
9500: 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 48  e != null) ? ToH
9510: 65 78 61 64 65 63 69 6d 61 6c 53 74 72 69 6e 67  exadecimalString
9520: 28 76 61 6c 75 65 29 20 3a 20 22 3c 6e 75 6c 6c  (value) : "<null
9530: 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  >"));..    }....
9540: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9550: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
9560: 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61  Double(SQLiteSta
9570: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
9580: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
9590: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
95a0: 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75  dex, double valu
95b0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
95c0: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
95d0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
95e0: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
95f0: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
9600: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
9610: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
9620: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
9630: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
9640: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
9650: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9660: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
9670: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
9680: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
9690: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
96a0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
96b0: 4b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  K..        SQLit
96c0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
96d0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
96e0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
96f0: 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69  double(handle, i
9700: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
9710: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
9720: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53  NDARD..        S
9730: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
9740: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
9750: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
9760: 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  ind_double_inter
9770: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
9780: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
9790: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
97a0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
97b0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
97c0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
97d0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
97e0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
97f0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
9800: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
9810: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
9820: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
9830: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
9840: 6f 69 64 20 42 69 6e 64 5f 49 6e 74 33 32 28 53  oid Bind_Int32(S
9850: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
9860: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
9870: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
9880: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74  , int index, int
9890: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
98a0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
98b0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
98c0: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
98d0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20  ite_stmt;....   
98e0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
98f0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
9900: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
9910: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
9920: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
9930: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
9940: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
9950: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
9960: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
9970: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
9980: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
9990: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
99a0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
99b0: 62 69 6e 64 5f 69 6e 74 28 68 61 6e 64 6c 65 2c  bind_int(handle,
99c0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
99d0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
99e0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
99f0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
9a00: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
9a10: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
9a20: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
9a30: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
9a40: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49  ide void Bind_UI
9a50: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
9a60: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
9a70: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
9a80: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
9a90: 78 2c 20 75 69 6e 74 20 76 61 6c 75 65 29 0d 0a  x, uint value)..
9aa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
9ab0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
9ac0: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
9ad0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
9ae0: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
9af0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
9b00: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
9b10: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
9b20: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
9b30: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
9b40: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
9b50: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
9b60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9b70: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
9b80: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
9b90: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
9ba0: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  dif....        S
9bb0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
9bc0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
9bd0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
9be0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
9bf0: 42 69 6e 64 55 49 6e 74 33 32 41 73 49 6e 74 36  BindUInt32AsInt6
9c00: 34 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  4) == SQLiteConn
9c10: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64  ectionFlags.Bind
9c20: 55 49 6e 74 33 32 41 73 49 6e 74 36 34 29 0d 0a  UInt32AsInt64)..
9c30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9c40: 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75         long valu
9c50: 65 32 20 3d 20 76 61 6c 75 65 3b 0d 0a 0d 0a 23  e2 = value;....#
9c60: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
9c70: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
9c80: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
9c90: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9ca0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
9cb0: 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e  int64(handle, in
9cc0: 64 65 78 2c 20 76 61 6c 75 65 32 29 3b 0d 0a 23  dex, value2);..#
9cd0: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
9ce0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
9cf0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
9d00: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9d10: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e  e3_bind_int64_in
9d20: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
9d30: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 32 29  dex, ref value2)
9d40: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
9d50: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
9d60: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
9d70: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
9d80: 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  if..        }.. 
9d90: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
9da0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9db0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
9dc0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9dd0: 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 28 68 61  te3_bind_uint(ha
9de0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
9df0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
9e00: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
9e10: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
9e20: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
9e30: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
9e40: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
9e50: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
9e60: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
9e70: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e  ide void Bind_In
9e80: 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t64(SQLiteStatem
9e90: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
9ea0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
9eb0: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
9ec0: 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20  , long value).. 
9ed0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
9ee0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
9ef0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
9f00: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
9f10: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
9f20: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
9f30: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
9f40: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
9f50: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
9f60: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
9f70: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
9f80: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
9f90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9fa0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
9fb0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
9fc0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
9fd0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
9fe0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
9ff0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
a000: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
a010: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
a020: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
a030: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
a040: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
a050: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
a060: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
a070: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
a080: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
a090: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
a0a0: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
a0b0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
a0c0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
a0d0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
a0e0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20  dif..        if 
a0f0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
a100: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
a110: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
a120: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
a130: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
a140: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
a150: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
a160: 64 5f 55 49 6e 74 36 34 28 53 51 4c 69 74 65 53  d_UInt64(SQLiteS
a170: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
a180: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
a190: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
a1a0: 69 6e 64 65 78 2c 20 75 6c 6f 6e 67 20 76 61 6c  index, ulong val
a1b0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
a1c0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
a1d0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
a1e0: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
a1f0: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
a200: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
a210: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
a220: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
a230: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
a240: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
a250: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
a260: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
a270: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a280: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
a290: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
a2a0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
a2b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
a2c0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
a2d0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a2e0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
a2f0: 5f 75 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  _uint64(handle, 
a300: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
a310: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
a320: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
a330: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
a340: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
a350: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a360: 62 69 6e 64 5f 75 69 6e 74 36 34 5f 69 6e 74 65  bind_uint64_inte
a370: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
a380: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
a390: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74  #else..        t
a3a0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
a3b0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
a3c0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
a3d0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
a3e0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
a3f0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
a400: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
a410: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
a420: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
a430: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
a440: 76 6f 69 64 20 42 69 6e 64 5f 54 65 78 74 28 53  void Bind_Text(S
a450: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
a460: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
a470: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
a480: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72  , int index, str
a490: 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ing value)..    
a4a0: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
a4b0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
a4c0: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
a4d0: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
a4e0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
a4f0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
a500: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
a510: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
a520: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
a530: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
a540: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
a550: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
a560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
a570: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
a580: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
a590: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
a5a0: 0a 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b  ...        byte[
a5b0: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c  ] b = ToUTF8(val
a5c0: 75 65 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  ue);....#if !PLA
a5d0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
a5e0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
a5f0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
a600: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
a610: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
a620: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
a630: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
a640: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a650: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
a660: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b  ndle, index, b);
a670: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
a680: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  dif....        S
a690: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
a6a0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
a6b0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
a6c0: 69 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c  ind_text(handle,
a6d0: 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e   index, b, b.Len
a6e0: 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72  gth - 1, (IntPtr
a6f0: 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20  )(-1));..       
a700: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
a710: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
a720: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
a730: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
a740: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
a750: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
a760: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
a770: 20 42 69 6e 64 5f 44 61 74 65 54 69 6d 65 28 53   Bind_DateTime(S
a780: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
a790: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
a7a0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
a7b0: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74  , int index, Dat
a7c0: 65 54 69 6d 65 20 64 74 29 0d 0a 20 20 20 20 7b  eTime dt)..    {
a7d0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
a7e0: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
a7f0: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
a800: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23  qlite_stmt;....#
a810: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
a820: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
a830: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
a840: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
a850: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
a860: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
a870: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
a880: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
a890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
a8a0: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
a8b0: 65 78 2c 20 64 74 29 3b 0d 0a 20 20 20 20 20 20  ex, dt);..      
a8c0: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
a8d0: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28 5f         switch (_
a8e0: 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 29 0d  datetimeFormat).
a8f0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
a900: 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
a910: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54  iteDateFormats.T
a920: 69 63 6b 73 3a 0d 0a 20 20 20 20 20 20 20 20 20  icks:..         
a930: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
a950: 6e 67 20 76 61 6c 75 65 20 3d 20 64 74 2e 54 69  ng value = dt.Ti
a960: 63 6b 73 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  cks;....#if !PLA
a970: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
a980: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
a990: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
a9a0: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
a9b0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
a9c0: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
a9d0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
a9e0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
a9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
aa00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aa10: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
aa20: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
aa30: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
aa40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
aa50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
aa60: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
aa70: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
aa80: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
aa90: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
aaa0: 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  4(handle, index,
aab0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20   value);..#elif 
aac0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
aad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aae0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
aaf0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
ab00: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ab10: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
ab20: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
ab30: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
ab40: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
ab50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab60: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
ab70: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
ab80: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
ab90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aba0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
abb0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
abc0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
abd0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
abe0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
abf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac00: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
ac10: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
ac20: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
ac30: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
ac40: 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a 20 20 20 20  JulianDay:..    
ac50: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac70: 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 20     double value 
ac80: 3d 20 54 6f 4a 75 6c 69 61 6e 44 61 79 28 64 74  = ToJulianDay(dt
ac90: 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  );....#if !PLATF
aca0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
acb0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
acc0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66            if ((f
acd0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
ace0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
acf0: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
ad00: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
ad10: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
ad20: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
ad30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad40: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
ad50: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
ad60: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
ad80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ad90: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
ada0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
adb0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
adc0: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
add0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
ade0: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
adf0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
ae00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ae10: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
ae20: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
ae30: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
ae40: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
ae50: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
ae60: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
ae70: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
ae80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae90: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
aea0: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
aeb0: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
aec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aed0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
aee0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
aef0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
af00: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
af10: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
af20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af30: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
af40: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
af50: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
af60: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
af70: 55 6e 69 78 45 70 6f 63 68 3a 0d 0a 20 20 20 20  UnixEpoch:..    
af80: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
af90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afa0: 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20     long value = 
afb0: 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 36 34 28  Convert.ToInt64(
afc0: 64 74 2e 53 75 62 74 72 61 63 74 28 55 6e 69 78  dt.Subtract(Unix
afd0: 45 70 6f 63 68 29 2e 54 6f 74 61 6c 53 65 63 6f  Epoch).TotalSeco
afe0: 6e 64 73 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  nds);....#if !PL
aff0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
b000: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
b010: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b020: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
b030: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
b040: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
b050: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
b060: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
b070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b080: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b090: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
b0a0: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
b0b0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
b0d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b0e0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
b0f0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
b100: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b110: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
b120: 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  64(handle, index
b130: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66  , value);..#elif
b140: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
b150: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  D..             
b160: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
b170: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
b180: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b190: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
b1a0: 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  4_interop(handle
b1b0: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
b1c0: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
b1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1e0: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
b1f0: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
b200: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
b210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b220: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
b230: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
b240: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
b250: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
b260: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
b270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b280: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
b290: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b2a0: 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
b2b0: 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t:..            
b2c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b2d0: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
b2e0: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 64 74 29  ] b = ToUTF8(dt)
b2f0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
b300: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
b310: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
b320: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c           if ((fl
b330: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
b340: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
b350: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
b360: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
b370: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
b380: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3a0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
b3b0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29  andle, index, b)
b3c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
b3d0: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
b3e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b3f0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
b400: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
b410: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b420: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
b430: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
b440: 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31   b, b.Length - 1
b450: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
b460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b470: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
b480: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
b490: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
b4a0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
b4b0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
b4c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b4d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
b4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
b4f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
b500: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
b510: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
b520: 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69 74 65  Bind_Blob(SQLite
b530: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
b540: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
b550: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
b560: 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 62   index, byte[] b
b570: 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d  lobData)..    {.
b580: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
b590: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
b5a0: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
b5b0: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69  lite_stmt;....#i
b5c0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
b5d0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
b5e0: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
b5f0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
b600: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
b610: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
b620: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
b630: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
b640: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
b650: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
b660: 78 2c 20 62 6c 6f 62 44 61 74 61 29 3b 0d 0a 20  x, blobData);.. 
b670: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
b680: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
b690: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
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 62 6c 6f 62 28 68 61 6e 64 6c 65 2c 20 69 6e  _blob(handle, in
b6d0: 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20 62  dex, blobData, b
b6e0: 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c 20  lobData.Length, 
b6f0: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
b700: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
b710: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
b720: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
b730: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
b740: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
b750: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
b760: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b770: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c  de void Bind_Nul
b780: 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  l(SQLiteStatemen
b790: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
b7a0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
b7b0: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  ags, int index).
b7c0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
b7d0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
b7e0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
b7f0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
b800: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
b810: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
b820: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
b830: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
b840: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
b850: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
b860: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
b870: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
b880: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b890: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
b8a0: 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  e, index);..    
b8b0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
b8c0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
b8d0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
b8e0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b8f0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75  .sqlite3_bind_nu
b900: 6c 6c 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  ll(handle, index
b910: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
b920: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
b930: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
b940: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
b950: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
b960: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
b970: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b980: 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f  erride int Bind_
b990: 50 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c 69 74  ParamCount(SQLit
b9a0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
b9b0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
b9c0: 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20  nFlags flags).. 
b9d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
b9e0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
b9f0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
ba00: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
ba10: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 76 61 6c  .        int val
ba20: 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ue = UnsafeNativ
ba30: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ba40: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
ba50: 63 6f 75 6e 74 28 68 61 6e 64 6c 65 29 3b 0d 0a  count(handle);..
ba60: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
ba70: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
ba80: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
ba90: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
baa0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
bab0: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
bac0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
bad0: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
bae0: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
baf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
bb00: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
bb10: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
bb20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bb30: 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
bb40: 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
bb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
bb60: 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  Statement {0} pa
bb70: 72 61 6d 74 65 72 20 63 6f 75 6e 74 20 69 73 20  ramter count is 
bb80: 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  {1}.",..        
bb90: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
bba0: 74 50 74 72 2c 20 76 61 6c 75 65 29 29 3b 0d 0a  tPtr, value));..
bbb0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
bbc0: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
bbd0: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
bbe0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
bbf0: 64 65 20 73 74 72 69 6e 67 20 42 69 6e 64 5f 50  de string Bind_P
bc00: 61 72 61 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53  aramName(SQLiteS
bc10: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
bc20: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
bc30: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
bc40: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
bc50: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
bc60: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
bc70: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
bc80: 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20  te_stmt;..      
bc90: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 3b 0d 0a    string name;..
bca0: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
bcb0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
bcc0: 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20  int len = 0;..  
bcd0: 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46        name = UTF
bce0: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
bcf0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
bd00: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
bd10: 65 74 65 72 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  eter_name_intero
bd20: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
bd30: 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   ref len), len);
bd40: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
bd50: 20 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74   name = UTF8ToSt
bd60: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
bd70: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
bd80: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
bd90: 6e 61 6d 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64  name(handle, ind
bda0: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
bdb0: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  f....        if 
bdc0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
bdd0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
bde0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
bdf0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
be00: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
be10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
be20: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
be30: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
be40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
be50: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
be60: 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  sage(String.Form
be70: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
be80: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
be90: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
bea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
beb0: 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d    "Statement {0}
bec0: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 6e   paramter #{1} n
bed0: 61 6d 65 20 69 73 20 7b 7b 7b 32 7d 7d 7d 2e 22  ame is {{{2}}}."
bee0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
bef0: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
bf00: 20 69 6e 64 65 78 2c 20 6e 61 6d 65 29 29 3b 0d   index, name));.
bf10: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
bf20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 61 6d        return nam
bf30: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
bf40: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
bf50: 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61  de int Bind_Para
bf60: 6d 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61  mIndex(SQLiteSta
bf70: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
bf80: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
bf90: 67 73 20 66 6c 61 67 73 2c 20 73 74 72 69 6e 67  gs flags, string
bfa0: 20 70 61 72 61 6d 4e 61 6d 65 29 0d 0a 20 20 20   paramName)..   
bfb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
bfc0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
bfd0: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
bfe0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20  _sqlite_stmt;.. 
bff0: 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78         int index
c000: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
c010: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
c020: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e  ind_parameter_in
c030: 64 65 78 28 68 61 6e 64 6c 65 2c 20 54 6f 55 54  dex(handle, ToUT
c040: 46 38 28 70 61 72 61 6d 4e 61 6d 65 29 29 3b 0d  F8(paramName));.
c050: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
c060: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
c070: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
c080: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
c090: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
c0a0: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
c0b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c0c0: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
c0d0: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
c0e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
c0f0: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
c100: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
c110: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
c120: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
c130: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
c140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c150: 22 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70  "Statement {0} p
c160: 61 72 61 6d 74 65 72 20 69 6e 64 65 78 20 6f 66  aramter index of
c170: 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d 7d 20 69 73   name {{{1}}} is
c180: 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20 20 20 20 20   #{2}.",..      
c190: 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65            handle
c1a0: 49 6e 74 50 74 72 2c 20 70 61 72 61 6d 4e 61 6d  IntPtr, paramNam
c1b0: 65 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20  e, index));..   
c1c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
c1d0: 20 20 72 65 74 75 72 6e 20 69 6e 64 65 78 3b 0d    return index;.
c1e0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
c1f0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
c200: 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28  int ColumnCount(
c210: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
c220: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
c230: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
c240: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c250: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
c260: 75 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  unt(stmt._sqlite
c270: 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a  _stmt);..    }..
c280: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
c290: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
c2a0: 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c 69 74 65  olumnName(SQLite
c2b0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
c2c0: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
c2d0: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
c2e0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
c2f0: 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
c300: 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
c310: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
c320: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
c330: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74  _name_interop(st
c340: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
c350: 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29   index, ref len)
c360: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
c370: 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66  IntPtr p = Unsaf
c380: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c390: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
c3a0: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
c3b0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23  stmt, index);..#
c3c0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20  endif..      if 
c3d0: 28 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  (p == IntPtr.Zer
c3e0: 6f 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  o)..        thro
c3f0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
c400: 70 74 69 6f 6e 28 53 51 4c 69 74 65 45 72 72 6f  ption(SQLiteErro
c410: 72 43 6f 64 65 2e 4e 6f 4d 65 6d 2c 20 47 65 74  rCode.NoMem, Get
c420: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23  LastError());..#
c430: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
c440: 41 52 44 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ARD..      retur
c450: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  n UTF8ToString(p
c460: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
c470: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
c480: 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 2d 31 29  8ToString(p, -1)
c490: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
c4a0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
c4b0: 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41 66   override TypeAf
c4c0: 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66 66  finity ColumnAff
c4d0: 69 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61 74  inity(SQLiteStat
c4e0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
c4f0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
c500: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
c510: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
c520: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
c530: 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ype(stmt._sqlite
c540: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
c550: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
c560: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
c570: 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70 65  tring ColumnType
c580: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
c590: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
c5a0: 2c 20 72 65 66 20 54 79 70 65 41 66 66 69 6e 69  , ref TypeAffini
c5b0: 74 79 20 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20  ty nAffinity).. 
c5c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
c5d0: 6c 65 6e 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54  len;..#if !SQLIT
c5e0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
c5f0: 20 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20    len = 0;..    
c600: 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73    IntPtr p = Uns
c610: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c620: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
c630: 64 65 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f 70  decltype_interop
c640: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
c650: 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c  mt, index, ref l
c660: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
c670: 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20     len = -1;..  
c680: 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55      IntPtr p = U
c690: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
c6a0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
c6b0: 6e 5f 64 65 63 6c 74 79 70 65 28 73 74 6d 74 2e  n_decltype(stmt.
c6c0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
c6d0: 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  dex);..#endif.. 
c6e0: 20 20 20 20 20 6e 41 66 66 69 6e 69 74 79 20 3d       nAffinity =
c6f0: 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28   ColumnAffinity(
c700: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d  stmt, index);...
c710: 0a 20 20 20 20 20 20 69 66 20 28 70 20 21 3d 20  .      if (p != 
c720: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74  IntPtr.Zero) ret
c730: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
c740: 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20  (p, len);..     
c750: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a   else..      {..
c760: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
c770: 20 61 72 20 3d 20 73 74 6d 74 2e 54 79 70 65 44   ar = stmt.TypeD
c780: 65 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a 20 20 20  efinitions;..   
c790: 20 20 20 20 20 69 66 20 28 61 72 20 21 3d 20 6e       if (ar != n
c7a0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ull)..        {.
c7b0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69  .          if (i
c7c0: 6e 64 65 78 20 3c 20 61 72 2e 4c 65 6e 67 74 68  ndex < ar.Length
c7d0: 20 26 26 20 61 72 5b 69 6e 64 65 78 5d 20 21 3d   && ar[index] !=
c7e0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
c7f0: 20 20 20 20 72 65 74 75 72 6e 20 61 72 5b 69 6e      return ar[in
c800: 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d  dex];..        }
c810: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
c820: 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a   String.Empty;..
c830: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 73 77 69 74  ..        //swit
c840: 63 68 20 28 6e 41 66 66 69 6e 69 74 79 29 0d 0a  ch (nAffinity)..
c850: 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20          //{..   
c860: 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79       //  case Ty
c870: 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
c880: 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  :..        //   
c890: 20 72 65 74 75 72 6e 20 22 42 49 47 49 4e 54 22   return "BIGINT"
c8a0: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63  ;..        //  c
c8b0: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
c8c0: 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20  .Double:..      
c8d0: 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22    //    return "
c8e0: 44 4f 55 42 4c 45 22 3b 0d 0a 20 20 20 20 20 20  DOUBLE";..      
c8f0: 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41    //  case TypeA
c900: 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20  ffinity.Blob:.. 
c910: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74         //    ret
c920: 75 72 6e 20 22 42 4c 4f 42 22 3b 0d 0a 20 20 20  urn "BLOB";..   
c930: 20 20 20 20 20 2f 2f 20 20 64 65 66 61 75 6c 74       //  default
c940: 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  :..        //   
c950: 20 72 65 74 75 72 6e 20 22 54 45 58 54 22 3b 0d   return "TEXT";.
c960: 0a 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 20 20  .        //}..  
c970: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
c980: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
c990: 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e  rride int Column
c9a0: 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61 74  Index(SQLiteStat
c9b0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72 69  ement stmt, stri
c9c0: 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 0d 0a  ng columnName)..
c9d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
c9e0: 20 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74   x = ColumnCount
c9f0: 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (stmt);....     
ca00: 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b   for (int n = 0;
ca10: 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d 0a 20 20   n < x; n++)..  
ca20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
ca30: 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  f (String.Compar
ca40: 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 43 6f  e(columnName, Co
ca50: 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d 74 2c 20 6e  lumnName(stmt, n
ca60: 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  ), StringCompari
ca70: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
ca80: 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20  eCase) == 0)..  
ca90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
caa0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
cab0: 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20    return -1;..  
cac0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
cad0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
cae0: 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e  ing ColumnOrigin
caf0: 61 6c 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61  alName(SQLiteSta
cb00: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
cb10: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
cb20: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
cb30: 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
cb40: 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  len = 0;..      
cb50: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
cb60: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
cb70: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
cb80: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
cb90: 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  me_interop(stmt.
cba0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
cbb0: 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c  dex, ref len), l
cbc0: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
cbd0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
cbe0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
cbf0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
cc00: 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
cc10: 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69  _name(stmt._sqli
cc20: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
cc30: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   -1);..#endif.. 
cc40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
cc50: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
cc60: 72 69 6e 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62  ring ColumnDatab
cc70: 61 73 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  aseName(SQLiteSt
cc80: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
cc90: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
cca0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
ccb0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
ccc0: 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
ccd0: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
cce0: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
ccf0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
cd00: 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
cd10: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74  _name_interop(st
cd20: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
cd30: 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29   index, ref len)
cd40: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
cd50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
cd60: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
cd70: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
cd80: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
cd90: 61 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74 2e  abase_name(stmt.
cda0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
cdb0: 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
cdc0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
cdd0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
cde0: 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
cdf0: 54 61 62 6c 65 4e 61 6d 65 28 53 51 4c 69 74 65  TableName(SQLite
ce00: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
ce10: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
ce20: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
ce30: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
ce40: 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
ce50: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
ce60: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
ce70: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
ce80: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f  e3_column_table_
ce90: 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  name_interop(stm
cea0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
ceb0: 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c  index, ref len),
cec0: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
ced0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
cee0: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
cef0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
cf00: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c  ite3_column_tabl
cf10: 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c  e_name(stmt._sql
cf20: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
cf30: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
cf40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
cf50: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
cf60: 6f 69 64 20 43 6f 6c 75 6d 6e 4d 65 74 61 44 61  oid ColumnMetaDa
cf70: 74 61 28 73 74 72 69 6e 67 20 64 61 74 61 42 61  ta(string dataBa
cf80: 73 65 2c 20 73 74 72 69 6e 67 20 74 61 62 6c 65  se, string table
cf90: 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c  , string column,
cfa0: 20 72 65 66 20 73 74 72 69 6e 67 20 64 61 74 61   ref string data
cfb0: 54 79 70 65 2c 20 72 65 66 20 73 74 72 69 6e 67  Type, ref string
cfc0: 20 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65   collateSequence
cfd0: 2c 20 72 65 66 20 62 6f 6f 6c 20 6e 6f 74 4e 75  , ref bool notNu
cfe0: 6c 6c 2c 20 72 65 66 20 62 6f 6f 6c 20 70 72 69  ll, ref bool pri
cff0: 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 62 6f 6f  maryKey, ref boo
d000: 6c 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29  l autoIncrement)
d010: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49  ..    {..      I
d020: 6e 74 50 74 72 20 64 61 74 61 54 79 70 65 50 74  ntPtr dataTypePt
d030: 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
d040: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 63  ..      IntPtr c
d050: 6f 6c 6c 53 65 71 50 74 72 20 3d 20 49 6e 74 50  ollSeqPtr = IntP
d060: 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
d070: 69 6e 74 20 6e 6e 6f 74 4e 75 6c 6c 20 3d 20 30  int nnotNull = 0
d080: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 70 72  ;..      int npr
d090: 69 6d 61 72 79 4b 65 79 20 3d 20 30 3b 0d 0a 20  imaryKey = 0;.. 
d0a0: 20 20 20 20 20 69 6e 74 20 6e 61 75 74 6f 49 6e       int nautoIn
d0b0: 63 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51  c = 0;..      SQ
d0c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b  LiteErrorCode n;
d0d0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 64 74 4c 65  ..      int dtLe
d0e0: 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 73  n;..      int cs
d0f0: 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  Len;....#if !SQL
d100: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
d110: 20 20 20 20 64 74 4c 65 6e 20 3d 20 30 3b 0d 0a      dtLen = 0;..
d120: 20 20 20 20 20 20 63 73 4c 65 6e 20 3d 20 30 3b        csLen = 0;
d130: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
d140: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
d150: 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f  sqlite3_table_co
d160: 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 5f 69 6e  lumn_metadata_in
d170: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
d180: 46 38 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f  F8(dataBase), To
d190: 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55  UTF8(table), ToU
d1a0: 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66  TF8(column), ref
d1b0: 20 64 61 74 61 54 79 70 65 50 74 72 2c 20 72 65   dataTypePtr, re
d1c0: 66 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 72 65  f collSeqPtr, re
d1d0: 66 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20  f nnotNull, ref 
d1e0: 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 72 65 66  nprimaryKey, ref
d1f0: 20 6e 61 75 74 6f 49 6e 63 2c 20 72 65 66 20 64   nautoInc, ref d
d200: 74 4c 65 6e 2c 20 72 65 66 20 63 73 4c 65 6e 29  tLen, ref csLen)
d210: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
d220: 64 74 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20  dtLen = -1;..   
d230: 20 20 20 63 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a     csLen = -1;..
d240: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
d250: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
d260: 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f  sqlite3_table_co
d270: 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 5f 73  lumn_metadata(_s
d280: 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42  ql, ToUTF8(dataB
d290: 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62  ase), ToUTF8(tab
d2a0: 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75  le), ToUTF8(colu
d2b0: 6d 6e 29 2c 20 72 65 66 20 64 61 74 61 54 79 70  mn), ref dataTyp
d2c0: 65 50 74 72 2c 20 72 65 66 20 63 6f 6c 6c 53 65  ePtr, ref collSe
d2d0: 71 50 74 72 2c 20 72 65 66 20 6e 6e 6f 74 4e 75  qPtr, ref nnotNu
d2e0: 6c 6c 2c 20 72 65 66 20 6e 70 72 69 6d 61 72 79  ll, ref nprimary
d2f0: 4b 65 79 2c 20 72 65 66 20 6e 61 75 74 6f 49 6e  Key, ref nautoIn
d300: 63 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  c);..#endif..   
d310: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
d320: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
d330: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
d340: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
d350: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
d360: 0a 20 20 20 20 20 20 64 61 74 61 54 79 70 65 20  .      dataType 
d370: 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 64  = UTF8ToString(d
d380: 61 74 61 54 79 70 65 50 74 72 2c 20 64 74 4c 65  ataTypePtr, dtLe
d390: 6e 29 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61  n);..      colla
d3a0: 74 65 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46  teSequence = UTF
d3b0: 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 53 65  8ToString(collSe
d3c0: 71 50 74 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d  qPtr, csLen);...
d3d0: 0a 20 20 20 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d  .      notNull =
d3e0: 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29   (nnotNull == 1)
d3f0: 3b 0d 0a 20 20 20 20 20 20 70 72 69 6d 61 72 79  ;..      primary
d400: 4b 65 79 20 3d 20 28 6e 70 72 69 6d 61 72 79 4b  Key = (nprimaryK
d410: 65 79 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20  ey == 1);..     
d420: 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20 3d   autoIncrement =
d430: 20 28 6e 61 75 74 6f 49 6e 63 20 3d 3d 20 31 29   (nautoInc == 1)
d440: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
d450: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
d460: 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62  e double GetDoub
d470: 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  le(SQLiteStateme
d480: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
d490: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
d4a0: 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d    double value;.
d4b0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
d4c0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
d4d0: 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55  .      value = U
d4e0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
d4f0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
d500: 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73  n_double(stmt._s
d510: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
d520: 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  x);..#elif !SQLI
d530: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
d540: 20 20 20 76 61 6c 75 65 20 3d 20 30 2e 30 3b 0d     value = 0.0;.
d550: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
d560: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d570: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  e3_column_double
d580: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
d590: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
d5a0: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
d5b0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
d5c0: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
d5d0: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
d5e0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
d5f0: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
d600: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d610: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
d620: 62 79 74 65 20 47 65 74 53 42 79 74 65 28 53 51  byte GetSByte(SQ
d630: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
d640: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
d650: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
d660: 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 73  urn unchecked((s
d670: 62 79 74 65 29 28 47 65 74 49 6e 74 33 32 28 73  byte)(GetInt32(s
d680: 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 62 79  tmt, index) & by
d690: 74 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a  te.MaxValue));..
d6a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d6b0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
d6c0: 79 74 65 20 47 65 74 42 79 74 65 28 53 51 4c 69  yte GetByte(SQLi
d6d0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
d6e0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
d6f0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
d700: 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 62 79 74  n unchecked((byt
d710: 65 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74  e)(GetInt32(stmt
d720: 2c 20 69 6e 64 65 78 29 20 26 20 62 79 74 65 2e  , index) & byte.
d730: 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20  MaxValue));..   
d740: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
d750: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 68 6f 72  al override shor
d760: 74 20 47 65 74 49 6e 74 31 36 28 53 51 4c 69 74  t GetInt16(SQLit
d770: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
d780: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
d790: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
d7a0: 20 75 6e 63 68 65 63 6b 65 64 28 28 73 68 6f 72   unchecked((shor
d7b0: 74 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74  t)(GetInt32(stmt
d7c0: 2c 20 69 6e 64 65 78 29 20 26 20 75 73 68 6f 72  , index) & ushor
d7d0: 74 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20  t.MaxValue));.. 
d7e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d7f0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75 73  rnal override us
d800: 68 6f 72 74 20 47 65 74 55 49 6e 74 31 36 28 53  hort GetUInt16(S
d810: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
d820: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
d830: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
d840: 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28  turn unchecked((
d850: 75 73 68 6f 72 74 29 28 47 65 74 49 6e 74 33 32  ushort)(GetInt32
d860: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20  (stmt, index) & 
d870: 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29  ushort.MaxValue)
d880: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
d890: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
d8a0: 64 65 20 69 6e 74 20 47 65 74 49 6e 74 33 32 28  de int GetInt32(
d8b0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
d8c0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
d8d0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
d8e0: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
d8f0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d900: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d  3_column_int(stm
d910: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
d920: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a  index);..    }..
d930: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
d940: 76 65 72 72 69 64 65 20 75 69 6e 74 20 47 65 74  verride uint Get
d950: 55 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61  UInt32(SQLiteSta
d960: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
d970: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
d980: 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63        return unc
d990: 68 65 63 6b 65 64 28 28 75 69 6e 74 29 47 65 74  hecked((uint)Get
d9a0: 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
d9b0: 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  x));..    }.... 
d9c0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
d9d0: 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 49 6e 74  ride long GetInt
d9e0: 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
d9f0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
da00: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
da10: 20 20 6c 6f 6e 67 20 76 61 6c 75 65 3b 0d 0a 23    long value;..#
da20: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
da30: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
da40: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73       value = Uns
da50: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
da60: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
da70: 69 6e 74 36 34 28 73 74 6d 74 2e 5f 73 71 6c 69  int64(stmt._sqli
da80: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
da90: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
daa0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
dab0: 76 61 6c 75 65 20 3d 20 30 3b 0d 0a 20 20 20 20  value = 0;..    
dac0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
dad0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
dae0: 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74 65 72  lumn_int64_inter
daf0: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
db00: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66  stmt, index, ref
db10: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
db20: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
db30: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
db40: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
db50: 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72  dif..      retur
db60: 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d  n value;..    }.
db70: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
db80: 6f 76 65 72 72 69 64 65 20 75 6c 6f 6e 67 20 47  override ulong G
db90: 65 74 55 49 6e 74 36 34 28 53 51 4c 69 74 65 53  etUInt64(SQLiteS
dba0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
dbb0: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
dbc0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75  ..      return u
dbd0: 6e 63 68 65 63 6b 65 64 28 28 75 6c 6f 6e 67 29  nchecked((ulong)
dbe0: 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
dbf0: 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ndex));..    }..
dc00: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
dc10: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
dc20: 65 74 54 65 78 74 28 53 51 4c 69 74 65 53 74 61  etText(SQLiteSta
dc30: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
dc40: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
dc50: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
dc60: 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
dc70: 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  len = 0;..      
dc80: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
dc90: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
dca0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
dcb0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65  column_text_inte
dcc0: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
dcd0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65  _stmt, index, re
dce0: 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  f len), len);..#
dcf0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
dd00: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
dd10: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
dd20: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
dd30: 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71  mn_text(stmt._sq
dd40: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
dd50: 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61  ),..        Unsa
dd60: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
dd70: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
dd80: 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74  ytes(stmt._sqlit
dd90: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b  e_stmt, index));
dda0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
ddb0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
ddc0: 6f 76 65 72 72 69 64 65 20 44 61 74 65 54 69 6d  override DateTim
ddd0: 65 20 47 65 74 44 61 74 65 54 69 6d 65 28 53 51  e GetDateTime(SQ
dde0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
ddf0: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
de00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20      {..      if 
de10: 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74  (_datetimeFormat
de20: 20 3d 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f   == SQLiteDateFo
de30: 72 6d 61 74 73 2e 54 69 63 6b 73 29 0d 0a 20 20  rmats.Ticks)..  
de40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44        return ToD
de50: 61 74 65 54 69 6d 65 28 47 65 74 49 6e 74 36 34  ateTime(GetInt64
de60: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f  (stmt, index), _
de70: 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a  datetimeKind);..
de80: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f        else if (_
de90: 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d  datetimeFormat =
dea0: 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  = SQLiteDateForm
deb0: 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79 29 0d 0a  ats.JulianDay)..
dec0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54          return T
ded0: 6f 44 61 74 65 54 69 6d 65 28 47 65 74 44 6f 75  oDateTime(GetDou
dee0: 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ble(stmt, index)
def0: 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29  , _datetimeKind)
df00: 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66  ;..      else if
df10: 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61   (_datetimeForma
df20: 74 20 3d 3d 20 53 51 4c 69 74 65 44 61 74 65 46  t == SQLiteDateF
df30: 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68  ormats.UnixEpoch
df40: 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  )..        retur
df50: 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74  n ToDateTime(Get
df60: 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
df70: 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e  x), _datetimeKin
df80: 64 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49  d);....#if !SQLI
df90: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
dfa0: 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d     int len = 0;.
dfb0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f  .      return To
dfc0: 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e  DateTime(UnsafeN
dfd0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
dfe0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
dff0: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
e000: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
e010: 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e  x, ref len), len
e020: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
e030: 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69   return ToDateTi
e040: 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  me(UnsafeNativeM
e050: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
e060: 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e  olumn_text(stmt.
e070: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
e080: 64 65 78 29 2c 0d 0a 20 20 20 20 20 20 20 20 55  dex),..        U
e090: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
e0a0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
e0b0: 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71  n_bytes(stmt._sq
e0c0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
e0d0: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
e0e0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
e0f0: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
e100: 20 47 65 74 42 79 74 65 73 28 53 51 4c 69 74 65   GetBytes(SQLite
e110: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
e120: 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e  int index, int n
e130: 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65  DataOffset, byte
e140: 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53  [] bDest, int nS
e150: 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74  tart, int nLengt
e160: 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  h)..    {..     
e170: 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61   int nlen = Unsa
e180: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e190: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
e1a0: 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74  ytes(stmt._sqlit
e1b0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
e1c0: 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e  ...      // If n
e1d0: 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75  o destination bu
e1e0: 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65  ffer, return the
e1f0: 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20   size needed... 
e200: 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d       if (bDest =
e210: 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e  = null) return n
e220: 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e  len;....      in
e230: 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e  t nCopied = nLen
e240: 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  gth;....      if
e250: 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61   (nCopied + nSta
e260: 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74  rt > bDest.Lengt
e270: 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65  h) nCopied = bDe
e280: 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61  st.Length - nSta
e290: 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  rt;..      if (n
e2a0: 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66  Copied + nDataOf
e2b0: 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f  fset > nlen) nCo
e2c0: 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44  pied = nlen - nD
e2d0: 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20  ataOffset;....  
e2e0: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
e2f0: 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  > 0)..      {.. 
e300: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74         IntPtr pt
e310: 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  r = UnsafeNative
e320: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
e330: 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74 6d 74  column_blob(stmt
e340: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
e350: 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
e360: 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28    Marshal.Copy((
e370: 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e  IntPtr)(ptr.ToIn
e380: 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66  t64() + nDataOff
e390: 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74  set), bDest, nSt
e3a0: 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a  art, nCopied);..
e3b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65        }..      e
e3c0: 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  lse..      {..  
e3d0: 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20        nCopied = 
e3e0: 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  0;..      }.... 
e3f0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70       return nCop
e400: 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ied;..    }.... 
e410: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
e420: 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 43 68 61  ride long GetCha
e430: 72 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  rs(SQLiteStateme
e440: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
e450: 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66  ex, int nDataOff
e460: 73 65 74 2c 20 63 68 61 72 5b 5d 20 62 44 65 73  set, char[] bDes
e470: 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69  t, int nStart, i
e480: 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20  nt nLength)..   
e490: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c   {..      int nl
e4a0: 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  en;..      int n
e4b0: 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68  Copied = nLength
e4c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 74 72 69 6e  ;....      strin
e4d0: 67 20 73 74 72 20 3d 20 47 65 74 54 65 78 74 28  g str = GetText(
e4e0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
e4f0: 20 20 20 20 20 6e 6c 65 6e 20 3d 20 73 74 72 2e       nlen = str.
e500: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
e510: 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75   if (bDest == nu
e520: 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b  ll) return nlen;
e530: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
e540: 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e  opied + nStart >
e550: 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e   bDest.Length) n
e560: 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c  Copied = bDest.L
e570: 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d  ength - nStart;.
e580: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
e590: 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74  ed + nDataOffset
e5a0: 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64   > nlen) nCopied
e5b0: 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f   = nlen - nDataO
e5c0: 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ffset;....      
e5d0: 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29  if (nCopied > 0)
e5e0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 2e 43 6f  ..        str.Co
e5f0: 70 79 54 6f 28 6e 44 61 74 61 4f 66 66 73 65 74  pyTo(nDataOffset
e600: 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c  , bDest, nStart,
e610: 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20   nCopied);..    
e620: 20 20 65 6c 73 65 20 6e 43 6f 70 69 65 64 20 3d    else nCopied =
e630: 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74   0;....      ret
e640: 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20  urn nCopied;..  
e650: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
e660: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
e670: 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65 53  l IsNull(SQLiteS
e680: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
e690: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
e6a0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28  ..      return (
e6b0: 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73  ColumnAffinity(s
e6c0: 74 6d 74 2c 20 69 6e 64 65 78 29 20 3d 3d 20 54  tmt, index) == T
e6d0: 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c  ypeAffinity.Null
e6e0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
e6f0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
e700: 64 65 20 69 6e 74 20 41 67 67 72 65 67 61 74 65  de int Aggregate
e710: 43 6f 75 6e 74 28 49 6e 74 50 74 72 20 63 6f 6e  Count(IntPtr con
e720: 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  text)..    {..  
e730: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
e740: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
e750: 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65  qlite3_aggregate
e760: 5f 63 6f 75 6e 74 28 63 6f 6e 74 65 78 74 29 3b  _count(context);
e770: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
e780: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
e790: 20 76 6f 69 64 20 43 72 65 61 74 65 46 75 6e 63   void CreateFunc
e7a0: 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 46  tion(string strF
e7b0: 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e 41 72  unction, int nAr
e7c0: 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c  gs, bool needCol
e7d0: 6c 53 65 71 2c 20 53 51 4c 69 74 65 43 61 6c 6c  lSeq, SQLiteCall
e7e0: 62 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c 69 74  back func, SQLit
e7f0: 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 73 74  eCallback funcst
e800: 65 70 2c 20 53 51 4c 69 74 65 46 69 6e 61 6c 43  ep, SQLiteFinalC
e810: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e 61  allback funcfina
e820: 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  l)..    {..     
e830: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
e840: 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49   n;....#if !SQLI
e850: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
e860: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
e870: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
e880: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
e890: 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c  on_interop(_sql,
e8a0: 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74   ToUTF8(strFunct
e8b0: 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20  ion), nArgs, 4, 
e8c0: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
e8d0: 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e  c, funcstep, fun
e8e0: 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c  cfinal, (needCol
e8f0: 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20  lSeq == true) ? 
e900: 31 20 3a 20 30 29 3b 0d 0a 20 20 20 20 20 20 69  1 : 0);..      i
e910: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
e920: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20  rorCode.Ok) n = 
e930: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
e940: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
e950: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65  te_function_inte
e960: 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  rop(_sql, ToUTF8
e970: 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e  (strFunction), n
e980: 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e  Args, 1, IntPtr.
e990: 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63  Zero, func, func
e9a0: 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c  step, funcfinal,
e9b0: 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d   (needCollSeq ==
e9c0: 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b   true) ? 1 : 0);
e9d0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e  ..#else..      n
e9e0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
e9f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
ea00: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f  reate_function(_
ea10: 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46  sql, ToUTF8(strF
ea20: 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c  unction), nArgs,
ea30: 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   4, IntPtr.Zero,
ea40: 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c   func, funcstep,
ea50: 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20 20   funcfinal);..  
ea60: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
ea70: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
ea80: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
ea90: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
eaa0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
eab0: 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
eac0: 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67  rFunction), nArg
ead0: 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72  s, 1, IntPtr.Zer
eae0: 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65  o, func, funcste
eaf0: 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a  p, funcfinal);..
eb00: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66  #endif..      if
eb10: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
eb20: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
eb30: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
eb40: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
eb50: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
eb60: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
eb70: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 72  override void Cr
eb80: 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74  eateCollation(st
eb90: 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f  ring strCollatio
eba0: 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69  n, SQLiteCollati
ebb0: 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43  on func, SQLiteC
ebc0: 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36 29  ollation func16)
ebd0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
ebe0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
ebf0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
ec00: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
ec10: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
ec20: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
ec30: 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c 20 49  Collation), 2, I
ec40: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
ec50: 31 36 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  16);..      if (
ec60: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
ec70: 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73  Code.Ok) n = Uns
ec80: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
ec90: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
eca0: 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20  collation(_sql, 
ecb0: 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74  ToUTF8(strCollat
ecc0: 69 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74 72 2e  ion), 1, IntPtr.
ecd0: 5a 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20 20  Zero, func);..  
ece0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
ecf0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
ed00: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
ed10: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
ed20: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
ed30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
ed40: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
ed50: 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74  nt ContextCollat
ed60: 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69  eCompare(Collati
ed70: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65  onEncodingEnum e
ed80: 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65  nc, IntPtr conte
ed90: 78 74 2c 20 73 74 72 69 6e 67 20 73 31 2c 20 73  xt, string s1, s
eda0: 74 72 69 6e 67 20 73 32 29 0d 0a 20 20 20 20 7b  tring s2)..    {
edb0: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
edc0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79  ANDARD..      by
edd0: 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20  te[] b1;..      
ede0: 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20  byte[] b2;..    
edf0: 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e    System.Text.En
ee00: 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72  coding converter
ee10: 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
ee20: 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a    switch (enc)..
ee30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ee40: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
ee50: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38  ncodingEnum.UTF8
ee60: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
ee70: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
ee80: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54  Text.Encoding.UT
ee90: 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  F8;..          b
eea0: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
eeb0: 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
eec0: 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c  odingEnum.UTF16L
eed0: 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
eee0: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
eef0: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
ef00: 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20  nicode;..       
ef10: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
ef20: 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
ef30: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
ef40: 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16BE:..        
ef50: 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
ef60: 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
ef70: 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63  ng.BigEndianUnic
ef80: 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ode;..          
ef90: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d  break;..      }.
efa0: 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f  ...      b1 = co
efb0: 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
efc0: 28 73 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20  (s1);..      b2 
efd0: 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
efe0: 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20 20  ytes(s2);....   
eff0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
f000: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f010: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f  lite3_context_co
f020: 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f  llcompare_intero
f030: 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62  p(context, b1, b
f040: 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32  1.Length, b2, b2
f050: 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65  .Length);..#else
f060: 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
f070: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
f080: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
f090: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
f0a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
f0b0: 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74  ride int Context
f0c0: 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43  CollateCompare(C
f0d0: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
f0e0: 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72  Enum enc, IntPtr
f0f0: 20 63 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b 5d   context, char[]
f100: 20 63 31 2c 20 63 68 61 72 5b 5d 20 63 32 29 0d   c1, char[] c2).
f110: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
f120: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
f130: 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a      byte[] b1;..
f140: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b        byte[] b2;
f150: 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54  ..      System.T
f160: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e  ext.Encoding con
f170: 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a  verter = null;..
f180: 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28  ..      switch (
f190: 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  enc)..      {.. 
f1a0: 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
f1b0: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
f1c0: 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20  m.UTF8:..       
f1d0: 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
f1e0: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
f1f0: 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20  ing.UTF8;..     
f200: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
f210: 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
f220: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
f230: 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20  UTF16LE:..      
f240: 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
f250: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
f260: 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20  ding.Unicode;.. 
f270: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
f280: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
f290: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
f2a0: 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20  num.UTF16BE:..  
f2b0: 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
f2c0: 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
f2d0: 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69  Encoding.BigEndi
f2e0: 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20  anUnicode;..    
f2f0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
f300: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62      }....      b
f310: 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65  1 = converter.Ge
f320: 74 42 79 74 65 73 28 63 31 29 3b 0d 0a 20 20 20  tBytes(c1);..   
f330: 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65     b2 = converte
f340: 72 2e 47 65 74 42 79 74 65 73 28 63 32 29 3b 0d  r.GetBytes(c2);.
f350: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
f360: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f370: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ods.sqlite3_cont
f380: 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f  ext_collcompare_
f390: 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c  interop(context,
f3a0: 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20   b1, b1.Length, 
f3b0: 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d  b2, b2.Length);.
f3c0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
f3d0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
f3e0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
f3f0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
f400: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
f410: 6c 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c 61  l override Colla
f420: 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 47 65 74  tionSequence Get
f430: 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  CollationSequenc
f440: 65 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  e(SQLiteFunction
f450: 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f   func, IntPtr co
f460: 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 23  ntext)..    {..#
f470: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
f480: 41 52 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c 61  ARD..      Colla
f490: 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 73 65 71  tionSequence seq
f4a0: 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f 6e   = new Collation
f4b0: 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20 20  Sequence();..   
f4c0: 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d     int len = 0;.
f4d0: 0a 20 20 20 20 20 20 69 6e 74 20 74 79 70 65 20  .      int type 
f4e0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  = 0;..      int 
f4f0: 65 6e 63 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  enc = 0;..      
f500: 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66  IntPtr p = Unsaf
f510: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
f520: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63  qlite3_context_c
f530: 6f 6c 6c 73 65 71 5f 69 6e 74 65 72 6f 70 28 63  ollseq_interop(c
f540: 6f 6e 74 65 78 74 2c 20 72 65 66 20 74 79 70 65  ontext, ref type
f550: 2c 20 72 65 66 20 65 6e 63 2c 20 72 65 66 20 6c  , ref enc, ref l
f560: 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  en);....      if
f570: 20 28 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71   (p != null) seq
f580: 2e 4e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74  .Name = UTF8ToSt
f590: 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20  ring(p, len);.. 
f5a0: 20 20 20 20 20 73 65 71 2e 54 79 70 65 20 3d 20       seq.Type = 
f5b0: 28 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e  (CollationTypeEn
f5c0: 75 6d 29 74 79 70 65 3b 0d 0a 20 20 20 20 20 20  um)type;..      
f5d0: 73 65 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63  seq._func = func
f5e0: 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 45 6e 63  ;..      seq.Enc
f5f0: 6f 64 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69  oding = (Collati
f600: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65  onEncodingEnum)e
f610: 6e 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  nc;....      ret
f620: 75 72 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d  urn seq;..#else.
f630: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
f640: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
f650: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
f660: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
f670: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
f680: 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61  ide long GetPara
f690: 6d 56 61 6c 75 65 42 79 74 65 73 28 49 6e 74 50  mValueBytes(IntP
f6a0: 74 72 20 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f  tr p, int nDataO
f6b0: 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44  ffset, byte[] bD
f6c0: 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c  est, int nStart,
f6d0: 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20   int nLength).. 
f6e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
f6f0: 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nlen = UnsafeNat
f700: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
f710: 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70  e3_value_bytes(p
f720: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49  );....      // I
f730: 66 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e  f no destination
f740: 20 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20   buffer, return 
f750: 74 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e  the size needed.
f760: 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73  ..      if (bDes
f770: 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
f780: 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20  n nlen;....     
f790: 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e   int nCopied = n
f7a0: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
f7b0: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
f7c0: 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65  Start > bDest.Le
f7d0: 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20  ngth) nCopied = 
f7e0: 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e  bDest.Length - n
f7f0: 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66  Start;..      if
f800: 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74   (nCopied + nDat
f810: 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20  aOffset > nlen) 
f820: 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d  nCopied = nlen -
f830: 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d   nDataOffset;...
f840: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
f850: 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b  ed > 0)..      {
f860: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
f870: 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74   ptr = UnsafeNat
f880: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
f890: 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 70 29  e3_value_blob(p)
f8a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72  ;....        Mar
f8b0: 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74  shal.Copy((IntPt
f8c0: 72 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29  r)(ptr.ToInt64()
f8d0: 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c   + nDataOffset),
f8e0: 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20   bDest, nStart, 
f8f0: 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20  nCopied);..     
f900: 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a   }..      else..
f910: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f920: 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20   nCopied = 0;.. 
f930: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f940: 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d  return nCopied;.
f950: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
f960: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
f970: 64 6f 75 62 6c 65 20 47 65 74 50 61 72 61 6d 56  double GetParamV
f980: 61 6c 75 65 44 6f 75 62 6c 65 28 49 6e 74 50 74  alueDouble(IntPt
f990: 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20  r ptr)..    {.. 
f9a0: 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75       double valu
f9b0: 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  e;..#if !PLATFOR
f9c0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
f9d0: 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20  RK..      value 
f9e0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
f9f0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
fa00: 6c 75 65 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b  lue_double(ptr);
fa10: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
fa20: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
fa30: 76 61 6c 75 65 20 3d 20 30 2e 30 3b 0d 0a 20 20  value = 0.0;..  
fa40: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
fa50: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
fa60: 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74  value_double_int
fa70: 65 72 6f 70 28 70 74 72 2c 20 72 65 66 20 76 61  erop(ptr, ref va
fa80: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
fa90: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
faa0: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
fab0: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
fac0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
fad0: 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alue;..    }....
fae0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
faf0: 72 72 69 64 65 20 69 6e 74 20 47 65 74 50 61 72  rride int GetPar
fb00: 61 6d 56 61 6c 75 65 49 6e 74 33 32 28 49 6e 74  amValueInt32(Int
fb10: 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
fb20: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
fb30: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
fb40: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
fb50: 69 6e 74 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d  int(ptr);..    }
fb60: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
fb70: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
fb80: 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 36  etParamValueInt6
fb90: 34 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  4(IntPtr ptr).. 
fba0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 36     {..      Int6
fbb0: 34 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50  4 value;..#if !P
fbc0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
fbd0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
fbe0: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
fbf0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
fc00: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28  te3_value_int64(
fc10: 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  ptr);..#elif !SQ
fc20: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
fc30: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 30 3b 0d       value = 0;.
fc40: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
fc50: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
fc60: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69  e3_value_int64_i
fc70: 6e 74 65 72 6f 70 28 70 74 72 2c 20 72 65 66 20  nterop(ptr, ref 
fc80: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
fc90: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
fca0: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
fcb0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
fcc0: 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  if..      return
fcd0: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a   value;..    }..
fce0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
fcf0: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
fd00: 65 74 50 61 72 61 6d 56 61 6c 75 65 54 65 78 74  etParamValueText
fd10: 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
fd20: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
fd30: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
fd40: 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
fd50: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
fd60: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
fd70: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
fd80: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 5f  ite3_value_text_
fd90: 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 72 65 66  interop(ptr, ref
fda0: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
fdb0: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
fdc0: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
fdd0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
fde0: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
fdf0: 5f 74 65 78 74 28 70 74 72 29 2c 0d 0a 20 20 20  _text(ptr),..   
fe00: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
fe10: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
fe20: 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 74 72  _value_bytes(ptr
fe30: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
fe40: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
fe50: 61 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70 65  al override Type
fe60: 41 66 66 69 6e 69 74 79 20 47 65 74 50 61 72 61  Affinity GetPara
fe70: 6d 56 61 6c 75 65 54 79 70 65 28 49 6e 74 50 74  mValueType(IntPt
fe80: 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20  r ptr)..    {.. 
fe90: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
fea0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
feb0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
fec0: 70 65 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d  pe(ptr);..    }.
fed0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
fee0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
fef0: 74 75 72 6e 42 6c 6f 62 28 49 6e 74 50 74 72 20  turnBlob(IntPtr 
ff00: 63 6f 6e 74 65 78 74 2c 20 62 79 74 65 5b 5d 20  context, byte[] 
ff10: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
ff20: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
ff30: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ff40: 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e  _result_blob(con
ff50: 74 65 78 74 2c 20 76 61 6c 75 65 2c 20 76 61 6c  text, value, val
ff60: 75 65 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50  ue.Length, (IntP
ff70: 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d  tr)(-1));..    }
ff80: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
ff90: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
ffa0: 65 74 75 72 6e 44 6f 75 62 6c 65 28 49 6e 74 50  eturnDouble(IntP
ffb0: 74 72 20 63 6f 6e 74 65 78 74 2c 20 64 6f 75 62  tr context, doub
ffc0: 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  le value)..    {
ffd0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
ffe0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
fff0: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
10000 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10010 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c  te3_result_doubl
10020 65 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  e(context, value
10030 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
10040 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
10050 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
10060 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
10070 73 75 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  sult_double_inte
10080 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66  rop(context, ref
10090 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
100a0 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
100b0 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
100c0 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
100d0 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
100e0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
100f0 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 45  ide void ReturnE
10100 72 72 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e 74  rror(IntPtr cont
10110 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  ext, string valu
10120 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
10130 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
10140 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
10150 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78  ult_error(contex
10160 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29  t, ToUTF8(value)
10170 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 29 3b  , value.Length);
10180 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
10190 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
101a0 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 33   void ReturnInt3
101b0 32 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  2(IntPtr context
101c0 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20  , int value)..  
101d0 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
101e0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
101f0 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
10200 74 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  t(context, value
10210 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
10220 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
10230 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e  de void ReturnIn
10240 74 36 34 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  t64(IntPtr conte
10250 78 74 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d  xt, long value).
10260 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41  .    {..#if !PLA
10270 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
10280 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e  MEWORK..      Un
10290 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
102a0 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
102b0 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20  _int64(context, 
102c0 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
102d0 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
102e0 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
102f0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10300 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f  e3_result_int64_
10310 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c  interop(context,
10320 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
10330 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
10340 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
10350 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
10360 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
10370 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10380 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
10390 75 72 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63  urnNull(IntPtr c
103a0 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
103b0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
103c0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
103d0 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f  3_result_null(co
103e0 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ntext);..    }..
103f0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10400 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
10410 75 72 6e 54 65 78 74 28 49 6e 74 50 74 72 20 63  urnText(IntPtr c
10420 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76  ontext, string v
10430 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
10440 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54      byte[] b = T
10450 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 20  oUTF8(value);.. 
10460 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
10470 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10480 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e  _result_text(con
10490 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c  text, ToUTF8(val
104a0 75 65 29 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  ue), b.Length - 
104b0 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  1, (IntPtr)(-1))
104c0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20  ;..    }....#if 
104d0 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
104e0 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c  TABLE..    /// <
104f0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
10500 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69  / Calls the nati
10510 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  ve SQLite core l
10520 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20  ibrary in order 
10530 74 6f 20 63 72 65 61 74 65 20 61 20 64 69 73 70  to create a disp
10540 6f 73 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20  osable..    /// 
10550 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  module containin
10560 67 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  g the implementa
10570 74 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75 61  tion of a virtua
10580 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f  l table...    //
10590 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
105a0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
105b0 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20  e="module">..   
105c0 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20   /// The module 
105d0 6f 62 6a 65 63 74 20 74 6f 20 62 65 20 75 73 65  object to be use
105e0 64 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20  d when creating 
105f0 74 68 65 20 6e 61 74 69 76 65 20 64 69 73 70 6f  the native dispo
10600 73 61 62 6c 65 20 6d 6f 64 75 6c 65 2e 0d 0a 20  sable module... 
10610 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
10620 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
10630 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20  name="flags">.. 
10640 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73     /// The flags
10650 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61   for the associa
10660 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ted <see cref="S
10670 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22  QLiteConnection"
10680 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
10690 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  nce...    /// </
106a0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
106b0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
106c0 69 64 20 43 72 65 61 74 65 4d 6f 64 75 6c 65 28  id CreateModule(
106d0 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64  SQLiteModule mod
106e0 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ule, SQLiteConne
106f0 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
10700 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
10710 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
10720 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
10730 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
10740 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
10750 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d  on("module");...
10760 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
10770 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
10780 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f  ectionFlags.NoLo
10790 67 4d 6f 64 75 6c 65 29 20 21 3d 20 53 51 4c 69  gModule) != SQLi
107a0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
107b0 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 29 0d 0a  s.NoLogModule)..
107c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
107d0 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f         module.Lo
107e0 67 45 72 72 6f 72 73 20 3d 20 28 28 66 6c 61 67  gErrors = ((flag
107f0 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
10800 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64  tionFlags.LogMod
10810 75 6c 65 45 72 72 6f 72 29 20 3d 3d 20 53 51 4c  uleError) == SQL
10820 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
10830 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 72 72 6f  gs.LogModuleErro
10840 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
10850 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 78 63 65 70   module.LogExcep
10860 74 69 6f 6e 73 20 3d 20 28 28 66 6c 61 67 73 20  tions = ((flags 
10870 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
10880 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c  onFlags.LogModul
10890 65 45 78 63 65 70 74 69 6f 6e 29 20 3d 3d 20 53  eException) == S
108a0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
108b0 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78  lags.LogModuleEx
108c0 63 65 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20  ception);..     
108d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
108e0 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  if (_sql == null
108f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
10900 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
10910 78 63 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65 63  xception("connec
10920 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61  tion has an inva
10930 6c 69 64 20 68 61 6e 64 6c 65 22 29 3b 0d 0a 0d  lid handle");...
10940 0a 20 20 20 20 20 20 20 20 53 65 74 4c 6f 61 64  .        SetLoad
10950 45 78 74 65 6e 73 69 6f 6e 28 74 72 75 65 29 3b  Extension(true);
10960 0d 0a 20 20 20 20 20 20 20 20 4c 6f 61 64 45 78  ..        LoadEx
10970 74 65 6e 73 69 6f 6e 28 55 6e 73 61 66 65 4e 61  tension(UnsafeNa
10980 74 69 76 65 4d 65 74 68 6f 64 73 2e 53 51 4c 49  tiveMethods.SQLI
10990 54 45 5f 44 4c 4c 2c 20 22 73 71 6c 69 74 65 33  TE_DLL, "sqlite3
109a0 5f 76 74 73 68 69 6d 5f 69 6e 69 74 22 29 3b 0d  _vtshim_init");.
109b0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d  ...        if (m
109c0 6f 64 75 6c 65 2e 43 72 65 61 74 65 44 69 73 70  odule.CreateDisp
109d0 6f 73 61 62 6c 65 4d 6f 64 75 6c 65 28 5f 73 71  osableModule(_sq
109e0 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  l))..        {..
109f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10a00 5f 6d 6f 64 75 6c 65 73 20 3d 3d 20 6e 75 6c 6c  _modules == null
10a10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10a20 20 20 20 5f 6d 6f 64 75 6c 65 73 20 3d 20 6e 65     _modules = ne
10a30 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72  w Dictionary<str
10a40 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c  ing, SQLiteModul
10a50 65 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e>();....       
10a60 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73 2e 41 64       _modules.Ad
10a70 64 28 6d 6f 64 75 6c 65 2e 4e 61 6d 65 2c 20 6d  d(module.Name, m
10a80 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  odule);....     
10a90 20 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50         if (_useP
10aa0 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ool)..          
10ab0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10ac0 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20       _usePool = 
10ad0 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e  false;....#if !N
10ae0 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
10af0 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
10b00 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N..             
10b10 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
10b20 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ne(String.Format
10b30 28 22 43 72 65 61 74 65 4d 6f 64 75 6c 65 20 28  ("CreateModule (
10b40 50 6f 6f 6c 29 20 44 69 73 61 62 6c 65 64 3a 20  Pool) Disabled: 
10b50 7b 30 7d 22 2c 20 5f 73 71 6c 29 29 3b 0d 0a 23  {0}", _sql));..#
10b60 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
10b70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
10b80 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  .        else.. 
10b90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10ba0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
10bb0 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
10bc0 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
10bd0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
10be0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
10bf0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
10c00 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76   Calls the nativ
10c10 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
10c20 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74  brary in order t
10c30 6f 20 63 6c 65 61 6e 75 70 20 74 68 65 20 72 65  o cleanup the re
10c40 73 6f 75 72 63 65 73 0d 0a 20 20 20 20 2f 2f 2f  sources..    ///
10c50 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
10c60 20 61 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69   a module contai
10c70 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65  ning the impleme
10c80 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72  ntation of a vir
10c90 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
10ca0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10cb0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
10cc0 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
10cd0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75      /// The modu
10ce0 6c 65 20 6f 62 6a 65 63 74 20 70 72 65 76 69 6f  le object previo
10cf0 75 73 6c 79 20 70 61 73 73 65 64 20 74 6f 20 74  usly passed to t
10d00 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43 72  he <see cref="Cr
10d10 65 61 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a  eateModule" />..
10d20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d      /// method..
10d30 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
10d40 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
10d50 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d  m name="flags">.
10d60 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61  .    /// The fla
10d70 67 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63  gs for the assoc
10d80 69 61 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d  iated <see cref=
10d90 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  "SQLiteConnectio
10da0 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  n" /> object ins
10db0 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  tance...    /// 
10dc0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
10dd0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10de0 76 6f 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75  void DisposeModu
10df0 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20  le(SQLiteModule 
10e00 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f  module, SQLiteCo
10e10 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
10e20 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ags)..    {..   
10e30 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
10e40 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
10e50 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
10e60 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
10e70 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b  ption("module");
10e80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6d 6f 64 75  ....        modu
10e90 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20  le.Dispose();.. 
10ea0 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
10eb0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10ec0 72 72 69 64 65 20 49 6e 74 50 74 72 20 41 67 67  rride IntPtr Agg
10ed0 72 65 67 61 74 65 43 6f 6e 74 65 78 74 28 49 6e  regateContext(In
10ee0 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20  tPtr context).. 
10ef0 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
10f00 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
10f10 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61  ethods.sqlite3_a
10f20 67 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74  ggregate_context
10f30 28 63 6f 6e 74 65 78 74 2c 20 31 29 3b 0d 0a 20  (context, 1);.. 
10f40 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45     }....#if INTE
10f50 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
10f60 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  E..    /// <summ
10f70 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61  ary>..    /// Ca
10f80 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53  lls the native S
10f90 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
10fa0 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 64  ry in order to d
10fb0 65 63 6c 61 72 65 20 61 20 76 69 72 74 75 61 6c  eclare a virtual
10fc0 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20   table..    /// 
10fd0 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61  in response to a
10fe0 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c   call into the <
10ff0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
11000 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
11010 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f  reate" />..    /
11020 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72 65 66 3d  // or <see cref=
11030 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
11040 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f  dule.xConnect" /
11050 3e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  > virtual table 
11060 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f  methods...    //
11070 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
11080 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
11090 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20  e="module">..   
110a0 20 2f 2f 2f 20 54 68 65 20 76 69 72 74 75 61 6c   /// The virtual
110b0 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68   table module th
110c0 61 74 20 69 73 20 74 6f 20 62 65 20 72 65 73 70  at is to be resp
110d0 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20  onsible for the 
110e0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
110f0 20 20 20 2f 2f 2f 20 62 65 69 6e 67 20 64 65 63     /// being dec
11100 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lared...    /// 
11110 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
11120 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
11130 74 72 53 71 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f  trSql">..    ///
11140 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6e 74   The string cont
11150 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73  aining the SQL s
11160 74 61 74 65 6d 65 6e 74 20 64 65 73 63 72 69 62  tatement describ
11170 69 6e 67 20 74 68 65 20 76 69 72 74 75 61 6c 20  ing the virtual 
11180 74 61 62 6c 65 20 74 6f 0d 0a 20 20 20 20 2f 2f  table to..    //
11190 2f 20 62 65 20 64 65 63 6c 61 72 65 64 2e 0d 0a  / be declared...
111a0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
111b0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
111c0 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a   name="error">..
111d0 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63      /// Upon suc
111e0 63 65 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e  cess, the conten
111f0 74 73 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d  ts of this param
11200 65 74 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e  eter are undefin
11210 65 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72  ed.  Upon failur
11220 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73  e,..    /// it s
11230 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e  hould contain an
11240 20 61 70 70 72 6f 70 72 69 61 74 65 20 65 72 72   appropriate err
11250 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20  or message...   
11260 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
11270 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
11280 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e  ..    /// A stan
11290 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
112a0 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f  rn code...    //
112b0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
112c0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
112d0 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
112e0 6f 64 65 20 44 65 63 6c 61 72 65 56 69 72 74 75  ode DeclareVirtu
112f0 61 6c 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20  alTable(..      
11300 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d    SQLiteModule m
11310 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  odule,..        
11320 73 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 0d 0a  string strSql,..
11330 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
11340 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
11350 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
11360 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20      if (_sql == 
11370 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
11380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 72  ..            er
11390 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f  ror = "connectio
113a0 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  n has an invalid
113b0 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20   handle";..     
113c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
113d0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
113e0 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ror;..        }.
113f0 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
11400 72 20 70 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e  r pSql = IntPtr.
11410 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
11420 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
11430 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 53 71  .            pSq
11440 6c 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67  l = SQLiteString
11450 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53  .Utf8IntPtrFromS
11460 74 72 69 6e 67 28 73 74 72 53 71 6c 29 3b 0d 0a  tring(strSql);..
11470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
11480 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
11490 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
114a0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 65  thods.sqlite3_de
114b0 63 6c 61 72 65 5f 76 74 61 62 28 0d 0a 20 20 20  clare_vtab(..   
114c0 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71               _sq
114d0 6c 2c 20 70 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20  l, pSql);....   
114e0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20           if ((n 
114f0 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
11500 64 65 2e 4f 6b 29 20 26 26 20 28 6d 6f 64 75 6c  de.Ok) && (modul
11510 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20  e != null))..   
11520 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
11530 75 6c 65 2e 44 65 63 6c 61 72 65 64 20 3d 20 74  ule.Declared = t
11540 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
11550 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
11560 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
11570 20 65 72 72 6f 72 20 3d 20 47 65 74 4c 61 73 74   error = GetLast
11580 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20  Error();....    
11590 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
115a0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
115b0 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
115c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
115d0 20 20 20 20 20 20 69 66 20 28 70 53 71 6c 20 21        if (pSql !
115e0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
115f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
11610 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65  QLiteMemory.Free
11620 28 70 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20  (pSql);..       
11630 20 20 20 20 20 20 20 20 20 70 53 71 6c 20 3d 20           pSql = 
11640 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
11650 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
11660 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
11670 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
11680 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c  y>..    /// Call
11690 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c  s the native SQL
116a0 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
116b0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63   in order to dec
116c0 6c 61 72 65 20 61 20 76 69 72 74 75 61 6c 20 74  lare a virtual t
116d0 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75  able..    /// fu
116e0 6e 63 74 69 6f 6e 20 69 6e 20 72 65 73 70 6f 6e  nction in respon
116f0 73 65 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74  se to a call int
11700 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  o the <see cref=
11710 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
11720 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e  dule.xCreate" />
11730 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65  ..    /// or <se
11740 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
11750 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
11760 6e 65 63 74 22 20 2f 3e 20 76 69 72 74 75 61 6c  nect" /> virtual
11770 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d   table methods..
11780 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
11790 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
117a0 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65  ram name="module
117b0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
117c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f  virtual table mo
117d0 64 75 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20  dule that is to 
117e0 62 65 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66  be responsible f
117f0 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  or the virtual t
11800 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75  able..    /// fu
11810 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63  nction being dec
11820 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lared...    /// 
11830 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
11840 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
11850 72 67 75 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d 0a  rgumentCount">..
11860 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
11870 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
11880 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  to the function 
11890 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d  being declared..
118a0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
118b0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
118c0 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a  m name="name">..
118d0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65      /// The name
118e0 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
118f0 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e   being declared.
11900 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
11910 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
11920 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e  am name="error">
11930 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73  ..    /// Upon s
11940 75 63 63 65 73 73 2c 20 74 68 65 20 63 6f 6e 74  uccess, the cont
11950 65 6e 74 73 20 6f 66 20 74 68 69 73 20 70 61 72  ents of this par
11960 61 6d 65 74 65 72 20 61 72 65 20 75 6e 64 65 66  ameter are undef
11970 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c  ined.  Upon fail
11980 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74  ure,..    /// it
11990 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20   should contain 
119a0 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 65  an appropriate e
119b0 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20  rror message... 
119c0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
119d0 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
119e0 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74  s>..    /// A st
119f0 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
11a00 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
11a10 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
11a20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
11a30 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
11a40 72 43 6f 64 65 20 44 65 63 6c 61 72 65 56 69 72  rCode DeclareVir
11a50 74 75 61 6c 46 75 6e 63 74 69 6f 6e 28 0d 0a 20  tualFunction(.. 
11a60 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64         SQLiteMod
11a70 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20  ule module,..   
11a80 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d 65 6e       int argumen
11a90 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20  tCount,..       
11aa0 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
11ab0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
11ac0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
11ad0 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
11ae0 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
11af0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ull)..        {.
11b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72  .            err
11b10 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e  or = "connection
11b20 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
11b30 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20  handle";..      
11b40 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
11b50 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72  iteErrorCode.Err
11b60 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  or;..        }..
11b70 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
11b80 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e   pName = IntPtr.
11b90 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
11ba0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
11bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 4e 61  .            pNa
11bc0 6d 65 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e  me = SQLiteStrin
11bd0 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d  g.Utf8IntPtrFrom
11be0 53 74 72 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d  String(name);...
11bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
11c00 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
11c10 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11c20 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 76 65  hods.sqlite3_ove
11c30 72 6c 6f 61 64 5f 66 75 6e 63 74 69 6f 6e 28 0d  rload_function(.
11c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11c50 20 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c 20 61 72   _sql, pName, ar
11c60 67 75 6d 65 6e 74 43 6f 75 6e 74 29 3b 0d 0a 0d  gumentCount);...
11c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
11c80 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
11c90 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20  rCode.Ok) error 
11ca0 3d 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  = GetLastError()
11cb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11cc0 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20   return n;..    
11cd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
11ce0 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
11cf0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
11d00 66 20 28 70 4e 61 6d 65 20 21 3d 20 49 6e 74 50  f (pName != IntP
11d10 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
11d20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11d30 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
11d40 65 6d 6f 72 79 2e 46 72 65 65 28 70 4e 61 6d 65  emory.Free(pName
11d50 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
11d60 20 20 20 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50      pName = IntP
11d70 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
11d80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11d90 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69   }..    }..#endi
11da0 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  f....    /// <su
11db0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
11dc0 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62  Enables or disab
11dd0 6c 65 64 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f  led extension lo
11de0 61 64 69 6e 67 20 62 79 20 53 51 4c 69 74 65 2e  ading by SQLite.
11df0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
11e00 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
11e10 61 72 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66  aram name="bOnOf
11e20 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75  f">..    /// Tru
11e30 65 20 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64  e to enable load
11e40 69 6e 67 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e  ing of extension
11e50 73 2c 20 66 61 6c 73 65 20 74 6f 20 64 69 73 61  s, false to disa
11e60 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ble...    /// </
11e70 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
11e80 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
11e90 69 64 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73  id SetLoadExtens
11ea0 69 6f 6e 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29  ion(bool bOnOff)
11eb0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
11ec0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
11ed0 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
11ee0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11ef0 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74  _enable_load_ext
11f00 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ension(..       
11f10 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f       _sql, (bOnO
11f20 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a  ff ? -1 : 0));..
11f30 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
11f40 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
11f50 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
11f60 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
11f70 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
11f80 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
11f90 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
11fa0 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20  ..    /// Loads 
11fb0 61 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69  a SQLite extensi
11fc0 6f 6e 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 20  on library from 
11fd0 74 68 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d  the named file..
11fe0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
11ff0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
12000 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61  ram name="fileNa
12010 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  me">..    /// Th
12020 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 79  e name of the dy
12030 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61  namic link libra
12040 72 79 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69  ry file containi
12050 6e 67 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  ng the extension
12060 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
12070 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
12080 72 61 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61  ram name="procNa
12090 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  me">..    /// Th
120a0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 65 78  e name of the ex
120b0 70 6f 72 74 65 64 20 66 75 6e 63 74 69 6f 6e 20  ported function 
120c0 75 73 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69  used to initiali
120d0 7a 65 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  ze the extension
120e0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75  ...    /// If nu
120f0 6c 6c 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20  ll, the default 
12100 22 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69  "sqlite3_extensi
12110 6f 6e 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62 65  on_init" will be
12120 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20   used...    /// 
12130 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
12140 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
12150 76 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e 73 69  void LoadExtensi
12160 6f 6e 28 73 74 72 69 6e 67 20 66 69 6c 65 4e 61  on(string fileNa
12170 6d 65 2c 20 73 74 72 69 6e 67 20 70 72 6f 63 4e  me, string procN
12180 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ame)..    {..   
12190 20 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61 6d       if (fileNam
121a0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
121b0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
121c0 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
121d0 63 65 70 74 69 6f 6e 28 22 66 69 6c 65 4e 61 6d  ception("fileNam
121e0 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
121f0 49 6e 74 50 74 72 20 70 45 72 72 6f 72 20 3d 20  IntPtr pError = 
12200 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
12210 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
12220 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12230 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38 46      byte[] utf8F
12240 69 6c 65 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e  ileName = UTF8En
12250 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42  coding.UTF8.GetB
12260 79 74 65 73 28 66 69 6c 65 4e 61 6d 65 20 2b 20  ytes(fileName + 
12270 27 5c 30 27 29 3b 0d 0a 20 20 20 20 20 20 20 20  '\0');..        
12280 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38 50      byte[] utf8P
12290 72 6f 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d  rocName = null;.
122a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
122b0 66 20 28 70 72 6f 63 4e 61 6d 65 20 21 3d 20 6e  f (procName != n
122c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
122d0 20 20 20 20 20 20 75 74 66 38 50 72 6f 63 4e 61        utf8ProcNa
122e0 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e  me = UTF8Encodin
122f0 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73 28  g.UTF8.GetBytes(
12300 70 72 6f 63 4e 61 6d 65 20 2b 20 27 5c 30 27 29  procName + '\0')
12310 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12320 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12330 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
12340 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12350 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  _load_extension(
12360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12370 20 20 5f 73 71 6c 2c 20 75 74 66 38 46 69 6c 65    _sql, utf8File
12380 4e 61 6d 65 2c 20 75 74 66 38 50 72 6f 63 4e 61  Name, utf8ProcNa
12390 6d 65 2c 20 72 65 66 20 70 45 72 72 6f 72 29 3b  me, ref pError);
123a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
123b0 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
123c0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
123d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
123e0 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
123f0 63 65 70 74 69 6f 6e 28 6e 2c 20 55 54 46 38 54  ception(n, UTF8T
12400 6f 53 74 72 69 6e 67 28 70 45 72 72 6f 72 2c 20  oString(pError, 
12410 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  -1));..        }
12420 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
12430 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
12440 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 45            if (pE
12450 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a  rror != IntPtr.Z
12460 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
12470 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12480 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
12490 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
124a0 5f 66 72 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a  _free(pError);..
124b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124c0 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e  pError = IntPtr.
124d0 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
124e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
124f0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
12500 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73  / Enables or dis
12510 61 62 6c 65 64 20 65 78 74 65 6e 64 65 64 20 72  abled extended r
12520 65 73 75 6c 74 20 63 6f 64 65 73 20 72 65 74 75  esult codes retu
12530 72 6e 65 64 20 62 79 20 53 51 4c 69 74 65 0d 0a  rned by SQLite..
12540 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
12550 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 45 78  rride void SetEx
12560 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65  tendedResultCode
12570 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a  s(bool bOnOff)..
12580 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
12590 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
125a0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
125b0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74  hods.sqlite3_ext
125c0 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64  ended_result_cod
125d0 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 5f  es(..          _
125e0 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d  sql, (bOnOff ? -
125f0 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20  1 : 0));....    
12600 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
12610 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
12620 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
12630 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
12640 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
12650 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74    }..    /// Get
12660 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74  s the last SQLit
12670 65 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20  e error code..  
12680 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
12690 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
126a0 6f 64 65 20 52 65 73 75 6c 74 43 6f 64 65 28 29  ode ResultCode()
126b0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
126c0 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
126d0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
126e0 33 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b  3_errcode(_sql);
126f0 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f  ..    }..    ///
12700 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20 53   Gets the last S
12710 51 4c 69 74 65 20 65 78 74 65 6e 64 65 64 20 65  QLite extended e
12720 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69  rror code..    i
12730 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12740 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12750 20 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43   ExtendedResultC
12760 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ode()..    {..  
12770 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
12780 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12790 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
127a0 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a  errcode(_sql);..
127b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
127c0 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61   Add a log messa
127d0 67 65 20 76 69 61 20 74 68 65 20 53 51 4c 69 74  ge via the SQLit
127e0 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e  e sqlite3_log in
127f0 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e  terface...    in
12800 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
12810 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67 65 28  void LogMessage(
12820 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
12830 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67  iErrCode, string
12840 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20   zMessage)..    
12850 7b 0d 0a 20 20 20 20 20 20 53 74 61 74 69 63 4c  {..      StaticL
12860 6f 67 4d 65 73 73 61 67 65 28 69 45 72 72 43 6f  ogMessage(iErrCo
12870 64 65 2c 20 7a 4d 65 73 73 61 67 65 29 3b 0d 0a  de, zMessage);..
12880 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
12890 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61   Add a log messa
128a0 67 65 20 76 69 61 20 74 68 65 20 53 51 4c 69 74  ge via the SQLit
128b0 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e  e sqlite3_log in
128c0 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e  terface...    in
128d0 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 76 6f  ternal static vo
128e0 69 64 20 53 74 61 74 69 63 4c 6f 67 4d 65 73 73  id StaticLogMess
128f0 61 67 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43  age(SQLiteErrorC
12900 6f 64 65 20 69 45 72 72 43 6f 64 65 2c 20 73 74  ode iErrCode, st
12910 72 69 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a  ring zMessage)..
12920 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
12930 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
12940 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72  .sqlite3_log(iEr
12950 72 43 6f 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d  rCode, ToUTF8(zM
12960 65 73 73 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d  essage));..    }
12970 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f  ....#if INTEROP_
12980 43 4f 44 45 43 0d 0a 20 20 20 20 69 6e 74 65 72  CODEC..    inter
12990 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
129a0 64 20 53 65 74 50 61 73 73 77 6f 72 64 28 62 79  d SetPassword(by
129b0 74 65 5b 5d 20 70 61 73 73 77 6f 72 64 42 79 74  te[] passwordByt
129c0 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  es)..    {..    
129d0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
129e0 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
129f0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
12a00 33 5f 6b 65 79 28 5f 73 71 6c 2c 20 70 61 73 73  3_key(_sql, pass
12a10 77 6f 72 64 42 79 74 65 73 2c 20 70 61 73 73 77  wordBytes, passw
12a20 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29  ordBytes.Length)
12a30 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ;..      if (n !
12a40 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
12a50 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
12a60 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
12a70 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
12a80 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
12a90 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
12aa0 69 64 65 20 76 6f 69 64 20 43 68 61 6e 67 65 50  ide void ChangeP
12ab0 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e  assword(byte[] n
12ac0 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 29  ewPasswordBytes)
12ad0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
12ae0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
12af0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
12b00 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
12b10 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65 77 50 61  ekey(_sql, newPa
12b20 73 73 77 6f 72 64 42 79 74 65 73 2c 20 28 6e 65  sswordBytes, (ne
12b30 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 20 3d  wPasswordBytes =
12b40 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a 20 6e 65  = null) ? 0 : ne
12b50 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c  wPasswordBytes.L
12b60 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69  ength);..      i
12b70 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
12b80 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
12b90 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
12ba0 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
12bb0 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
12bc0 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
12bd0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
12be0 65 20 76 6f 69 64 20 53 65 74 41 75 74 68 6f 72  e void SetAuthor
12bf0 69 7a 65 72 48 6f 6f 6b 28 53 51 4c 69 74 65 41  izerHook(SQLiteA
12c00 75 74 68 6f 72 69 7a 65 72 43 61 6c 6c 62 61 63  uthorizerCallbac
12c10 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
12c20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
12c30 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
12c40 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65 72  3_set_authorizer
12c50 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
12c60 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
12c70 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
12c80 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
12c90 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51  SetUpdateHook(SQ
12ca0 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61  LiteUpdateCallba
12cb0 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
12cc0 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
12cd0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
12ce0 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f  e3_update_hook(_
12cf0 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
12d00 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
12d10 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
12d20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
12d30 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69  tCommitHook(SQLi
12d40 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  teCommitCallback
12d50 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
12d60 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
12d70 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12d80 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71  _commit_hook(_sq
12d90 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
12da0 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
12db0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
12dc0 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54  erride void SetT
12dd0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c  raceCallback(SQL
12de0 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b  iteTraceCallback
12df0 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
12e00 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
12e10 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12e20 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e  _trace(_sql, fun
12e30 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
12e40 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
12e50 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12e60 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63   void SetRollbac
12e70 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c  kHook(SQLiteRoll
12e80 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e  backCallback fun
12e90 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
12ea0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
12eb0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c  hods.sqlite3_rol
12ec0 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c  lback_hook(_sql,
12ed0 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
12ee0 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
12ef0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
12f00 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73  ..    /// Allows
12f10 20 74 68 65 20 73 65 74 74 69 6e 67 20 6f 66 20   the setting of 
12f20 61 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61  a logging callba
12f30 63 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20 53 51  ck invoked by SQ
12f40 4c 69 74 65 20 77 68 65 6e 20 61 0d 0a 20 20 20  Lite when a..   
12f50 20 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f   /// log event o
12f60 63 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65  ccurs.  Only one
12f70 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65   callback may be
12f80 20 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69   set.  If NULL i
12f90 73 20 70 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f  s passed,..    /
12fa0 2f 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63  // the logging c
12fb0 61 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72 65 67  allback is unreg
12fc0 69 73 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f  istered...    //
12fd0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
12fe0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
12ff0 65 3d 22 66 75 6e 63 22 3e 54 68 65 20 63 61 6c  e="func">The cal
13000 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74  lback function t
13010 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d  o invoke.</param
13020 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
13030 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65  rns>Returns a re
13040 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72  sult code</retur
13050 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
13060 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
13070 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f  eErrorCode SetLo
13080 67 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65  gCallback(SQLite
13090 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  LogCallback func
130a0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
130b0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
130c0 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
130d0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
130e0 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a  e3_config_log(..
130f0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
13100 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e  teConfigOpsEnum.
13110 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f  SQLITE_CONFIG_LO
13120 47 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  G, func, IntPtr.
13130 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Zero);....      
13140 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20    return rc;..  
13150 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
13160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
131a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
131b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
131c0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
131d0 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73  .    /// Creates
131e0 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20 62 61   a new SQLite ba
131f0 63 6b 75 70 20 6f 62 6a 65 63 74 20 62 61 73 65  ckup object base
13200 64 20 6f 6e 20 74 68 65 20 70 72 6f 76 69 64 65  d on the provide
13210 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20  d destination.. 
13220 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20     /// database 
13230 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
13240 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
13250 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74   connection is t
13260 68 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20  he one..    /// 
13270 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
13280 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68  this object.  Th
13290 65 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73  e source and des
132a0 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73  tination databas
132b0 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65  e..    /// conne
132c0 63 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65  ctions cannot be
132d0 20 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20   the same...    
132e0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
132f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
13300 61 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68  ame="destCnn">Th
13310 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61  e destination da
13320 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
13330 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
13340 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
13350 22 64 65 73 74 4e 61 6d 65 22 3e 54 68 65 20 64  "destName">The d
13360 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62  estination datab
13370 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d  ase name.</param
13380 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
13390 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61  m name="sourceNa
133a0 6d 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64  me">The source d
133b0 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70  atabase name.</p
133c0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
133d0 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c  returns>The newl
133e0 79 20 63 72 65 61 74 65 64 20 62 61 63 6b 75 70  y created backup
133f0 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e   object.</return
13400 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
13410 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
13420 42 61 63 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a  Backup Initializ
13430 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  eBackup(..      
13440 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
13450 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20  on destCnn,..   
13460 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 74       string dest
13470 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73  Name,..        s
13480 74 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65  tring sourceName
13490 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
134a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
134b0 64 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29  destCnn == null)
134c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
134d0 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
134e0 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64  NullException("d
134f0 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20  estCnn");....   
13500 20 20 20 20 20 69 66 20 28 64 65 73 74 4e 61 6d       if (destNam
13510 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
13520 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
13530 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
13540 63 65 70 74 69 6f 6e 28 22 64 65 73 74 4e 61 6d  ception("destNam
13550 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
13560 69 66 20 28 73 6f 75 72 63 65 4e 61 6d 65 20 3d  if (sourceName =
13570 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
13580 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
13590 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
135a0 74 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d 65  tion("sourceName
135b0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
135c0 51 4c 69 74 65 33 20 64 65 73 74 53 71 6c 69 74  QLite3 destSqlit
135d0 65 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73 71  e3 = destCnn._sq
135e0 6c 20 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d  l as SQLite3;...
135f0 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73  .        if (des
13600 74 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c  tSqlite3 == null
13610 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
13620 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
13630 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  tException(..   
13640 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
13650 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63  stination connec
13660 74 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61 70  tion has no wrap
13670 70 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  per.",..        
13680 20 20 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e          "destCnn
13690 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
136a0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
136b0 61 6e 64 6c 65 20 64 65 73 74 48 61 6e 64 6c 65  andle destHandle
136c0 20 3d 20 64 65 73 74 53 71 6c 69 74 65 33 2e 5f   = destSqlite3._
136d0 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  sql;....        
136e0 69 66 20 28 64 65 73 74 48 61 6e 64 6c 65 20 3d  if (destHandle =
136f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
13700 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
13710 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e  rgumentException
13720 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13730 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20     "Destination 
13740 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61  connection has a
13750 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
13760 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
13770 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b       "destCnn");
13780 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
13790 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64  teConnectionHand
137a0 6c 65 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 20  le sourceHandle 
137b0 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = _sql;....     
137c0 20 20 20 69 66 20 28 73 6f 75 72 63 65 48 61 6e     if (sourceHan
137d0 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
137e0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
137f0 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
13800 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13820 22 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74 69  "Source connecti
13830 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  on has an invali
13840 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a  d handle.");....
13850 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a          byte[] z
13860 44 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54 46  DestName = ToUTF
13870 38 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20 20  8(destName);..  
13880 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 53 6f        byte[] zSo
13890 75 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54 46  urceName = ToUTF
138a0 38 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a  8(sourceName);..
138b0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
138c0 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 62 61 63  BackupHandle bac
138d0 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c  kupHandle = null
138e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79  ;....        try
138f0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
13900 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
13910 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
13920 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61   }..        fina
13930 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72  lly /* NOTE: Thr
13940 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74  ead.Abort() prot
13950 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20  ection. */..    
13960 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13970 20 20 20 49 6e 74 50 74 72 20 62 61 63 6b 75 70     IntPtr backup
13980 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
13990 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
139a0 61 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20 20  ackup_init(..   
139b0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
139c0 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61  tHandle, zDestNa
139d0 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65  me, sourceHandle
139e0 2c 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d  , zSourceName);.
139f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
13a00 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74  f (backup == Int
13a10 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
13a20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
13a30 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
13a40 45 72 72 6f 72 43 6f 64 65 20 72 65 73 75 6c 74  ErrorCode result
13a50 43 6f 64 65 20 3d 20 52 65 73 75 6c 74 43 6f 64  Code = ResultCod
13a60 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
13a70 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
13a80 6c 74 43 6f 64 65 20 21 3d 20 53 51 4c 69 74 65  ltCode != SQLite
13a90 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
13aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ab0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
13ac0 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 65 73  iteException(res
13ad0 75 6c 74 43 6f 64 65 2c 20 47 65 74 4c 61 73 74  ultCode, GetLast
13ae0 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
13af0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
13b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13b10 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
13b20 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
13b30 66 61 69 6c 65 64 20 74 6f 20 69 6e 69 74 69 61  failed to initia
13b40 6c 69 7a 65 20 62 61 63 6b 75 70 22 29 3b 0d 0a  lize backup");..
13b50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
13b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61 63  .            bac
13b70 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20  kupHandle = new 
13b80 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
13b90 6c 65 28 64 65 73 74 48 61 6e 64 6c 65 2c 20 62  le(destHandle, b
13ba0 61 63 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20 20  ackup);..       
13bb0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51   }....        SQ
13bc0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f  LiteConnection.O
13bd0 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e  nChanged(null, n
13be0 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65  ew ConnectionEve
13bf0 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
13c00 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
13c10 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e  ctionEventType.N
13c20 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65  ewCriticalHandle
13c30 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20  , null, null,.. 
13c40 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c             null,
13c50 20 6e 75 6c 6c 2c 20 62 61 63 6b 75 70 48 61 6e   null, backupHan
13c60 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f  dle, null, new o
13c70 62 6a 65 63 74 5b 5d 20 7b 20 64 65 73 74 43 6e  bject[] { destCn
13c80 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
13c90 64 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65  destName, source
13ca0 4e 61 6d 65 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20  Name }));....   
13cb0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
13cc0 53 51 4c 69 74 65 42 61 63 6b 75 70 28 0d 0a 20  SQLiteBackup(.. 
13cd0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2c             this,
13ce0 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64   backupHandle, d
13cf0 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74  estHandle, zDest
13d00 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64  Name, sourceHand
13d10 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
13d20 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a   zSourceName);..
13d30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
13d40 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
13d50 2f 2f 2f 20 43 6f 70 69 65 73 20 75 70 20 74 6f  /// Copies up to
13d60 20 4e 20 70 61 67 65 73 20 66 72 6f 6d 20 74 68   N pages from th
13d70 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
13d80 65 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61  e to the destina
13d90 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61  tion..    /// da
13da0 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65  tabase associate
13db0 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  d with the speci
13dc0 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65  fied backup obje
13dd0 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ct...    /// </s
13de0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
13df0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61   <param name="ba
13e00 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70  ckup">The backup
13e10 20 6f 62 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c   object to use.<
13e20 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
13e30 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50   <param name="nP
13e40 61 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  age">..    /// T
13e50 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
13e60 65 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61  es to copy, nega
13e70 74 69 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c  tive to copy all
13e80 20 72 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73   remaining pages
13e90 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
13ea0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
13eb0 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22  ram name="retry"
13ec0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74  >..    /// Set t
13ed0 6f 20 74 72 75 65 20 69 66 20 74 68 65 20 6f 70  o true if the op
13ee0 65 72 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f  eration needs to
13ef0 20 62 65 20 72 65 74 72 69 65 64 20 64 75 65 20   be retried due 
13f00 74 6f 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  to database..   
13f10 20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73   /// locking iss
13f20 75 65 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ues; otherwise, 
13f30 73 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20  set to false... 
13f40 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
13f50 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
13f60 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65  s>..    /// True
13f70 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6d 6f   if there are mo
13f80 72 65 20 70 61 67 65 73 20 74 6f 20 62 65 20 63  re pages to be c
13f90 6f 70 69 65 64 2c 20 66 61 6c 73 65 20 6f 74 68  opied, false oth
13fa0 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f  erwise...    ///
13fb0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
13fc0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
13fd0 64 65 20 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b  de bool StepBack
13fe0 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  up(..        SQL
13ff0 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70  iteBackup backup
14000 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  ,..        int n
14010 50 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 72  Page,..        r
14020 65 66 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20  ef bool retry.. 
14030 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
14040 0a 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d  .        retry =
14050 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
14060 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
14070 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
14080 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
14090 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
140a0 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
140b0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
140c0 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
140d0 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
140e0 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
140f0 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
14100 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
14110 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
14120 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
14130 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
14140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14150 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
14160 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
14170 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
14180 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
14190 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
141a0 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
141b0 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72  dlePtr == IntPtr
141c0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
141d0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
141e0 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
141f0 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
14200 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
14210 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
14220 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
14230 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20  ointer.");....  
14240 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
14250 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
14260 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
14270 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65  lite3_backup_ste
14280 70 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61  p(handlePtr, nPa
14290 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 61  ge);..        ba
142a0 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74  ckup._stepResult
142b0 20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53   = n; /* NOTE: S
142c0 61 76 65 20 66 6f 72 20 75 73 65 20 62 79 20 46  ave for use by F
142d0 69 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d  inishBackup. */.
142e0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
142f0 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
14300 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
14310 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14320 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
14330 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
14340 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
14350 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42  QLiteErrorCode.B
14360 75 73 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  usy)..        {.
14370 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
14380 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ry = true;..    
14390 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
143a0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
143b0 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66  .        else if
143c0 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
143d0 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a  orCode.Locked)..
143e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
143f0 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74         retry = t
14400 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
14410 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
14420 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
14430 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
14440 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
14450 2e 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20 20  .Done)..        
14460 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
14470 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
14480 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
14490 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b   else..        {
144a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
144b0 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
144c0 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
144d0 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
144e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
144f0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
14500 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
14510 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
14520 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e  f pages remainin
14530 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64 20 66  g to be copied f
14540 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 0d 0a  rom the source..
14550 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
14560 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74   to the destinat
14570 69 6f 6e 20 64 61 74 61 62 61 73 65 20 61 73 73  ion database ass
14580 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
14590 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20   specified..    
145a0 2f 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  /// backup objec
145b0 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
145c0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
145d0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
145e0 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
145f0 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e  object to check.
14600 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
14610 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e  / <returns>The n
14620 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72  umber of pages r
14630 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63  emaining to be c
14640 6f 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e  opied.</returns>
14650 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
14660 76 65 72 72 69 64 65 20 69 6e 74 20 52 65 6d 61  verride int Rema
14670 69 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20  iningBackup(..  
14680 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
14690 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20  up backup..     
146a0 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
146b0 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
146c0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
146d0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
146e0 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
146f0 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b  ption("backup");
14700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
14710 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68  teBackupHandle h
14720 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f  andle = backup._
14730 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a  sqlite_backup;..
14740 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
14750 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
14760 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
14770 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
14780 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
14790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
147a0 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
147b0 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
147c0 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20  andle.");....   
147d0 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
147e0 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  lePtr = handle;.
147f0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
14800 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50  andlePtr == IntP
14810 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
14820 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
14830 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
14840 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
14850 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
14860 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
14870 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
14880 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a   pointer.");....
14890 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
148a0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
148b0 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  ds.sqlite3_backu
148c0 70 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64  p_remaining(hand
148d0 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a  lePtr);..    }..
148e0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
148f0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
14900 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  urns the total n
14910 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
14920 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74  n the source dat
14930 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
14940 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74  ..    /// with t
14950 68 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63  he specified bac
14960 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20  kup object...   
14970 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
14980 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
14990 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68  name="backup">Th
149a0 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
149b0 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d  to check.</param
149c0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
149d0 72 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75  rns>The total nu
149e0 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
149f0 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   the source data
14a00 62 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  base.</returns>.
14a10 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
14a20 65 72 72 69 64 65 20 69 6e 74 20 50 61 67 65 43  erride int PageC
14a30 6f 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20 20  ountBackup(..   
14a40 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
14a50 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20  p backup..      
14a60 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
14a70 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
14a80 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
14a90 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
14aa0 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
14ab0 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
14ac0 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
14ad0 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
14ae0 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
14af0 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
14b00 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
14b10 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
14b20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
14b30 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
14b40 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b60 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
14b70 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
14b80 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
14b90 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
14ba0 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
14bb0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
14bc0 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
14bd0 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
14be0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
14bf0 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
14c00 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
14c10 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
14c20 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
14c30 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
14c40 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20  pointer.");.... 
14c50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
14c60 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
14c70 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
14c80 5f 70 61 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c  _pagecount(handl
14c90 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ePtr);..    }...
14ca0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
14cb0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74  y>..    /// Dest
14cc0 72 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70 20  roys the backup 
14cd0 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20  object, rolling 
14ce0 62 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20  back any backup 
14cf0 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a  that may be in..
14d00 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e      /// progess.
14d10 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
14d20 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
14d30 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75  aram name="backu
14d40 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62  p">The backup ob
14d50 6a 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e  ject to destroy.
14d60 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
14d70 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
14d80 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75  void FinishBacku
14d90 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
14da0 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d  teBackup backup.
14db0 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
14dc0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62  {..        if (b
14dd0 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ackup == null)..
14de0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
14df0 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
14e00 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63  llException("bac
14e10 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  kup");....      
14e20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61    SQLiteBackupHa
14e30 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61  ndle handle = ba
14e40 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63  ckup._sqlite_bac
14e50 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  kup;....        
14e60 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75  if (handle == nu
14e70 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
14e80 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
14e90 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
14ea0 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
14eb0 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
14ec0 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
14ed0 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
14ee0 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
14ef0 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61  r handlePtr = ha
14f00 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
14f10 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d   if (handlePtr =
14f20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
14f30 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
14f40 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
14f50 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
14f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14f70 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
14f80 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
14f90 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22  handle pointer."
14fa0 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  );....#if !SQLIT
14fb0 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
14fc0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
14fd0 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
14fe0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
14ff0 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73  te3_backup_finis
15000 68 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  h_interop(handle
15010 50 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  Ptr);..#else..  
15020 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
15030 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
15040 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
15050 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e  lite3_backup_fin
15060 69 73 68 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d  ish(handlePtr);.
15070 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
15080 20 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c   handle.SetHandl
15090 65 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d  eAsInvalid();...
150a0 0a 23 69 66 20 43 4f 55 4e 54 5f 48 41 4e 44 4c  .#if COUNT_HANDL
150b0 45 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  E..        if ((
150c0 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
150d0 43 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d  Code.Ok) || (n =
150e0 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65  = backup._stepRe
150f0 73 75 6c 74 29 29 20 68 61 6e 64 6c 65 2e 57 61  sult)) handle.Wa
15100 73 52 65 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a  sReleasedOk();..
15110 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
15120 20 20 69 66 20 28 28 6e 20 21 3d 20 53 51 4c 69    if ((n != SQLi
15130 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
15140 26 26 20 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e  && (n != backup.
15150 5f 73 74 65 70 52 65 73 75 6c 74 29 29 0d 0a 20  _stepResult)).. 
15160 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
15170 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
15180 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
15190 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
151a0 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
151b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
151c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
151d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
151e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
151f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15200 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
15210 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
15220 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20   /// Determines 
15230 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  if the SQLite co
15240 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
15250 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  een initialized 
15260 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  for the..    ///
15270 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
15280 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
15290 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
152a0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
152b0 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69  / A boolean indi
152c0 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
152d0 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65  r not the SQLite
152e0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
152f0 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20  s been..    /// 
15300 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
15310 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
15320 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
15330 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
15340 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
15350 62 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a  bool IsInitializ
15360 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
15370 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74       return Stat
15380 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  icIsInitialized(
15390 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
153a0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
153b0 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e      /// Determin
153c0 65 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  es if the SQLite
153d0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
153e0 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  s been initializ
153f0 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  ed for the..    
15400 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63  /// current proc
15410 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
15420 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
15430 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
15440 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69   /// A boolean i
15450 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
15460 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c  r or not the SQL
15470 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
15480 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f   has been..    /
15490 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  // initialized f
154a0 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  or the current p
154b0 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
154c0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
154d0 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
154e0 20 62 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e   bool StaticIsIn
154f0 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20  itialized()..   
15500 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a   {..        //..
15510 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49          // BUGFI
15520 58 3a 20 50 72 65 76 65 6e 74 20 72 61 63 65 73  X: Prevent races
15530 20 77 69 74 68 20 6f 74 68 65 72 20 74 68 72 65   with other thre
15540 61 64 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74  ads for this ent
15550 69 72 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a  ire block, due..
15560 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
15570 20 20 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69     to the try/fi
15580 6e 61 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e  nally semantics.
15590 20 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32    See ticket [72
155a0 39 30 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20  905c9a77]...    
155b0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
155c0 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d  lock (syncRoot).
155d0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
155e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
155f0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
15600 20 53 61 76 65 20 74 68 65 20 73 74 61 74 65 20   Save the state 
15610 6f 66 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63  of the logging c
15620 6c 61 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65  lass and then re
15630 73 74 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20  store it..      
15640 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
15650 66 74 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65  fter we are done
15660 20 74 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e   to avoid loggin
15670 67 20 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65  g too many false
15680 20 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20   errors...      
15690 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
156a0 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64        bool saved
156b0 45 6e 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65  Enabled = SQLite
156c0 4c 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20  Log.Enabled;..  
156d0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
156e0 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61  Log.Enabled = fa
156f0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
15700 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
15710 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15720 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
15730 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
15740 4f 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64  OTE: This method
15750 20 5b 61 62 5d 75 73 65 73 20 74 68 65 20 66 61   [ab]uses the fa
15760 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 77  ct that SQLite w
15770 69 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20  ill always..    
15780 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
15790 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
157a0 54 45 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79  TE_ERROR for any
157b0 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75   unknown configu
157c0 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20  ration option.. 
157d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
157e0 2f 20 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a  /       *unless*
157f0 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
15800 61 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20  ary has already 
15810 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
15820 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15830 20 20 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74     //       In t
15840 68 61 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c  hat case it will
15850 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53   always return S
15860 51 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20  QLITE_MISUSE... 
15870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15880 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
15890 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
158a0 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
158b0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
158c0 74 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28  te3_config_none(
158d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
158e0 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66        SQLiteConf
158f0 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  igOpsEnum.SQLITE
15900 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a  _CONFIG_NONE);..
15910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15920 20 20 72 65 74 75 72 6e 20 28 72 63 20 3d 3d 20    return (rc == 
15930 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
15940 4d 69 73 75 73 65 29 3b 0d 0a 20 20 20 20 20 20  Misuse);..      
15950 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
15960 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
15970 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15980 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
15990 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d  iteLog.Enabled =
159a0 20 73 61 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a   savedEnabled;..
159b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
159c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
159d0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
159e0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65  ary>..    /// He
159f0 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f  lper function to
15a00 20 72 65 74 72 69 65 76 65 20 61 20 63 6f 6c 75   retrieve a colu
15a10 6d 6e 20 6f 66 20 64 61 74 61 20 66 72 6f 6d 20  mn of data from 
15a20 61 6e 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  an active statem
15a30 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ent...    /// </
15a40 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
15a50 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
15a60 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65  tmt">The stateme
15a70 6e 74 20 62 65 69 6e 67 20 73 74 65 70 28 29 27  nt being step()'
15a80 64 20 74 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d  d through</param
15a90 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
15aa0 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54  m name="flags">T
15ab0 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61  he flags associa
15ac0 74 65 64 20 77 69 74 68 20 74 68 65 20 63 6f 6e  ted with the con
15ad0 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e  nection.</param>
15ae0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
15af0 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68   name="index">Th
15b00 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74  e column index t
15b10 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
15b20 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
15b30 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68  am name="typ">Th
15b40 65 20 74 79 70 65 20 6f 66 20 64 61 74 61 20 63  e type of data c
15b50 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
15b60 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e  column.  If Unin
15b70 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 69 73 20  itialized, this 
15b80 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65  function will re
15b90 74 72 69 65 76 65 20 74 68 65 20 64 61 74 61 74  trieve the datat
15ba0 79 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ype information.
15bb0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
15bc0 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72  / <returns>Retur
15bd0 6e 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 74  ns the data in t
15be0 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72  he column</retur
15bf0 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
15c00 6c 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63  l override objec
15c10 74 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74  t GetValue(SQLit
15c20 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
15c30 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
15c40 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
15c50 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54  t index, SQLiteT
15c60 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d  ype typ)..    {.
15c70 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
15c80 69 74 79 20 61 66 66 20 3d 20 74 79 70 2e 41 66  ity aff = typ.Af
15c90 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 69  finity;..      i
15ca0 66 20 28 61 66 66 20 3d 3d 20 54 79 70 65 41 66  f (aff == TypeAf
15cb0 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 20 72 65 74  finity.Null) ret
15cc0 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65  urn DBNull.Value
15cd0 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 20 74 20  ;..      Type t 
15ce0 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
15cf0 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 21 3d   if (typ.Type !=
15d00 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 0d   DbType.Object).
15d10 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
15d20 20 20 74 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76    t = SQLiteConv
15d30 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54 6f  ert.SQLiteTypeTo
15d40 54 79 70 65 28 74 79 70 29 3b 0d 0a 20 20 20 20  Type(typ);..    
15d50 20 20 20 20 61 66 66 20 3d 20 54 79 70 65 54 6f      aff = TypeTo
15d60 41 66 66 69 6e 69 74 79 28 74 29 3b 0d 0a 20 20  Affinity(t);..  
15d70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
15d80 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
15d90 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
15da0 73 2e 47 65 74 41 6c 6c 41 73 54 65 78 74 29 20  s.GetAllAsText) 
15db0 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
15dc0 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41  ionFlags.GetAllA
15dd0 73 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20  sText)..        
15de0 20 20 72 65 74 75 72 6e 20 47 65 74 54 65 78 74    return GetText
15df0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
15e00 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28  ..      switch (
15e10 61 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  aff)..      {.. 
15e20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
15e30 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a  Affinity.Blob:..
15e40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
15e50 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65  p.Type == DbType
15e60 2e 47 75 69 64 20 26 26 20 74 79 70 2e 41 66 66  .Guid && typ.Aff
15e70 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66  inity == TypeAff
15e80 69 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20 20 20  inity.Text)..   
15e90 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
15ea0 6e 65 77 20 47 75 69 64 28 47 65 74 54 65 78 74  new Guid(GetText
15eb0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d  (stmt, index));.
15ec0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ...          int
15ed0 20 6e 20 3d 20 28 69 6e 74 29 47 65 74 42 79 74   n = (int)GetByt
15ee0 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  es(stmt, index, 
15ef0 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d  0, null, 0, 0);.
15f00 0a 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b  .          byte[
15f10 5d 20 62 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e  ] b = new byte[n
15f20 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 47 65  ];..          Ge
15f30 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64  tBytes(stmt, ind
15f40 65 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29 3b  ex, 0, b, 0, n);
15f50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
15f60 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62   (typ.Type == Db
15f70 54 79 70 65 2e 47 75 69 64 20 26 26 20 6e 20 3d  Type.Guid && n =
15f80 3d 20 31 36 29 0d 0a 20 20 20 20 20 20 20 20 20  = 16)..         
15f90 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75     return new Gu
15fa0 69 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  id(b);....      
15fb0 20 20 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a 20      return b;.. 
15fc0 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
15fd0 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d  Affinity.DateTim
15fe0 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  e:..          re
15ff0 74 75 72 6e 20 47 65 74 44 61 74 65 54 69 6d 65  turn GetDateTime
16000 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
16010 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
16020 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65  eAffinity.Double
16030 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  :..          if 
16040 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75  (t == null) retu
16050 72 6e 20 47 65 74 44 6f 75 62 6c 65 28 73 74 6d  rn GetDouble(stm
16060 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
16070 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e        return Con
16080 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28  vert.ChangeType(
16090 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20  GetDouble(stmt, 
160a0 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29  index), t, null)
160b0 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
160c0 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74  TypeAffinity.Int
160d0 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  64:..          i
160e0 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  f (t == null) re
160f0 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74  turn GetInt64(st
16100 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
16110 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
16120 74 79 70 65 6f 66 28 53 42 79 74 65 29 29 20 72  typeof(SByte)) r
16130 65 74 75 72 6e 20 47 65 74 53 42 79 74 65 28 73  eturn GetSByte(s
16140 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
16150 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
16160 20 74 79 70 65 6f 66 28 42 79 74 65 29 29 20 72   typeof(Byte)) r
16170 65 74 75 72 6e 20 47 65 74 42 79 74 65 28 73 74  eturn GetByte(st
16180 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
16190 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
161a0 74 79 70 65 6f 66 28 49 6e 74 31 36 29 29 20 72  typeof(Int16)) r
161b0 65 74 75 72 6e 20 47 65 74 49 6e 74 31 36 28 73  eturn GetInt16(s
161c0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
161d0 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
161e0 20 74 79 70 65 6f 66 28 55 49 6e 74 31 36 29 29   typeof(UInt16))
161f0 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 31   return GetUInt1
16200 36 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  6(stmt, index);.
16210 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
16220 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74 33 32   == typeof(Int32
16230 29 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74  )) return GetInt
16240 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  32(stmt, index);
16250 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
16260 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74  t == typeof(UInt
16270 33 32 29 29 20 72 65 74 75 72 6e 20 47 65 74 55  32)) return GetU
16280 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
16290 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
162a0 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55  f (t == typeof(U
162b0 49 6e 74 36 34 29 29 20 72 65 74 75 72 6e 20 47  Int64)) return G
162c0 65 74 55 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  etUInt64(stmt, i
162d0 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
162e0 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74    return Convert
162f0 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 49  .ChangeType(GetI
16300 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt64(stmt, index
16310 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20  ), t, null);..  
16320 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a        default:..
16330 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
16340 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69   GetText(stmt, i
16350 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ndex);..      }.
16360 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
16370 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
16380 69 6e 74 20 47 65 74 43 75 72 73 6f 72 46 6f 72  int GetCursorFor
16390 54 61 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74  Table(SQLiteStat
163a0 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
163b0 64 62 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67 65  db, int rootPage
163c0 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
163d0 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
163e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
163f0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
16400 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63  .sqlite3_table_c
16410 75 72 73 6f 72 5f 69 6e 74 65 72 6f 70 28 73 74  ursor_interop(st
16420 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
16430 20 64 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b 0d   db, rootPage);.
16440 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
16450 74 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69 66  turn -1;..#endif
16460 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
16470 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
16480 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 6f   long GetRowIdFo
16490 72 43 75 72 73 6f 72 28 53 51 4c 69 74 65 53 74  rCursor(SQLiteSt
164a0 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
164b0 74 20 63 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b  t cursor)..    {
164c0 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
164d0 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f  ANDARD..      lo
164e0 6e 67 20 72 6f 77 69 64 20 3d 20 30 3b 0d 0a 20  ng rowid = 0;.. 
164f0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
16500 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
16510 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
16520 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f 77  lite3_cursor_row
16530 69 64 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  id_interop(stmt.
16540 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 63 75  _sqlite_stmt, cu
16550 72 73 6f 72 2c 20 72 65 66 20 72 6f 77 69 64 29  rsor, ref rowid)
16560 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63 20  ;..      if (rc 
16570 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
16580 64 65 2e 4f 6b 29 20 72 65 74 75 72 6e 20 72 6f  de.Ok) return ro
16590 77 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  wid;....      re
165a0 74 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a  turn 0;..#else..
165b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d        return 0;.
165c0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
165d0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
165e0 76 65 72 72 69 64 65 20 76 6f 69 64 20 47 65 74  verride void Get
165f0 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e  IndexColumnExten
16600 64 65 64 49 6e 66 6f 28 73 74 72 69 6e 67 20 64  dedInfo(string d
16610 61 74 61 62 61 73 65 2c 20 73 74 72 69 6e 67 20  atabase, string 
16620 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 63 6f  index, string co
16630 6c 75 6d 6e 2c 20 72 65 66 20 69 6e 74 20 73 6f  lumn, ref int so
16640 72 74 4d 6f 64 65 2c 20 72 65 66 20 69 6e 74 20  rtMode, ref int 
16650 6f 6e 45 72 72 6f 72 2c 20 72 65 66 20 73 74 72  onError, ref str
16660 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71  ing collationSeq
16670 75 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d 0a 23  uence)..    {..#
16680 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
16690 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ARD..      IntPt
166a0 72 20 63 6f 6c 6c 20 3d 20 49 6e 74 50 74 72 2e  r coll = IntPtr.
166b0 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74  Zero;..      int
166c0 20 63 6f 6c 6c 6c 65 6e 20 3d 20 30 3b 0d 0a 20   colllen = 0;.. 
166d0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
166e0 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20 20  Code rc;....    
166f0 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74    rc = UnsafeNat
16700 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
16710 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f  e3_index_column_
16720 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73 71  info_interop(_sq
16730 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 62 61  l, ToUTF8(databa
16740 73 65 29 2c 20 54 6f 55 54 46 38 28 69 6e 64 65  se), ToUTF8(inde
16750 78 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d  x), ToUTF8(colum
16760 6e 29 2c 20 72 65 66 20 73 6f 72 74 4d 6f 64 65  n), ref sortMode
16770 2c 20 72 65 66 20 6f 6e 45 72 72 6f 72 2c 20 72  , ref onError, r
16780 65 66 20 63 6f 6c 6c 2c 20 72 65 66 20 63 6f 6c  ef coll, ref col
16790 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69 66  llen);..      if
167a0 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
167b0 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
167c0 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
167d0 70 74 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29 3b  ption(rc, null);
167e0 0d 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74  ....      collat
167f0 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 55 54  ionSequence = UT
16800 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 2c  F8ToString(coll,
16810 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73   colllen);..#els
16820 65 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f 64  e..      sortMod
16830 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f 6e  e = 0;..      on
16840 45 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20 20  Error = 2;..    
16850 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65    collationSeque
16860 6e 63 65 20 3d 20 22 42 49 4e 41 52 59 22 3b 0d  nce = "BINARY";.
16870 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
16880 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
16890 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
168a0 72 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e 74  rorCode FileCont
168b0 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e 61  rol(string zDbNa
168c0 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74 50  me, int op, IntP
168d0 74 72 20 70 41 72 67 29 0d 0a 20 20 20 20 7b 0d  tr pArg)..    {.
168e0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
168f0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
16900 73 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63  s.sqlite3_file_c
16910 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44  ontrol(_sql, (zD
16920 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 3f  bName != null) ?
16930 20 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65 29   ToUTF8(zDbName)
16940 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41 72   : null, op, pAr
16950 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d  g);..    }..  }.
16960 0a 7d 0d 0a                                      .}..