System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 151007d74903e0afffe228e59c6bf15f4f650a68:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 20 0d 0a  soft.com).. * ..
00b0: 20 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74   * Released to t
00c0: 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e  he public domain
00d0: 2c 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77  , use at your ow
00e0: 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a  n risk!.. ******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65  **/....namespace
0130: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
0140: 69 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20  ite..{..  using 
0150: 53 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67  System;..  using
0160: 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69   System.Collecti
0170: 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 0d 0a  ons.Generic;....
0180: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
0190: 5f 32 30 20 26 26 20 28 54 52 41 43 45 5f 43 4f  _20 && (TRACE_CO
01a0: 4e 4e 45 43 54 49 4f 4e 20 7c 7c 20 54 52 41 43  NNECTION || TRAC
01b0: 45 5f 53 54 41 54 45 4d 45 4e 54 29 0d 0a 20 20  E_STATEMENT)..  
01c0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61  using System.Dia
01d0: 67 6e 6f 73 74 69 63 73 3b 0d 0a 23 65 6e 64 69  gnostics;..#endi
01e0: 66 0d 0a 0d 0a 20 20 75 73 69 6e 67 20 53 79 73  f....  using Sys
01f0: 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f  tem.Globalizatio
0200: 6e 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  n;..  using Syst
0210: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0220: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 20 20 75  opServices;..  u
0230: 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74  sing System.Text
0240: 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;....  /// <summ
0250: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  ary>..  /// This
0260: 20 69 73 20 74 68 65 20 6d 65 74 68 6f 64 20 73   is the method s
0270: 69 67 6e 61 74 75 72 65 20 66 6f 72 20 74 68 65  ignature for the
0280: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
0290: 72 61 72 79 20 6c 6f 67 67 69 6e 67 20 63 61 6c  rary logging cal
02a0: 6c 62 61 63 6b 0d 0a 20 20 2f 2f 2f 20 66 75 6e  lback..  /// fun
02b0: 63 74 69 6f 6e 20 66 6f 72 20 75 73 65 20 77 69  ction for use wi
02c0: 74 68 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  th sqlite3_log()
02d0: 20 61 6e 64 20 74 68 65 20 53 51 4c 49 54 45 5f   and the SQLITE_
02e0: 43 4f 4e 46 49 47 5f 4c 4f 47 2e 0d 0a 20 20 2f  CONFIG_LOG...  /
02f0: 2f 2f 0d 0a 20 20 2f 2f 2f 20 57 41 52 4e 49 4e  //..  /// WARNIN
0300: 47 3a 20 54 68 69 73 20 64 65 6c 65 67 61 74 65  G: This delegate
0310: 20 69 73 20 75 73 65 64 20 6d 6f 72 65 2d 6f 72   is used more-or
0320: 2d 6c 65 73 73 20 64 69 72 65 63 74 6c 79 20 62  -less directly b
0330: 79 20 6e 61 74 69 76 65 20 63 6f 64 65 2c 20 64  y native code, d
0340: 6f 0d 0a 20 20 2f 2f 2f 20 20 20 20 20 20 20 20  o..  ///        
0350: 20 20 6e 6f 74 20 6d 6f 64 69 66 79 20 69 74 73    not modify its
0360: 20 74 79 70 65 20 73 69 67 6e 61 74 75 72 65 2e   type signature.
0370: 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
0380: 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  y>..  /// <param
0390: 20 6e 61 6d 65 3d 22 70 55 73 65 72 44 61 74 61   name="pUserData
03a0: 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 65 78  ">..  /// The ex
03b0: 74 72 61 20 64 61 74 61 20 61 73 73 6f 63 69 61  tra data associa
03c0: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6d 65  ted with this me
03d0: 73 73 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d 0a  ssage, if any...
03e0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
03f0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
0400: 65 3d 22 65 72 72 6f 72 43 6f 64 65 22 3e 0d 0a  e="errorCode">..
0410: 20 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72 20    /// The error 
0420: 63 6f 64 65 20 61 73 73 6f 63 69 61 74 65 64 20  code associated 
0430: 77 69 74 68 20 74 68 69 73 20 6d 65 73 73 61 67  with this messag
0440: 65 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  e...  /// </para
0450: 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  m>..  /// <param
0460: 20 6e 61 6d 65 3d 22 70 4d 65 73 73 61 67 65 22   name="pMessage"
0470: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 6d 65 73  >..  /// The mes
0480: 73 61 67 65 20 73 74 72 69 6e 67 20 74 6f 20 62  sage string to b
0490: 65 20 6c 6f 67 67 65 64 2e 0d 0a 20 20 2f 2f 2f  e logged...  ///
04a0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 23 69 66 20 21   </param>..#if !
04b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
04c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 5b 55 6e  FRAMEWORK..  [Un
04d0: 6d 61 6e 61 67 65 64 46 75 6e 63 74 69 6f 6e 50  managedFunctionP
04e0: 6f 69 6e 74 65 72 28 43 61 6c 6c 69 6e 67 43 6f  ointer(CallingCo
04f0: 6e 76 65 6e 74 69 6f 6e 2e 43 64 65 63 6c 29 5d  nvention.Cdecl)]
0500: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 69 6e 74 65  ..#endif..  inte
0510: 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f  rnal delegate vo
0520: 69 64 20 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c  id SQLiteLogCall
0530: 62 61 63 6b 28 49 6e 74 50 74 72 20 70 55 73 65  back(IntPtr pUse
0540: 72 44 61 74 61 2c 20 69 6e 74 20 65 72 72 6f 72  rData, int error
0550: 43 6f 64 65 2c 20 49 6e 74 50 74 72 20 70 4d 65  Code, IntPtr pMe
0560: 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f  ssage);....  ///
0570: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f   <summary>..  //
0580: 2f 20 54 68 69 73 20 63 6c 61 73 73 20 69 6d 70  / This class imp
0590: 6c 65 6d 65 6e 74 73 20 53 51 4c 69 74 65 42 61  lements SQLiteBa
05a0: 73 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2c 20 61  se completely, a
05b0: 6e 64 20 69 73 20 74 68 65 20 67 75 74 73 20 6f  nd is the guts o
05c0: 66 20 74 68 65 20 63 6f 64 65 20 74 68 61 74 20  f the code that 
05d0: 69 6e 74 65 72 6f 70 27 73 20 53 51 4c 69 74 65  interop's SQLite
05e0: 20 77 69 74 68 20 2e 4e 45 54 0d 0a 20 20 2f 2f   with .NET..  //
05f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0600: 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 53  internal class S
0610: 51 4c 69 74 65 33 20 3a 20 53 51 4c 69 74 65 42  QLite3 : SQLiteB
0620: 61 73 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 70 72  ase..  {..    pr
0630: 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a  ivate static obj
0640: 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e  ect syncRoot = n
0650: 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 0d 0a  ew object();....
0660: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 2f 2f 20 4e      //..    // N
0670: 4f 54 45 3a 20 54 68 69 73 20 69 73 20 74 68 65  OTE: This is the
0680: 20 70 75 62 6c 69 63 20 6b 65 79 20 66 6f 72 20   public key for 
0690: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
06a0: 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 2e  SQLite assembly.
06b0: 20 20 49 66 20 79 6f 75 20 63 68 61 6e 67 65 20    If you change 
06c0: 74 68 65 0d 0a 20 20 20 20 2f 2f 20 20 20 20 20  the..    //     
06d0: 20 20 53 4e 4b 20 66 69 6c 65 2c 20 79 6f 75 20    SNK file, you 
06e0: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 63 68 61  will need to cha
06f0: 6e 67 65 20 74 68 69 73 20 61 73 20 77 65 6c 6c  nge this as well
0700: 2e 0d 0a 20 20 20 20 2f 2f 0d 0a 20 20 20 20 69  ...    //..    i
0710: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74  nternal const st
0720: 72 69 6e 67 20 50 75 62 6c 69 63 4b 65 79 20 3d  ring PublicKey =
0730: 0d 0a 20 20 20 20 20 20 20 20 22 30 30 32 34 30  ..        "00240
0740: 30 30 30 30 34 38 30 30 30 30 30 39 34 30 30 30  0000480000094000
0750: 30 30 30 30 36 30 32 30 30 30 30 30 30 32 34 30  0000602000000240
0760: 30 30 30 35 32 35 33 34 31 33 31 30 30 30 34 30  0005253413100040
0770: 30 30 30 30 31 30 30 30 31 30 30 30 35 61 32 38  0000100010005a28
0780: 38 64 65 35 36 38 37 63 34 65 31 22 20 2b 0d 0a  8de5687c4e1" +..
0790: 20 20 20 20 20 20 20 20 22 62 36 32 31 64 64 66          "b621ddf
07a0: 66 35 64 38 34 34 37 32 37 34 31 38 39 35 36 39  f5d8447274189569
07b0: 39 37 66 34 37 35 65 62 38 32 39 34 32 39 65 34  97f475eb829429e4
07c0: 31 31 61 66 66 33 65 39 33 66 39 37 62 37 30 64  11aff3e93f97b70d
07d0: 65 36 39 38 62 39 37 32 36 34 30 39 32 35 62 64  e698b972640925bd
07e0: 64 34 34 32 38 30 64 66 30 22 20 2b 0d 0a 20 20  d44280df0" +..  
07f0: 20 20 20 20 20 20 22 61 32 35 61 38 34 33 32 36        "a25a84326
0800: 36 39 37 33 37 30 34 31 33 37 63 62 62 30 65 37  6973704137cbb0e7
0810: 34 34 31 63 31 66 65 37 63 61 65 34 65 32 34 34  441c1fe7cae4e244
0820: 30 61 65 39 31 61 62 38 63 64 65 33 39 33 33 66  0ae91ab8cde3933f
0830: 65 62 63 62 31 61 63 34 38 64 64 33 33 62 34 30  ebcb1ac48dd33b40
0840: 65 31 33 63 34 32 31 22 20 2b 0d 0a 20 20 20 20  e13c421" +..    
0850: 20 20 20 20 22 64 38 32 31 35 63 31 38 61 34 33      "d8215c18a43
0860: 34 39 61 34 33 36 64 64 34 39 39 65 33 63 33 38  49a436dd499e3c38
0870: 35 63 63 36 38 33 30 31 35 66 38 38 36 66 36 63  5cc683015f886f6c
0880: 31 30 62 64 39 30 31 31 35 65 62 32 62 64 36 31  10bd90115eb2bd61
0890: 62 36 37 37 35 30 38 33 39 65 33 61 31 39 39 34  b67750839e3a1994
08a0: 31 64 63 39 63 22 3b 0d 0a 0d 0a 23 69 66 20 21  1dc9c";....#if !
08b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
08c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 69  FRAMEWORK..    i
08d0: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74  nternal const st
08e0: 72 69 6e 67 20 44 65 73 69 67 6e 65 72 56 65 72  ring DesignerVer
08f0: 73 69 6f 6e 20 3d 20 22 31 2e 30 2e 39 37 2e 30  sion = "1.0.97.0
0900: 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  ";..#endif....  
0910: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0920: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 70 61  .    /// The opa
0930: 71 75 65 20 70 6f 69 6e 74 65 72 20 72 65 74 75  que pointer retu
0940: 72 6e 65 64 20 74 6f 20 75 73 20 62 79 20 74 68  rned to us by th
0950: 65 20 73 71 6c 69 74 65 20 70 72 6f 76 69 64 65  e sqlite provide
0960: 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  r..    /// </sum
0970: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0980: 63 74 65 64 20 69 6e 74 65 72 6e 61 6c 20 53 51  cted internal SQ
0990: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
09a0: 6e 64 6c 65 20 5f 73 71 6c 3b 0d 0a 20 20 20 20  ndle _sql;..    
09b0: 70 72 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67  protected string
09c0: 20 5f 66 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20   _fileName;..   
09d0: 20 70 72 6f 74 65 63 74 65 64 20 62 6f 6f 6c 20   protected bool 
09e0: 5f 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 70  _usePool;..    p
09f0: 72 6f 74 65 63 74 65 64 20 69 6e 74 20 5f 70 6f  rotected int _po
0a00: 6f 6c 56 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 23 69  olVersion;....#i
0a10: 66 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54  f (NET_35 || NET
0a20: 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c  _40 || NET_45 ||
0a30: 20 4e 45 54 5f 34 35 31 29 20 26 26 20 21 50 4c   NET_451) && !PL
0a40: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
0a50: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 70 72 69  AMEWORK..    pri
0a60: 76 61 74 65 20 62 6f 6f 6c 20 5f 62 75 69 6c 64  vate bool _build
0a70: 69 6e 67 53 63 68 65 6d 61 3b 0d 0a 23 65 6e 64  ingSchema;..#end
0a80: 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  if....    /// <s
0a90: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
0aa0: 20 54 68 65 20 75 73 65 72 2d 64 65 66 69 6e 65   The user-define
0ab0: 64 20 66 75 6e 63 74 69 6f 6e 73 20 72 65 67 69  d functions regi
0ac0: 73 74 65 72 65 64 20 6f 6e 20 74 68 69 73 20 63  stered on this c
0ad0: 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f  onnection..    /
0ae0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0af0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 4c 69 73     protected Lis
0b00: 74 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  t<SQLiteFunction
0b10: 3e 20 5f 66 75 6e 63 74 69 6f 6e 73 3b 0d 0a 0d  > _functions;...
0b20: 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52  .#if INTEROP_VIR
0b30: 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20  TUAL_TABLE..    
0b40: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0b50: 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c     /// The modul
0b60: 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
0b70: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
0b80: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
0b90: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0ba0: 63 74 65 64 20 44 69 63 74 69 6f 6e 61 72 79 3c  cted Dictionary<
0bb0: 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f  string, SQLiteMo
0bc0: 64 75 6c 65 3e 20 5f 6d 6f 64 75 6c 65 73 3b 0d  dule> _modules;.
0bd0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
0be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0c40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0c50: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ry>..    /// Con
0c60: 73 74 72 75 63 74 73 20 74 68 65 20 6f 62 6a 65  structs the obje
0c70: 63 74 20 75 73 65 64 20 74 6f 20 69 6e 74 65 72  ct used to inter
0c80: 61 63 74 20 77 69 74 68 20 74 68 65 20 53 51 4c  act with the SQL
0c90: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
0ca0: 0d 0a 20 20 20 20 2f 2f 2f 20 75 73 69 6e 67 20  ..    /// using 
0cb0: 74 68 65 20 55 54 46 2d 38 20 74 65 78 74 20 65  the UTF-8 text e
0cc0: 6e 63 6f 64 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f  ncoding...    //
0cd0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0ce0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
0cf0: 65 3d 22 66 6d 74 22 3e 0d 0a 20 20 20 20 2f 2f  e="fmt">..    //
0d00: 2f 20 54 68 65 20 44 61 74 65 54 69 6d 65 20 66  / The DateTime f
0d10: 6f 72 6d 61 74 20 74 6f 20 62 65 20 75 73 65 64  ormat to be used
0d20: 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67   when converting
0d30: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 73 20 74   string values t
0d40: 6f 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 44 61 74  o a..    /// Dat
0d50: 65 54 69 6d 65 20 61 6e 64 20 62 69 6e 64 69 6e  eTime and bindin
0d60: 67 20 44 61 74 65 54 69 6d 65 20 70 61 72 61 6d  g DateTime param
0d70: 65 74 65 72 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  eters...    /// 
0d80: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0d90: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6b  / <param name="k
0da0: 69 6e 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ind">..    /// T
0db0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 61  he <see cref="Da
0dc0: 74 65 54 69 6d 65 4b 69 6e 64 22 20 2f 3e 20 74  teTimeKind" /> t
0dd0: 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63  o be used when c
0de0: 72 65 61 74 69 6e 67 20 44 61 74 65 54 69 6d 65  reating DateTime
0df0: 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73  ..    /// values
0e00: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
0e10: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
0e20: 72 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 53 74 72  ram name="fmtStr
0e30: 69 6e 67 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ing">..    /// T
0e40: 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
0e50: 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
0e60: 20 70 61 72 73 69 6e 67 20 61 6e 64 20 66 6f 72   parsing and for
0e70: 6d 61 74 74 69 6e 67 20 44 61 74 65 54 69 6d 65  matting DateTime
0e80: 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73  ..    /// values
0e90: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
0ea0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
0eb0: 72 61 6d 20 6e 61 6d 65 3d 22 64 62 22 3e 0d 0a  ram name="db">..
0ec0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
0ed0: 76 65 20 68 61 6e 64 6c 65 20 74 6f 20 62 65 20  ve handle to be 
0ee0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
0ef0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
0f00: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
0f10: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
0f20: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
0f30: 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20  "fileName">..   
0f40: 20 2f 2f 2f 20 54 68 65 20 66 75 6c 6c 79 20 71   /// The fully q
0f50: 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61  ualified file na
0f60: 6d 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  me associated wi
0f70: 74 68 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d  th <paramref nam
0f80: 65 3d 22 64 62 20 22 2f 3e 2e 0d 0a 20 20 20 20  e="db "/>...    
0f90: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
0fa0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
0fb0: 65 3d 22 6f 77 6e 48 61 6e 64 6c 65 22 3e 0d 0a  e="ownHandle">..
0fc0: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
0fd0: 20 69 66 20 74 68 65 20 6e 65 77 6c 79 20 63 72   if the newly cr
0fe0: 65 61 74 65 64 20 6f 62 6a 65 63 74 20 69 6e 73  eated object ins
0ff0: 74 61 6e 63 65 20 77 69 6c 6c 20 6e 65 65 64 20  tance will need 
1000: 74 6f 20 64 69 73 70 6f 73 65 0d 0a 20 20 20 20  to dispose..    
1010: 2f 2f 2f 20 6f 66 20 3c 70 61 72 61 6d 72 65 66  /// of <paramref
1020: 20 6e 61 6d 65 3d 22 64 62 22 20 2f 3e 20 77 68   name="db" /> wh
1030: 65 6e 20 69 74 20 69 73 20 6e 6f 20 6c 6f 6e 67  en it is no long
1040: 65 72 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20  er needed...    
1050: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1060: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
1070: 65 33 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  e3(..        SQL
1080: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66  iteDateFormats f
1090: 6d 74 2c 0d 0a 20 20 20 20 20 20 20 20 44 61 74  mt,..        Dat
10a0: 65 54 69 6d 65 4b 69 6e 64 20 6b 69 6e 64 2c 0d  eTimeKind kind,.
10b0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
10c0: 66 6d 74 53 74 72 69 6e 67 2c 0d 0a 20 20 20 20  fmtString,..    
10d0: 20 20 20 20 49 6e 74 50 74 72 20 64 62 2c 0d 0a      IntPtr db,..
10e0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
10f0: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
1100: 20 20 62 6f 6f 6c 20 6f 77 6e 48 61 6e 64 6c 65    bool ownHandle
1110: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
1120: 20 20 20 3a 20 62 61 73 65 28 66 6d 74 2c 20 6b     : base(fmt, k
1130: 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e 67 29 0d  ind, fmtString).
1140: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
1150: 69 66 20 28 64 62 20 21 3d 20 49 6e 74 50 74 72  if (db != IntPtr
1160: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
1170: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  {..            _
1180: 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  sql = new SQLite
1190: 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
11a0: 28 64 62 2c 20 6f 77 6e 48 61 6e 64 6c 65 29 3b  (db, ownHandle);
11b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 66  ..            _f
11c0: 69 6c 65 4e 61 6d 65 20 3d 20 66 69 6c 65 4e 61  ileName = fileNa
11d0: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
11e0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
11f0: 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75  ion.OnChanged(nu
1200: 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69  ll, new Connecti
1210: 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  onEventArgs(..  
1220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
1230: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  LiteConnectionEv
1240: 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69  entType.NewCriti
1250: 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c  calHandle, null,
1260: 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
1270: 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75          null, nu
1280: 6c 6c 2c 20 5f 73 71 6c 2c 20 66 69 6c 65 4e 61  ll, _sql, fileNa
1290: 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  me, new object[]
12a0: 20 7b 20 66 6d 74 2c 20 6b 69 6e 64 2c 0d 0a 20   { fmt, kind,.. 
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
12c0: 6d 74 53 74 72 69 6e 67 2c 20 64 62 2c 20 66 69  mtString, db, fi
12d0: 6c 65 4e 61 6d 65 2c 20 6f 77 6e 48 61 6e 64 6c  leName, ownHandl
12e0: 65 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  e }));..        
12f0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1360: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49  ...    #region I
1370: 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
1380: 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
1390: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64    private bool d
13a0: 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 70 72  isposed;..    pr
13b0: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
13c0: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
13d0: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 23  row */..    {..#
13e0: 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50  if THROW_ON_DISP
13f0: 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20 69 66  OSED..        if
1400: 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20   (disposed)..   
1410: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1420: 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65  ew ObjectDispose
1430: 64 45 78 63 65 70 74 69 6f 6e 28 74 79 70 65 6f  dException(typeo
1440: 66 28 53 51 4c 69 74 65 33 29 2e 4e 61 6d 65 29  f(SQLite3).Name)
1450: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
1460: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
1470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70  ///////....    p
14d0: 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64  rotected overrid
14e0: 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  e void Dispose(b
14f0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
1500: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
1510: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
1520: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1530: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
1540: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1550: 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20 28            //if (
1560: 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
1570: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b 0d              //{.
1580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1590: 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f   //    /////////
15a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
15c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
15d0: 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
15e0: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
15f0: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
1600: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f           //    /
1610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1630: 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
1640: 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20       //}....    
1650: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1680: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1690: 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75      // release u
16a0: 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63  nmanaged resourc
16b0: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
16c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
16d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f  //....#if INTERO
1700: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
1710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1720: 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 73 28   DisposeModules(
1730: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
1740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6c                Cl
1750: 6f 73 65 28 66 61 6c 73 65 29 3b 20 2f 2a 20 44  ose(false); /* D
1760: 69 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e 6f 74  isposing, cannot
1770: 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a 20 20 20 20   throw. */..    
1780: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1790: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
17a0: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b  nally..        {
17b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61  ..            ba
17c0: 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73 70 6f  se.Dispose(dispo
17d0: 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sing);....      
17e0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
17f0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 45        // NOTE: E
1800: 76 65 72 79 74 68 69 6e 67 20 73 68 6f 75 6c 64  verything should
1810: 20 62 65 20 66 75 6c 6c 79 20 64 69 73 70 6f 73   be fully dispos
1820: 65 64 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74  ed at this point
1830: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1840: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  /..            d
1850: 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d  isposed = true;.
1860: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1870: 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
1880: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
1890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20  ////////....#if 
18f0: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
1900: 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c  TABLE..    /// <
1910: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1920: 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 61 74  / This method at
1930: 74 65 6d 70 74 73 20 74 6f 20 64 69 73 70 6f 73  tempts to dispos
1940: 65 20 6f 66 20 61 6c 6c 20 74 68 65 20 3c 73 65  e of all the <se
1950: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f  e cref="SQLiteMo
1960: 64 75 6c 65 22 20 2f 3e 20 64 65 72 69 76 65 64  dule" /> derived
1970: 0d 0a 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63 74  ..    /// object
1980: 20 69 6e 73 74 61 6e 63 65 73 20 63 75 72 72 65   instances curre
1990: 6e 74 6c 79 20 61 73 73 6f 63 69 61 74 65 64 20  ntly associated 
19a0: 77 69 74 68 20 74 68 65 20 6e 61 74 69 76 65 20  with the native 
19b0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
19c0: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
19d0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
19e0: 69 76 61 74 65 20 76 6f 69 64 20 44 69 73 70 6f  ivate void Dispo
19f0: 73 65 4d 6f 64 75 6c 65 73 28 29 0d 0a 20 20 20  seModules()..   
1a00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a   {..        //..
1a10: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1a20: 20 49 66 20 61 6e 79 20 6d 6f 64 75 6c 65 73 20   If any modules 
1a30: 77 65 72 65 20 63 72 65 61 74 65 64 2c 20 61 74  were created, at
1a40: 74 65 6d 70 74 20 74 6f 20 64 69 73 70 6f 73 65  tempt to dispose
1a50: 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   of..        // 
1a60: 20 20 20 20 20 20 74 68 65 6d 20 6e 6f 77 2e 20        them now. 
1a70: 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 64 65   This code is de
1a80: 73 69 67 6e 65 64 20 74 6f 20 61 76 6f 69 64 20  signed to avoid 
1a90: 74 68 72 6f 77 69 6e 67 0d 0a 20 20 20 20 20 20  throwing..      
1aa0: 20 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70    //       excep
1ab0: 74 69 6f 6e 73 20 75 6e 6c 65 73 73 20 74 68 65  tions unless the
1ac0: 20 44 69 73 70 6f 73 65 20 6d 65 74 68 6f 64 20   Dispose method 
1ad0: 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 0d 0a 20  of the module.. 
1ae0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1af0: 69 74 73 65 6c 66 20 74 68 72 6f 77 73 20 61 6e  itself throws an
1b00: 20 65 78 63 65 70 74 69 6f 6e 2e 0d 0a 20 20 20   exception...   
1b10: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1b20: 20 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20 21 3d   if (_modules !=
1b30: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1b40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  {..            f
1b50: 6f 72 65 61 63 68 20 28 4b 65 79 56 61 6c 75 65  oreach (KeyValue
1b60: 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 53 51 4c  Pair<string, SQL
1b70: 69 74 65 4d 6f 64 75 6c 65 3e 20 70 61 69 72 20  iteModule> pair 
1b80: 69 6e 20 5f 6d 6f 64 75 6c 65 73 29 0d 0a 20 20  in _modules)..  
1b90: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
1bb0: 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65  iteModule module
1bc0: 20 3d 20 70 61 69 72 2e 56 61 6c 75 65 3b 0d 0a   = pair.Value;..
1bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1be0: 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
1bf0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1c00: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
1c10: 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
1c20: 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44          module.D
1c30: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
1c40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1c50: 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73          _modules
1c60: 2e 43 6c 65 61 72 28 29 3b 0d 0a 20 20 20 20 20  .Clear();..     
1c70: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e     }..    }..#en
1c80: 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  dif....    /////
1c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1cf0: 20 20 2f 2f 20 49 74 20 69 73 6e 27 74 20 6e 65    // It isn't ne
1d00: 63 65 73 73 61 72 79 20 74 6f 20 63 6c 65 61 6e  cessary to clean
1d10: 75 70 20 61 6e 79 20 66 75 6e 63 74 69 6f 6e 73  up any functions
1d20: 20 77 65 27 76 65 20 72 65 67 69 73 74 65 72 65   we've registere
1d30: 64 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 6e 65  d.  If the conne
1d40: 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 20 67 6f  ction..    // go
1d50: 65 73 20 74 6f 20 74 68 65 20 70 6f 6f 6c 20 61  es to the pool a
1d60: 6e 64 20 69 73 20 72 65 73 75 72 72 65 63 74 65  nd is resurrecte
1d70: 64 20 6c 61 74 65 72 2c 20 72 65 2d 72 65 67 69  d later, re-regi
1d80: 73 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73  stered functions
1d90: 20 77 69 6c 6c 20 6f 76 65 72 77 72 69 74 65 20   will overwrite 
1da0: 74 68 65 0d 0a 20 20 20 20 2f 2f 20 70 72 65 76  the..    // prev
1db0: 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 2e 20  ious functions. 
1dc0: 20 54 68 65 20 53 51 4c 69 74 65 46 75 6e 63 74   The SQLiteFunct
1dd0: 69 6f 6e 43 6f 6f 6b 69 65 48 61 6e 64 6c 65 20  ionCookieHandle 
1de0: 77 69 6c 6c 20 74 61 6b 65 20 63 61 72 65 20 6f  will take care o
1df0: 66 20 66 72 65 65 69 6e 67 20 75 6e 6d 61 6e 61  f freeing unmana
1e00: 67 65 64 0d 0a 20 20 20 20 2f 2f 20 72 65 73 6f  ged..    // reso
1e10: 75 72 63 65 73 20 62 65 6c 6f 6e 67 69 6e 67 20  urces belonging 
1e20: 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c  to the previousl
1e30: 79 2d 72 65 67 69 73 74 65 72 65 64 20 66 75 6e  y-registered fun
1e40: 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 69 6e 74  ctions...    int
1e50: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
1e60: 6f 69 64 20 43 6c 6f 73 65 28 62 6f 6f 6c 20 63  oid Close(bool c
1e70: 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d  anThrow)..    {.
1e80: 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20  .      if (_sql 
1e90: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
1ea0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
1eb0: 28 21 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c 65  (!_sql.OwnHandle
1ec0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
1ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
1ee0: 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ql = null;..    
1ef0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1f00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
1f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
1f20: 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20  _usePool)..     
1f30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f40: 20 20 20 20 20 20 69 66 20 28 53 51 4c 69 74 65        if (SQLite
1f50: 42 61 73 65 2e 52 65 73 65 74 43 6f 6e 6e 65 63  Base.ResetConnec
1f60: 74 69 6f 6e 28 5f 73 71 6c 2c 20 5f 73 71 6c 2c  tion(_sql, _sql,
1f70: 20 63 61 6e 54 68 72 6f 77 29 29 0d 0a 20 20 20   canThrow))..   
1f80: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69             {..#i
1f90: 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  f INTEROP_VIRTUA
1fa0: 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20  L_TABLE..       
1fb0: 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f             Dispo
1fc0: 73 65 4d 6f 64 75 6c 65 73 28 29 3b 0d 0a 23 65  seModules();..#e
1fd0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
1fe0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1ff0: 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41  ConnectionPool.A
2000: 64 64 28 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 73  dd(_fileName, _s
2010: 71 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e  ql, _poolVersion
2020: 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  );....#if !NET_C
2030: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
2040: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
2050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2060: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
2070: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
2080: 43 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 53 75 63  Close (Pool) Suc
2090: 63 65 73 73 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c  cess: {0}", _sql
20a0: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
20b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69             }..#i
20c0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
20d0: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
20e0: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
20f0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
2100: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2120: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74  ace.WriteLine(St
2130: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43 6c 6f  ring.Format("Clo
2140: 73 65 20 28 50 6f 6f 6c 29 20 46 61 69 6c 75 72  se (Pool) Failur
2150: 65 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29 29 3b  e: {0}", _sql));
2160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2170: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
2180: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2190: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
21a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21b0: 20 20 20 5f 73 71 6c 2e 44 69 73 70 6f 73 65 28     _sql.Dispose(
21c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
21d0: 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20  .          _sql 
21e0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d  = null;..      }
21f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
2200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2260: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
2270: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74  ry>..    /// Att
2280: 65 6d 70 74 73 20 74 6f 20 69 6e 74 65 72 72 75  empts to interru
2290: 70 74 20 74 68 65 20 71 75 65 72 79 20 63 75 72  pt the query cur
22a0: 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
22b0: 20 6f 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74   on the associat
22c0: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69  ed..    /// nati
22d0: 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ve database conn
22e0: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
22f0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2300: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
2310: 64 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28 29  de void Cancel()
2320: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 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 69 6e 74 20 6d 61 78 69 6d  .      int maxim
7880: 75 6d 52 65 74 72 69 65 73 20 3d 20 28 63 6e 6e  umRetries = (cnn
7890: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e   != null) ? cnn.
78a0: 5f 70 72 65 70 61 72 65 52 65 74 72 69 65 73 20  _prepareRetries 
78b0: 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  : SQLiteConnecti
78c0: 6f 6e 2e 44 65 66 61 75 6c 74 50 72 65 70 61 72  on.DefaultPrepar
78d0: 65 52 65 74 72 69 65 73 3b 0d 0a 20 20 20 20 20  eRetries;..     
78e0: 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54   byte[] b = ToUT
78f0: 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20 20  F8(strSql);..   
7900: 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 64 65     string typede
7910: 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  fs = null;..    
7920: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
7930: 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  t cmd = null;.. 
7940: 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20       Random rnd 
7950: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75  = null;..      u
7960: 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20  int starttick = 
7970: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
7980: 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a  t.TickCount;....
7990: 20 20 20 20 20 20 47 43 48 61 6e 64 6c 65 20 68        GCHandle h
79a0: 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e 64 6c 65  andle = GCHandle
79b0: 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48 61 6e 64  .Alloc(b, GCHand
79c0: 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64 29 3b 0d  leType.Pinned);.
79d0: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 73  .      IntPtr ps
79e0: 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41 64 64 72  ql = handle.Addr
79f0: 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63 74 28 29  OfPinnedObject()
7a00: 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53  ;..      SQLiteS
7a10: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 73  tatementHandle s
7a20: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d  tatementHandle =
7a30: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 74 72   null;..      tr
7a40: 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  y..      {..    
7a50: 20 20 20 20 77 68 69 6c 65 20 28 28 6e 20 3d 3d      while ((n ==
7a60: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
7a70: 2e 53 63 68 65 6d 61 20 7c 7c 20 6e 20 3d 3d 20  .Schema || n == 
7a80: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
7a90: 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53  Locked || n == S
7aa0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42  QLiteErrorCode.B
7ab0: 75 73 79 29 20 26 26 20 72 65 74 72 69 65 73 20  usy) && retries 
7ac0: 3c 20 6d 61 78 69 6d 75 6d 52 65 74 72 69 65 73  < maximumRetries
7ad0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
7ae0: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
7af0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7b00: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
7b10: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
7b20: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6e  }..          fin
7b30: 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68  ally /* NOTE: Th
7b40: 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f  read.Abort() pro
7b50: 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20  tection. */..   
7b60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7b70: 20 20 20 20 20 20 73 74 6d 74 20 3d 20 49 6e 74        stmt = Int
7b80: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
7b90: 20 20 20 20 20 20 20 70 74 72 20 3d 20 49 6e 74         ptr = Int
7ba0: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 23 69 66  Ptr.Zero;....#if
7bb0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
7bc0: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  D..            l
7bd0: 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  en = 0;..       
7be0: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
7bf0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
7c00: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74  ite3_prepare_int
7c10: 65 72 6f 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c  erop(_sql, psql,
7c20: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72   b.Length - 1, r
7c30: 65 66 20 73 74 6d 74 2c 20 72 65 66 20 70 74 72  ef stmt, ref ptr
7c40: 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c  , ref len);..#el
7c50: 73 65 0d 0a 23 69 66 20 55 53 45 5f 50 52 45 50  se..#if USE_PREP
7c60: 41 52 45 5f 56 32 0d 0a 20 20 20 20 20 20 20 20  ARE_V2..        
7c70: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
7c80: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
7c90: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 5f  te3_prepare_v2(_
7ca0: 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e  sql, psql, b.Len
7cb0: 67 74 68 20 2d 20 31 2c 20 72 65 66 20 73 74 6d  gth - 1, ref stm
7cc0: 74 2c 20 72 65 66 20 70 74 72 29 3b 0d 0a 23 65  t, ref ptr);..#e
7cd0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
7ce0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
7cf0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7d00: 5f 70 72 65 70 61 72 65 28 5f 73 71 6c 2c 20 70  _prepare(_sql, p
7d10: 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  sql, b.Length - 
7d20: 31 2c 20 72 65 66 20 73 74 6d 74 2c 20 72 65 66  1, ref stmt, ref
7d30: 20 70 74 72 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a   ptr);..#endif..
7d40: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20              len 
7d50: 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  = -1;..#endif...
7d60: 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
7d70: 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 53 54  T_20 && TRACE_ST
7d80: 41 54 45 4d 45 4e 54 0d 0a 20 20 20 20 20 20 20  ATEMENT..       
7d90: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
7da0: 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Line(String.Form
7db0: 61 74 28 22 50 72 65 70 61 72 65 20 28 7b 30 7d  at("Prepare ({0}
7dc0: 29 3a 20 7b 31 7d 22 2c 20 6e 2c 20 73 74 6d 74  ): {1}", n, stmt
7dd0: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  ));..#endif.... 
7de0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
7df0: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
7e00: 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 73 74 6d  Code.Ok) && (stm
7e10: 74 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  t != IntPtr.Zero
7e20: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
7e30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7e40: 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61   if (statementHa
7e50: 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 73 74  ndle != null) st
7e60: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2e 44 69  atementHandle.Di
7e70: 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  spose();..      
7e80: 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
7e90: 74 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51  tHandle = new SQ
7ea0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
7eb0: 64 6c 65 28 5f 73 71 6c 2c 20 73 74 6d 74 29 3b  dle(_sql, stmt);
7ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7ed0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
7ee0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
7ef0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d  atementHandle !=
7f00: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7f10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7f20: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7f30: 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c  n.OnChanged(null
7f40: 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e  , new Connection
7f50: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
7f60: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
7f70: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
7f80: 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48  ype.NewCriticalH
7f90: 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c  andle, null, nul
7fa0: 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
7fb0: 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 73 74    null, null, st
7fc0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73  atementHandle, s
7fd0: 74 72 53 71 6c 2c 20 6e 65 77 20 6f 62 6a 65 63  trSql, new objec
7fe0: 74 5b 5d 20 7b 20 63 6e 6e 2c 0d 0a 20 20 20 20  t[] { cnn,..    
7ff0: 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c            strSql
8000: 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65  , previous, time
8010: 6f 75 74 4d 53 20 7d 29 29 3b 0d 0a 20 20 20 20  outMS }));..    
8020: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8030: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
8040: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63  LiteErrorCode.Sc
8050: 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 20 20 20  hema)..         
8060: 20 20 20 72 65 74 72 69 65 73 2b 2b 3b 0d 0a 20     retries++;.. 
8070: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
8080: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
8090: 6f 72 43 6f 64 65 2e 45 72 72 6f 72 29 0d 0a 20  orCode.Error).. 
80a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
80b0: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
80c0: 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c 61  ng.Compare(GetLa
80d0: 73 74 45 72 72 6f 72 28 29 2c 20 22 6e 65 61 72  stError(), "near
80e0: 20 5c 22 54 59 50 45 53 5c 22 3a 20 73 79 6e 74   \"TYPES\": synt
80f0: 61 78 20 65 72 72 6f 72 22 2c 20 53 74 72 69 6e  ax error", Strin
8100: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
8110: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
8120: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
8130: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8140: 20 20 20 69 6e 74 20 70 6f 73 20 3d 20 73 74 72     int pos = str
8150: 53 71 6c 2e 49 6e 64 65 78 4f 66 28 27 3b 27 29  Sql.IndexOf(';')
8160: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8170: 20 69 66 20 28 70 6f 73 20 3d 3d 20 2d 31 29 20   if (pos == -1) 
8180: 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 4c 65 6e  pos = strSql.Len
8190: 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20  gth - 1;....    
81a0: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 64 65            typede
81b0: 66 73 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73  fs = strSql.Subs
81c0: 74 72 69 6e 67 28 30 2c 20 70 6f 73 20 2b 20 31  tring(0, pos + 1
81d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
81e0: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71    strSql = strSq
81f0: 6c 2e 53 75 62 73 74 72 69 6e 67 28 70 6f 73 20  l.Substring(pos 
8200: 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  + 1);....       
8210: 20 20 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e         strRemain
8220: 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20 20 20 20 20   = "";....      
8230: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 63          while (c
8240: 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74  md == null && st
8250: 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29  rSql.Length > 0)
8260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8270: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8280: 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65     cmd = Prepare
8290: 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72  (cnn, strSql, pr
82a0: 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d  evious, timeoutM
82b0: 53 2c 20 72 65 66 20 73 74 72 52 65 6d 61 69 6e  S, ref strRemain
82c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
82d0: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
82e0: 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20  Remain;..       
82f0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8300: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6d            if (cm
8310: 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  d != null)..    
8320: 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e              cmd.
8330: 53 65 74 54 79 70 65 73 28 74 79 70 65 64 65 66  SetTypes(typedef
8340: 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  s);....         
8350: 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b       return cmd;
8360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
8370: 0a 23 69 66 20 28 4e 45 54 5f 33 35 20 7c 7c 20  .#if (NET_35 || 
8380: 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35  NET_40 || NET_45
8390: 20 7c 7c 20 4e 45 54 5f 34 35 31 29 20 26 26 20   || NET_451) && 
83a0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
83b0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
83c0: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
83d0: 28 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61  (_buildingSchema
83e0: 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72   == false && Str
83f0: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c  ing.Compare(GetL
8400: 61 73 74 45 72 72 6f 72 28 29 2c 20 30 2c 20 22  astError(), 0, "
8410: 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 54  no such table: T
8420: 45 4d 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c 20  EMP.SCHEMA", 0, 
8430: 32 36 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  26, StringCompar
8440: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
8450: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
8460: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8470: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52              strR
8480: 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 20 20 20  emain = "";..   
8490: 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c             _buil
84a0: 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 74 72 75  dingSchema = tru
84b0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
84c0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
84d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
84e0: 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 53          ISQLiteS
84f0: 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 20  chemaExtensions 
8500: 65 78 74 20 3d 20 28 28 49 53 65 72 76 69 63 65  ext = ((IService
8510: 50 72 6f 76 69 64 65 72 29 53 51 4c 69 74 65 46  Provider)SQLiteF
8520: 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65 29  actory.Instance)
8530: 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70 65  .GetService(type
8540: 6f 66 28 49 53 51 4c 69 74 65 53 63 68 65 6d 61  of(ISQLiteSchema
8550: 45 78 74 65 6e 73 69 6f 6e 73 29 29 20 61 73 20  Extensions)) as 
8560: 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74  ISQLiteSchemaExt
8570: 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20  ensions;....    
8580: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8590: 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ext != null)..  
85a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85b0: 65 78 74 2e 42 75 69 6c 64 54 65 6d 70 53 63 68  ext.BuildTempSch
85c0: 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20 20  ema(cnn);....   
85d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
85e0: 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20  le (cmd == null 
85f0: 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68  && strSql.Length
8600: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
8610: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8620: 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 20              cmd 
8630: 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73  = Prepare(cnn, s
8640: 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c  trSql, previous,
8650: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20   timeoutMS, ref 
8660: 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20  strRemain);..   
8670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8680: 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69  trSql = strRemai
8690: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
86a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
86b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
86c0: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  cmd;..          
86d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
86e0: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
8710: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d  buildingSchema =
8720: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
8730: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
8740: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
8750: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
8760: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
8770: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
8780: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
8790: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
87a0: 43 6f 64 65 2e 42 75 73 79 29 20 2f 2f 20 4c 6f  Code.Busy) // Lo
87b0: 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61 20  cked -- delay a 
87c0: 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65 66  small amount bef
87d0: 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20 20  ore retrying..  
87e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
87f0: 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74         // Keep t
8800: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
8810: 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75     if (rnd == nu
8820: 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d  ll) // First tim
8830: 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65  e we've encounte
8840: 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20  red the lock..  
8850: 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64 20              rnd 
8860: 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d  = new Random();.
8870: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
8880: 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65 65  / If we've excee
8890: 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27  ded the command'
88a0: 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20  s timeout, give 
88b0: 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20  up and throw an 
88c0: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
88d0: 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76     if ((uint)Env
88e0: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
88f0: 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e  nt - starttick >
8900: 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20   timeoutMS)..   
8910: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8920: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
8930: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
8940: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
8950: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
8960: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
8970: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
8980: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8990: 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72 77         // Otherw
89a0: 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61 20  ise sleep for a 
89b0: 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66  random amount of
89c0: 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30 6d   time up to 150m
89d0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
89e0: 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e   System.Threadin
89f0: 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28 72  g.Thread.Sleep(r
8a00: 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29 29  nd.Next(1, 150))
8a10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8a20: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
8a30: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8a40: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
8a50: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
8a60: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
8a70: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
8a80: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
8a90: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 52 65 6d  ..        strRem
8aa0: 61 69 6e 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ain = UTF8ToStri
8ab0: 6e 67 28 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a 0d  ng(ptr, len);...
8ac0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61  .        if (sta
8ad0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20  tementHandle != 
8ae0: 6e 75 6c 6c 29 20 63 6d 64 20 3d 20 6e 65 77 20  null) cmd = new 
8af0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 28  SQLiteStatement(
8b00: 74 68 69 73 2c 20 66 6c 61 67 73 2c 20 73 74 61  this, flags, sta
8b10: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74  tementHandle, st
8b20: 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30  rSql.Substring(0
8b30: 2c 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  , strSql.Length 
8b40: 2d 20 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67  - strRemain.Leng
8b50: 74 68 29 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d  th), previous);.
8b60: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
8b70: 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d  n cmd;..      }.
8b80: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a  .      finally..
8b90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8ba0: 20 68 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d   handle.Free();.
8bb0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
8bc0: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
8bd0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67   static void Log
8be0: 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65  Bind(SQLiteState
8bf0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
8c00: 65 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  e, int index).. 
8c10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
8c20: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
8c30: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
8c40: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
8c50: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
8c60: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
8c70: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
8c80: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
8c90: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
8ca0: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
8cb0: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
8cc0: 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e 2e   #{1} as NULL...
8cd0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
8ce0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
8cf0: 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  dex));..    }...
8d00: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
8d10: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
8d20: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
8d30: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
8d40: 20 69 6e 74 20 69 6e 64 65 78 2c 20 56 61 6c 75   int index, Valu
8d50: 65 54 79 70 65 20 76 61 6c 75 65 29 0d 0a 20 20  eType value)..  
8d60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
8d70: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
8d80: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
8d90: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
8da0: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
8db0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
8dc0: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
8dd0: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
8de0: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74  ramter #{1} as t
8df0: 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c  ype {2} with val
8e00: 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d  ue {{{3}}}...",.
8e10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e  .            han
8e20: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
8e30: 2c 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28  , value.GetType(
8e40: 29 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20  ), value));..   
8e50: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74   }....    privat
8e60: 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
8e70: 46 6f 72 6d 61 74 44 61 74 65 54 69 6d 65 28 44  FormatDateTime(D
8e80: 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a  ateTime value)..
8e90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
8ea0: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73  tringBuilder res
8eb0: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
8ec0: 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20  Builder();....  
8ed0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
8ee0: 65 6e 64 28 76 61 6c 75 65 2e 54 6f 53 74 72 69  end(value.ToStri
8ef0: 6e 67 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48  ng("yyyy-MM-ddTH
8f00: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b  H:mm:ss.FFFFFFFK
8f10: 22 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  "));..        re
8f20: 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29  sult.Append(' ')
8f30: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c  ;..        resul
8f40: 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b  t.Append(value.K
8f50: 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  ind);..        r
8f60: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27  esult.Append(' '
8f70: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
8f80: 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e  lt.Append(value.
8f90: 54 69 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  Ticks);....     
8fa0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
8fb0: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
8fc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
8fd0: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
8fe0: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
8ff0: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
9000: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
9010: 2c 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65  , DateTime value
9020: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9030: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
9040: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
9050: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
9060: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
9070: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
9080: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
9090: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
90a0: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
90b0: 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74   as type {2} wit
90c0: 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e  h value {{{3}}}.
90d0: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
90e0: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
90f0: 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61  index, typeof(Da
9100: 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44  teTime), FormatD
9110: 61 74 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29  ateTime(value)))
9120: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9130: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
9140: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
9150: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
9160: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
9170: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61  index, string va
9180: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
9190: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
91a0: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
91b0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
91c0: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
91d0: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
91e0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  (..            "
91f0: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
9200: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
9210: 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20  {1} as type {2} 
9220: 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d  with value {{{3}
9230: 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  }}...",..       
9240: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
9250: 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66  r, index, typeof
9260: 28 53 74 72 69 6e 67 29 2c 20 28 76 61 6c 75 65  (String), (value
9270: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75   != null) ? valu
9280: 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d  e : "<null>"));.
9290: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
92a0: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
92b0: 69 6e 67 20 54 6f 48 65 78 61 64 65 63 69 6d 61  ing ToHexadecima
92c0: 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20  lString(..      
92d0: 20 20 62 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a    byte[] array..
92e0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
92f0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72  ..        if (ar
9300: 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ray == null)..  
9310: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9320: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
9330: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
9340: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
9350: 69 6e 67 42 75 69 6c 64 65 72 28 61 72 72 61 79  ingBuilder(array
9360: 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d  .Length * 2);...
9370: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  .        int len
9380: 67 74 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67  gth = array.Leng
9390: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  th;....        f
93a0: 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
93b0: 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74  0; index < lengt
93c0: 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20  h; index++)..   
93d0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
93e0: 41 70 70 65 6e 64 28 61 72 72 61 79 5b 69 6e 64  Append(array[ind
93f0: 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78 32  ex].ToString("x2
9400: 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "));....        
9410: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f  return result.To
9420: 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d  String();..    }
9430: 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ....    protecte
9440: 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f  d static void Lo
9450: 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74  gBind(SQLiteStat
9460: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
9470: 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62  le, int index, b
9480: 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20  yte[] value)..  
9490: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
94a0: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
94b0: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
94c0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
94d0: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
94e0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
94f0: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
9500: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
9510: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74  ramter #{1} as t
9520: 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c  ype {2} with val
9530: 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d  ue {{{3}}}...",.
9540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e  .            han
9550: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
9560: 2c 20 74 79 70 65 6f 66 28 42 79 74 65 5b 5d 29  , typeof(Byte[])
9570: 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c  , (value != null
9580: 29 20 3f 20 54 6f 48 65 78 61 64 65 63 69 6d 61  ) ? ToHexadecima
9590: 6c 53 74 72 69 6e 67 28 76 61 6c 75 65 29 20 3a  lString(value) :
95a0: 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20   "<null>"));..  
95b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
95c0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
95d0: 64 20 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53 51  d Bind_Double(SQ
95e0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
95f0: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
9600: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
9610: 20 69 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75 62   int index, doub
9620: 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  le value)..    {
9630: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
9640: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
9650: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
9660: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20  qlite_stmt;.... 
9670: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
9680: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
9690: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
96a0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
96b0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
96c0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
96d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
96e0: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
96f0: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
9700: 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50       }....#if !P
9710: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
9720: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
9730: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
9740: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
9750: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9760: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61  3_bind_double(ha
9770: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
9780: 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
9790: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
97a0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
97b0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
97c0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
97d0: 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c  lite3_bind_doubl
97e0: 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  e_interop(handle
97f0: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
9800: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
9810: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
9820: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
9830: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
9840: 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  f..        if (n
9850: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
9860: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
9870: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
9880: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
9890: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
98a0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
98b0: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
98c0: 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74  Int32(SQLiteStat
98d0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
98e0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
98f0: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
9900: 65 78 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a  ex, int value)..
9910: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
9920: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
9930: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
9940: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
9950: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
9960: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
9970: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
9980: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
9990: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
99a0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
99b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
99c0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
99d0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
99e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
99f0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
9a00: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
9a10: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9a20: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
9a30: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
9a40: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
9a50: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
9a60: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
9a70: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
9a80: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
9a90: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
9aa0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
9ab0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
9ac0: 42 69 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c 69  Bind_UInt32(SQLi
9ad0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
9ae0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
9af0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
9b00: 6e 74 20 69 6e 64 65 78 2c 20 75 69 6e 74 20 76  nt index, uint v
9b10: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
9b20: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
9b30: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
9b40: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
9b50: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21  e_stmt;....#if !
9b60: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
9b70: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
9b80: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
9b90: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
9ba0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
9bb0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
9bc0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
9bd0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
9be0: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
9bf0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
9c00: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
9c10: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
9c20: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
9c30: 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20  rCode n;....    
9c40: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
9c50: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
9c60: 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74 33  nFlags.BindUInt3
9c70: 32 41 73 49 6e 74 36 34 29 20 3d 3d 20 53 51 4c  2AsInt64) == SQL
9c80: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
9c90: 67 73 2e 42 69 6e 64 55 49 6e 74 33 32 41 73 49  gs.BindUInt32AsI
9ca0: 6e 74 36 34 29 0d 0a 20 20 20 20 20 20 20 20 7b  nt64)..        {
9cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f  ..            lo
9cc0: 6e 67 20 76 61 6c 75 65 32 20 3d 20 76 61 6c 75  ng value2 = valu
9cd0: 65 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  e;....#if !PLATF
9ce0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
9cf0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
9d00: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
9d10: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9d20: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e  3_bind_int64(han
9d30: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
9d40: 65 32 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  e2);..#elif !SQL
9d50: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
9d60: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
9d70: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9d80: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
9d90: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
9da0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
9db0: 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 73 65 0d  value2);..#else.
9dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
9dd0: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
9de0: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
9df0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
9e00: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
9e10: 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  se..        {.. 
9e20: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
9e30: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9e40: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
9e50: 75 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64  uint(handle, ind
9e60: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
9e70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
9e80: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
9e90: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
9ea0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
9eb0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
9ec0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
9ed0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
9ee0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
9ef0: 42 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74  Bind_Int64(SQLit
9f00: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
9f10: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
9f20: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
9f30: 74 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61  t index, long va
9f40: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
9f50: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
9f60: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
9f70: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
9f80: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
9f90: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
9fa0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
9fb0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
9fc0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
9fd0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
9fe0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
9ff0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
a000: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
a010: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
a020: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
a030: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
a040: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
a050: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
a060: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
a070: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
a080: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
a090: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
a0a0: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
a0b0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
a0c0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
a0d0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
a0e0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a0f0: 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72  bind_int64_inter
a100: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
a110: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
a120: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
a130: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
a140: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
a150: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
a160: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
a170: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
a180: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
a190: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
a1a0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
a1b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
a1c0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
a1d0: 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 36 34 28  oid Bind_UInt64(
a1e0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
a1f0: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
a200: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
a210: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 6c  s, int index, ul
a220: 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ong value)..    
a230: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
a240: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
a250: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
a260: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
a270: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
a280: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
a290: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
a2a0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
a2b0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
a2c0: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
a2d0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
a2e0: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
a2f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
a300: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
a310: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
a320: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a330: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
a340: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
a350: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a360: 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 28 68  e3_bind_uint64(h
a370: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
a380: 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
a390: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
a3a0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
a3b0: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
a3c0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a3d0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74  qlite3_bind_uint
a3e0: 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  64_interop(handl
a3f0: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
a400: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
a410: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
a420: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
a430: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
a440: 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  if..        if (
a450: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
a460: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
a470: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
a480: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
a490: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
a4a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
a4b0: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
a4c0: 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74  _Text(SQLiteStat
a4d0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
a4e0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
a4f0: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
a500: 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ex, string value
a510: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
a520: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
a530: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
a540: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
a550: 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  mt;....#if !PLAT
a560: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
a570: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
a580: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
a590: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
a5a0: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
a5b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
a5c0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
a5d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a5e0: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
a5f0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
a600: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
a610: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
a620: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
a630: 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 23  TF8(value);....#
a640: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
a650: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
a660: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
a670: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
a680: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
a690: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
a6a0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
a6b0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
a6c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
a6d0: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
a6e0: 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20  ex, b);..       
a6f0: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
a700: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
a710: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
a720: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
a730: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
a740: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
a750: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
a760: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
a770: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
a780: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
a790: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
a7a0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
a7b0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
a7c0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
a7d0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a7e0: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74  de void Bind_Dat
a7f0: 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eTime(SQLiteStat
a800: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
a810: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
a820: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
a830: 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29  ex, DateTime dt)
a840: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
a850: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
a860: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
a870: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
a880: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
a890: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
a8a0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
a8b0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
a8c0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
a8d0: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
a8e0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
a8f0: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
a900: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a910: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
a920: 6c 65 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d  le, index, dt);.
a930: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
a940: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  if....        if
a950: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
a960: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
a970: 2e 42 69 6e 64 44 61 74 65 54 69 6d 65 57 69 74  .BindDateTimeWit
a980: 68 4b 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  hKind) == SQLite
a990: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
a9a0: 42 69 6e 64 44 61 74 65 54 69 6d 65 57 69 74 68  BindDateTimeWith
a9b0: 4b 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Kind)..        {
a9c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
a9d0: 20 28 28 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64   ((_datetimeKind
a9e0: 20 21 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64   != DateTimeKind
a9f0: 2e 55 6e 73 70 65 63 69 66 69 65 64 29 20 26 26  .Unspecified) &&
aa00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aa10: 20 20 28 64 74 2e 4b 69 6e 64 20 21 3d 20 44 61    (dt.Kind != Da
aa20: 74 65 54 69 6d 65 4b 69 6e 64 2e 55 6e 73 70 65  teTimeKind.Unspe
aa30: 63 69 66 69 65 64 29 20 26 26 0d 0a 20 20 20 20  cified) &&..    
aa40: 20 20 20 20 20 20 20 20 20 20 20 20 28 64 74 2e              (dt.
aa50: 4b 69 6e 64 20 21 3d 20 5f 64 61 74 65 74 69 6d  Kind != _datetim
aa60: 65 4b 69 6e 64 29 29 0d 0a 20 20 20 20 20 20 20  eKind))..       
aa70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
aa80: 20 20 20 20 20 20 20 20 69 66 20 28 5f 64 61 74          if (_dat
aa90: 65 74 69 6d 65 4b 69 6e 64 20 3d 3d 20 44 61 74  etimeKind == Dat
aaa0: 65 54 69 6d 65 4b 69 6e 64 2e 55 74 63 29 0d 0a  eTimeKind.Utc)..
aab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aac0: 20 20 20 20 64 74 20 3d 20 64 74 2e 54 6f 55 6e      dt = dt.ToUn
aad0: 69 76 65 72 73 61 6c 54 69 6d 65 28 29 3b 0d 0a  iversalTime();..
aae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aaf0: 65 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74 69  else if (_dateti
ab00: 6d 65 4b 69 6e 64 20 3d 3d 20 44 61 74 65 54 69  meKind == DateTi
ab10: 6d 65 4b 69 6e 64 2e 4c 6f 63 61 6c 29 0d 0a 20  meKind.Local).. 
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab30: 20 20 20 64 74 20 3d 20 64 74 2e 54 6f 4c 6f 63     dt = dt.ToLoc
ab40: 61 6c 54 69 6d 65 28 29 3b 0d 0a 20 20 20 20 20  alTime();..     
ab50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ab60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73    }....        s
ab70: 77 69 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65  witch (_datetime
ab80: 46 6f 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20  Format)..       
ab90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
aba0: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
abb0: 6f 72 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20  ormats.Ticks:.. 
abc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
abd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
abe0: 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65        long value
abf0: 20 3d 20 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a   = dt.Ticks;....
ac00: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
ac10: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
ac20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac30: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
ac40: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
ac50: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
ac60: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
ac70: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
ac80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ac90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acb0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
acc0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
acd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ace0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
acf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
ad00: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
ad10: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
ad20: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
ad30: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
ad40: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
ad50: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
ad60: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
ad80: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
ad90: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
ada0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
adb0: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
adc0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
add0: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
ade0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
adf0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
ae00: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
ae10: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
ae20: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
ae30: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
ae40: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
ae50: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
ae60: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
ae70: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
ae80: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
ae90: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
aea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aeb0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
aec0: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
aed0: 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61  Formats.JulianDa
aee0: 79 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y:..            
aef0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
af00: 20 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c             doubl
af10: 65 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69  e value = ToJuli
af20: 61 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 23 69  anDay(dt);....#i
af30: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
af40: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
af50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af60: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
af70: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
af80: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
af90: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
afa0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
afb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
afc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
afd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afe0: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
aff0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
b000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b010: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
b020: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
b030: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
b040: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
b050: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
b060: 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c  d_double(handle,
b070: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
b080: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
b090: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
b0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
b0b0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
b0c0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
b0d0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
b0e0: 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  d_double_interop
b0f0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
b100: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
b110: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
b120: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
b130: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
b140: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
b150: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
b160: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
b170: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
b180: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
b190: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
b1a0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
b1b0: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
b1c0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
b1d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b1e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
b1f0: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
b200: 46 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63  Formats.UnixEpoc
b210: 68 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h:..            
b220: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b230: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
b240: 76 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e  value = Convert.
b250: 54 6f 49 6e 74 36 34 28 64 74 2e 53 75 62 74 72  ToInt64(dt.Subtr
b260: 61 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54  act(UnixEpoch).T
b270: 6f 74 61 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d  otalSeconds);...
b280: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
b290: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
b2a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b2b0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
b2c0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
b2d0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
b2e0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
b2f0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
b300: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
b310: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b330: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
b340: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
b350: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
b360: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
b370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b380: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
b390: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
b3a0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b3b0: 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c  bind_int64(handl
b3c0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
b3d0: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
b3e0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
b400: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
b410: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
b420: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
b430: 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ind_int64_intero
b440: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
b450: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
b460: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
b470: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
b480: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
b490: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
b4a0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
b4b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
b4c0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
b4d0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
b4e0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
b4f0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
b500: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
b510: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
b520: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
b530: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
b540: 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20    default:..    
b550: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b570: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
b580: 55 54 46 38 28 64 74 29 3b 0d 0a 0d 0a 23 69 66  UTF8(dt);....#if
b590: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
b5a0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
b5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5c0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
b5d0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
b5e0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
b5f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
b600: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
b610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b620: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
b640: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
b650: 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20  ndex, b);..     
b660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
b670: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
b680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b690: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
b6a0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
b6b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b6c0: 62 69 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c 65  bind_text(handle
b6d0: 2c 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65  , index, b, b.Le
b6e0: 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74  ngth - 1, (IntPt
b6f0: 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  r)(-1));..      
b700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
b710: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
b720: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
b730: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
b740: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
b750: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
b760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
b770: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
b780: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
b790: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
b7a0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b7b0: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 42 6c 6f  de void Bind_Blo
b7c0: 62 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  b(SQLiteStatemen
b7d0: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
b7e0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
b7f0: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
b800: 62 79 74 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29  byte[] blobData)
b810: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
b820: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
b830: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
b840: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
b850: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
b860: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
b870: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
b880: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
b890: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
b8a0: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
b8b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
b8c0: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
b8d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b8e0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
b8f0: 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44  le, index, blobD
b900: 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ata);..        }
b910: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
b920: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
b930: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
b940: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b950: 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 68 61  te3_bind_blob(ha
b960: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f  ndle, index, blo
b970: 62 44 61 74 61 2c 20 62 6c 6f 62 44 61 74 61 2e  bData, blobData.
b980: 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29  Length, (IntPtr)
b990: 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  (-1));..        
b9a0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
b9b0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
b9c0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
b9d0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
b9e0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
b9f0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
ba00: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
ba10: 42 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65  Bind_Null(SQLite
ba20: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
ba30: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
ba40: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
ba50: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
ba60: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
ba70: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
ba80: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
ba90: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
baa0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
bab0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
bac0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
bad0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
bae0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
baf0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
bb00: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
bb10: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
bb20: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
bb30: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
bb40: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
bb50: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
bb60: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
bb70: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
bb80: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
bb90: 5f 62 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c  _bind_null(handl
bba0: 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  e, index);..    
bbb0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
bbc0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
bbd0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
bbe0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
bbf0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
bc00: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
bc10: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
bc20: 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75  nt Bind_ParamCou
bc30: 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nt(SQLiteStateme
bc40: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
bc50: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
bc60: 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  lags)..    {..  
bc70: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
bc80: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
bc90: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
bca0: 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20  e_stmt;..       
bcb0: 20 69 6e 74 20 76 61 6c 75 65 20 3d 20 55 6e 73   int value = Uns
bcc0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
bcd0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
bce0: 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 68 61  rameter_count(ha
bcf0: 6e 64 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndle);....      
bd00: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
bd10: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
bd20: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
bd30: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
bd40: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
bd50: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
bd60: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
bd70: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
bd80: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
bd90: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
bda0: 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67  ogMessage(String
bdb0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
bdc0: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
bdd0: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
bde0: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
bdf0: 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e         "Statemen
be00: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 63  t {0} paramter c
be10: 6f 75 6e 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a  ount is {1}.",..
be20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be30: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 76 61  handleIntPtr, va
be40: 6c 75 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  lue));..        
be50: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
be60: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
be70: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
be80: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
be90: 67 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65  g Bind_ParamName
bea0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
beb0: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
bec0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
bed0: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  gs, int index)..
bee0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
bef0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
bf00: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
bf10: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
bf20: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
bf30: 20 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53   name;....#if !S
bf40: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
bf50: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20          int len 
bf60: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 6e 61  = 0;..        na
bf70: 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  me = UTF8ToStrin
bf80: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
bf90: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
bfa0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
bfb0: 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  e_interop(handle
bfc0: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e  , index, ref len
bfd0: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
bfe0: 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20  .        name = 
bff0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
c000: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c010: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
c020: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 68 61 6e  rameter_name(han
c030: 64 6c 65 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  dle, index), -1)
c040: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
c050: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
c060: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
c070: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
c080: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
c090: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
c0a0: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
c0b0: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
c0c0: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
c0d0: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
c0e0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
c0f0: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72  g.LogMessage(Str
c100: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
c110: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
c120: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
c130: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
c140: 20 20 20 20 20 20 20 20 20 20 22 53 74 61 74 65            "State
c150: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
c160: 72 20 23 7b 31 7d 20 6e 61 6d 65 20 69 73 20 7b  r #{1} name is {
c170: 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20 20  {{2}}}.",..     
c180: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
c190: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
c1a0: 6e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20 20  name));..       
c1b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
c1c0: 74 75 72 6e 20 6e 61 6d 65 3b 0d 0a 20 20 20 20  turn name;..    
c1d0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
c1e0: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42  l override int B
c1f0: 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78 28 53  ind_ParamIndex(S
c200: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
c210: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
c220: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
c230: 2c 20 73 74 72 69 6e 67 20 70 61 72 61 6d 4e 61  , string paramNa
c240: 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  me)..    {..    
c250: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
c260: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
c270: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
c280: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69  stmt;..        i
c290: 6e 74 20 69 6e 64 65 78 20 3d 20 55 6e 73 61 66  nt index = Unsaf
c2a0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c2b0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
c2c0: 6d 65 74 65 72 5f 69 6e 64 65 78 28 68 61 6e 64  meter_index(hand
c2d0: 6c 65 2c 20 54 6f 55 54 46 38 28 70 61 72 61 6d  le, ToUTF8(param
c2e0: 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name));....     
c2f0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
c300: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
c310: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
c320: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
c330: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
c340: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
c350: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
c360: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
c370: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
c380: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
c390: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
c3a0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
c3b0: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
c3c0: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
c3d0: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
c3e0: 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65          "Stateme
c3f0: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
c400: 69 6e 64 65 78 20 6f 66 20 6e 61 6d 65 20 7b 7b  index of name {{
c410: 7b 31 7d 7d 7d 20 69 73 20 23 7b 32 7d 2e 22 2c  {1}}} is #{2}.",
c420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c430: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
c440: 70 61 72 61 6d 4e 61 6d 65 2c 20 69 6e 64 65 78  paramName, index
c450: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
c460: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
c470: 20 69 6e 64 65 78 3b 0d 0a 20 20 20 20 7d 0d 0a   index;..    }..
c480: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
c490: 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75  verride int Colu
c4a0: 6d 6e 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74  mnCount(SQLiteSt
c4b0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20  atement stmt).. 
c4c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
c4d0: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
c4e0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
c4f0: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73 74 6d 74  olumn_count(stmt
c500: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
c510: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
c520: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
c530: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d  string ColumnNam
c540: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
c550: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
c560: 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
c570: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
c580: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d  .      int len =
c590: 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74   0;..      IntPt
c5a0: 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  r p = UnsafeNati
c5b0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
c5c0: 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e  3_column_name_in
c5d0: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
c5e0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
c5f0: 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  ref len);..#else
c600: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
c610: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
c620: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
c630: 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e  olumn_name(stmt.
c640: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
c650: 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  dex);..#endif.. 
c660: 20 20 20 20 20 69 66 20 28 70 20 3d 3d 20 49 6e       if (p == In
c670: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
c680: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
c690: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 53 51  LiteException(SQ
c6a0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f  LiteErrorCode.No
c6b0: 4d 65 6d 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  Mem, GetLastErro
c6c0: 72 28 29 29 3b 0d 0a 23 69 66 20 21 53 51 4c 49  r());..#if !SQLI
c6d0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
c6e0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
c6f0: 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d  String(p, len);.
c700: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
c710: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
c720: 67 28 70 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  g(p, -1);..#endi
c730: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
c740: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
c750: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 43  e TypeAffinity C
c760: 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 53 51  olumnAffinity(SQ
c770: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
c780: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
c790: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
c7a0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
c7b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
c7c0: 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d 74  column_type(stmt
c7d0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
c7e0: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ndex);..    }...
c7f0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
c800: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f  erride string Co
c810: 6c 75 6d 6e 54 79 70 65 28 53 51 4c 69 74 65 53  lumnType(SQLiteS
c820: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
c830: 6e 74 20 69 6e 64 65 78 2c 20 72 65 66 20 54 79  nt index, ref Ty
c840: 70 65 41 66 66 69 6e 69 74 79 20 6e 41 66 66 69  peAffinity nAffi
c850: 6e 69 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nity)..    {..  
c860: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69      int len;..#i
c870: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
c880: 52 44 0d 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20  RD..      len = 
c890: 30 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  0;..      IntPtr
c8a0: 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   p = UnsafeNativ
c8b0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c8c0: 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
c8d0: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
c8e0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
c8f0: 78 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65  x, ref len);..#e
c900: 6c 73 65 0d 0a 20 20 20 20 20 20 6c 65 6e 20 3d  lse..      len =
c910: 20 2d 31 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50   -1;..      IntP
c920: 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  tr p = UnsafeNat
c930: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
c940: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
c950: 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  pe(stmt._sqlite_
c960: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23  stmt, index);..#
c970: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 6e 41 66  endif..      nAf
c980: 66 69 6e 69 74 79 20 3d 20 43 6f 6c 75 6d 6e 41  finity = ColumnA
c990: 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e  ffinity(stmt, in
c9a0: 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  dex);....      i
c9b0: 66 20 28 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a  f (p != IntPtr.Z
c9c0: 65 72 6f 29 20 72 65 74 75 72 6e 20 55 54 46 38  ero) return UTF8
c9d0: 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29  ToString(p, len)
c9e0: 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  ;..      else.. 
c9f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ca00: 73 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74  string[] ar = st
ca10: 6d 74 2e 54 79 70 65 44 65 66 69 6e 69 74 69 6f  mt.TypeDefinitio
ca20: 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ns;..        if 
ca30: 28 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  (ar != null)..  
ca40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ca50: 20 20 20 69 66 20 28 69 6e 64 65 78 20 3c 20 61     if (index < a
ca60: 72 2e 4c 65 6e 67 74 68 20 26 26 20 61 72 5b 69  r.Length && ar[i
ca70: 6e 64 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ndex] != null)..
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
ca90: 72 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20  rn ar[index];.. 
caa0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
cab0: 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
cac0: 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  Empty;....      
cad0: 20 20 2f 2f 73 77 69 74 63 68 20 28 6e 41 66 66    //switch (nAff
cae0: 69 6e 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20  inity)..        
caf0: 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  //{..        // 
cb00: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
cb10: 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20  ty.Int64:..     
cb20: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
cb30: 22 42 49 47 49 4e 54 22 3b 0d 0a 20 20 20 20 20  "BIGINT";..     
cb40: 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65     //  case Type
cb50: 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a  Affinity.Double:
cb60: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
cb70: 72 65 74 75 72 6e 20 22 44 4f 55 42 4c 45 22 3b  return "DOUBLE";
cb80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61  ..        //  ca
cb90: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
cba0: 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 2f  Blob:..        /
cbb0: 2f 20 20 20 20 72 65 74 75 72 6e 20 22 42 4c 4f  /    return "BLO
cbc0: 42 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  B";..        // 
cbd0: 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
cbe0: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
cbf0: 22 54 45 58 54 22 3b 0d 0a 20 20 20 20 20 20 20  "TEXT";..       
cc00: 20 2f 2f 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20   //}..      }.. 
cc10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
cc20: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
cc30: 74 20 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51  t ColumnIndex(SQ
cc40: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
cc50: 6d 74 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d  mt, string colum
cc60: 6e 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  nName)..    {.. 
cc70: 20 20 20 20 20 69 6e 74 20 78 20 3d 20 43 6f 6c       int x = Col
cc80: 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d  umnCount(stmt);.
cc90: 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e  ...      for (in
cca0: 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20  t n = 0; n < x; 
ccb0: 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  n++)..      {.. 
ccc0: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
ccd0: 67 2e 43 6f 6d 70 61 72 65 28 63 6f 6c 75 6d 6e  g.Compare(column
cce0: 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65  Name, ColumnName
ccf0: 28 73 74 6d 74 2c 20 6e 29 2c 20 53 74 72 69 6e  (stmt, n), Strin
cd00: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
cd10: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
cd20: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
cd30: 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20  return n;..     
cd40: 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   }..      return
cd50: 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   -1;..    }.... 
cd60: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
cd70: 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75  ride string Colu
cd80: 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53  mnOriginalName(S
cd90: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
cda0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
cdb0: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
cdc0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
cdd0: 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
cde0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
cdf0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
ce00: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
ce10: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
ce20: 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72  rigin_name_inter
ce30: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
ce40: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66  stmt, index, ref
ce50: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
ce60: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
ce70: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
ce80: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
ce90: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
cea0: 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74  n_origin_name(st
ceb0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
cec0: 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23   index), -1);..#
ced0: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
cee0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
cef0: 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
cf00: 75 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65 28  umnDatabaseName(
cf10: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
cf20: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
cf30: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
cf40: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
cf50: 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30       int len = 0
cf60: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
cf70: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
cf80: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
cf90: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
cfa0: 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69 6e  database_name_in
cfb0: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
cfc0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
cfd0: 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  ref len), len);.
cfe0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
cff0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
d000: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
d010: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
d020: 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
d030: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
d040: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
d050: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
d060: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
d070: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
d080: 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d  g ColumnTableNam
d090: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
d0a0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
d0b0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
d0c0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
d0d0: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d  .      int len =
d0e0: 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72   0;..      retur
d0f0: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
d100: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
d110: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
d120: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74  n_table_name_int
d130: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
d140: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72  e_stmt, index, r
d150: 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ef len), len);..
d160: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
d170: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
d180: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
d190: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
d1a0: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73  umn_table_name(s
d1b0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
d1c0: 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a  , index), -1);..
d1d0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
d1e0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d1f0: 65 72 72 69 64 65 20 76 6f 69 64 20 43 6f 6c 75  erride void Colu
d200: 6d 6e 4d 65 74 61 44 61 74 61 28 73 74 72 69 6e  mnMetaData(strin
d210: 67 20 64 61 74 61 42 61 73 65 2c 20 73 74 72 69  g dataBase, stri
d220: 6e 67 20 74 61 62 6c 65 2c 20 73 74 72 69 6e 67  ng table, string
d230: 20 63 6f 6c 75 6d 6e 2c 20 72 65 66 20 73 74 72   column, ref str
d240: 69 6e 67 20 64 61 74 61 54 79 70 65 2c 20 72 65  ing dataType, re
d250: 66 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65  f string collate
d260: 53 65 71 75 65 6e 63 65 2c 20 72 65 66 20 62 6f  Sequence, ref bo
d270: 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20  ol notNull, ref 
d280: 62 6f 6f 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c  bool primaryKey,
d290: 20 72 65 66 20 62 6f 6f 6c 20 61 75 74 6f 49 6e   ref bool autoIn
d2a0: 63 72 65 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d  crement)..    {.
d2b0: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 64 61  .      IntPtr da
d2c0: 74 61 54 79 70 65 50 74 72 20 3d 20 49 6e 74 50  taTypePtr = IntP
d2d0: 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
d2e0: 49 6e 74 50 74 72 20 63 6f 6c 6c 53 65 71 50 74  IntPtr collSeqPt
d2f0: 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
d300: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6e 6f 74  ..      int nnot
d310: 4e 75 6c 6c 20 3d 20 30 3b 0d 0a 20 20 20 20 20  Null = 0;..     
d320: 20 69 6e 74 20 6e 70 72 69 6d 61 72 79 4b 65 79   int nprimaryKey
d330: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74   = 0;..      int
d340: 20 6e 61 75 74 6f 49 6e 63 20 3d 20 30 3b 0d 0a   nautoInc = 0;..
d350: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
d360: 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20  rCode n;..      
d370: 69 6e 74 20 64 74 4c 65 6e 3b 0d 0a 20 20 20 20  int dtLen;..    
d380: 20 20 69 6e 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a    int csLen;....
d390: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
d3a0: 44 41 52 44 0d 0a 20 20 20 20 20 20 64 74 4c 65  DARD..      dtLe
d3b0: 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 63 73  n = 0;..      cs
d3c0: 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  Len = 0;..      
d3d0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
d3e0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
d3f0: 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74  table_column_met
d400: 61 64 61 74 61 5f 69 6e 74 65 72 6f 70 28 5f 73  adata_interop(_s
d410: 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42  ql, ToUTF8(dataB
d420: 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62  ase), ToUTF8(tab
d430: 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75  le), ToUTF8(colu
d440: 6d 6e 29 2c 20 72 65 66 20 64 61 74 61 54 79 70  mn), ref dataTyp
d450: 65 50 74 72 2c 20 72 65 66 20 63 6f 6c 6c 53 65  ePtr, ref collSe
d460: 71 50 74 72 2c 20 72 65 66 20 6e 6e 6f 74 4e 75  qPtr, ref nnotNu
d470: 6c 6c 2c 20 72 65 66 20 6e 70 72 69 6d 61 72 79  ll, ref nprimary
d480: 4b 65 79 2c 20 72 65 66 20 6e 61 75 74 6f 49 6e  Key, ref nautoIn
d490: 63 2c 20 72 65 66 20 64 74 4c 65 6e 2c 20 72 65  c, ref dtLen, re
d4a0: 66 20 63 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73 65  f csLen);..#else
d4b0: 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d 20  ..      dtLen = 
d4c0: 2d 31 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e  -1;..      csLen
d4d0: 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20   = -1;....      
d4e0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
d4f0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
d500: 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74  table_column_met
d510: 61 64 61 74 61 28 5f 73 71 6c 2c 20 54 6f 55 54  adata(_sql, ToUT
d520: 46 38 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f  F8(dataBase), To
d530: 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55  UTF8(table), ToU
d540: 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66  TF8(column), ref
d550: 20 64 61 74 61 54 79 70 65 50 74 72 2c 20 72 65   dataTypePtr, re
d560: 66 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 72 65  f collSeqPtr, re
d570: 66 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20  f nnotNull, ref 
d580: 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 72 65 66  nprimaryKey, ref
d590: 20 6e 61 75 74 6f 49 6e 63 29 3b 0d 0a 23 65 6e   nautoInc);..#en
d5a0: 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  dif..      if (n
d5b0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
d5c0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
d5d0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
d5e0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
d5f0: 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 64  r());....      d
d600: 61 74 61 54 79 70 65 20 3d 20 55 54 46 38 54 6f  ataType = UTF8To
d610: 53 74 72 69 6e 67 28 64 61 74 61 54 79 70 65 50  String(dataTypeP
d620: 74 72 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20 20 20  tr, dtLen);..   
d630: 20 20 20 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e     collateSequen
d640: 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  ce = UTF8ToStrin
d650: 67 28 63 6f 6c 6c 53 65 71 50 74 72 2c 20 63 73  g(collSeqPtr, cs
d660: 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e  Len);....      n
d670: 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75  otNull = (nnotNu
d680: 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20  ll == 1);..     
d690: 20 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 28 6e   primaryKey = (n
d6a0: 70 72 69 6d 61 72 79 4b 65 79 20 3d 3d 20 31 29  primaryKey == 1)
d6b0: 3b 0d 0a 20 20 20 20 20 20 61 75 74 6f 49 6e 63  ;..      autoInc
d6c0: 72 65 6d 65 6e 74 20 3d 20 28 6e 61 75 74 6f 49  rement = (nautoI
d6d0: 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 7d  nc == 1);..    }
d6e0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
d6f0: 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65   override double
d700: 20 47 65 74 44 6f 75 62 6c 65 28 53 51 4c 69 74   GetDouble(SQLit
d710: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
d720: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
d730: 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65   {..      double
d740: 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c   value;..#if !PL
d750: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
d760: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76  AMEWORK..      v
d770: 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74  alue = UnsafeNat
d780: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d790: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  e3_column_double
d7a0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
d7b0: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c  mt, index);..#el
d7c0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
d7d0: 41 52 44 0d 0a 20 20 20 20 20 20 76 61 6c 75 65  ARD..      value
d7e0: 20 3d 20 30 2e 30 3b 0d 0a 20 20 20 20 20 20 55   = 0.0;..      U
d7f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
d800: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
d810: 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  n_double_interop
d820: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
d830: 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  mt, index, ref v
d840: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
d850: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
d860: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
d870: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
d880: 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  f..      return 
d890: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  value;..    }...
d8a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d8b0: 65 72 72 69 64 65 20 73 62 79 74 65 20 47 65 74  erride sbyte Get
d8c0: 53 42 79 74 65 28 53 51 4c 69 74 65 53 74 61 74  SByte(SQLiteStat
d8d0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
d8e0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
d8f0: 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68       return unch
d900: 65 63 6b 65 64 28 28 73 62 79 74 65 29 28 47 65  ecked((sbyte)(Ge
d910: 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64  tInt32(stmt, ind
d920: 65 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56 61  ex) & byte.MaxVa
d930: 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  lue));..    }...
d940: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d950: 65 72 72 69 64 65 20 62 79 74 65 20 47 65 74 42  erride byte GetB
d960: 79 74 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  yte(SQLiteStatem
d970: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
d980: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
d990: 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63     return unchec
d9a0: 6b 65 64 28 28 62 79 74 65 29 28 47 65 74 49 6e  ked((byte)(GetIn
d9b0: 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
d9c0: 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65   & byte.MaxValue
d9d0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
d9e0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
d9f0: 69 64 65 20 73 68 6f 72 74 20 47 65 74 49 6e 74  ide short GetInt
da00: 31 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  16(SQLiteStateme
da10: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
da20: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
da30: 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
da40: 65 64 28 28 73 68 6f 72 74 29 28 47 65 74 49 6e  ed((short)(GetIn
da50: 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
da60: 20 26 20 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c   & ushort.MaxVal
da70: 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
da80: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
da90: 72 72 69 64 65 20 75 73 68 6f 72 74 20 47 65 74  rride ushort Get
daa0: 55 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61  UInt16(SQLiteSta
dab0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
dac0: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
dad0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63        return unc
dae0: 68 65 63 6b 65 64 28 28 75 73 68 6f 72 74 29 28  hecked((ushort)(
daf0: 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69  GetInt32(stmt, i
db00: 6e 64 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d  ndex) & ushort.M
db10: 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  axValue));..    
db20: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
db30: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47  l override int G
db40: 65 74 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74  etInt32(SQLiteSt
db50: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
db60: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
db70: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
db80: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
db90: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
dba0: 5f 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  _int(stmt._sqlit
dbb0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
dbc0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
dbd0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
dbe0: 75 69 6e 74 20 47 65 74 55 49 6e 74 33 32 28 53  uint GetUInt32(S
dbf0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
dc00: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
dc10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
dc20: 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28  turn unchecked((
dc30: 75 69 6e 74 29 47 65 74 49 6e 74 33 32 28 73 74  uint)GetInt32(st
dc40: 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20  mt, index));..  
dc50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
dc60: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
dc70: 67 20 47 65 74 49 6e 74 36 34 28 53 51 4c 69 74  g GetInt64(SQLit
dc80: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
dc90: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
dca0: 20 7b 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 76   {..      long v
dcb0: 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54  alue;..#if !PLAT
dcc0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
dcd0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c  EWORK..      val
dce0: 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ue = UnsafeNativ
dcf0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
dd00: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 74  _column_int64(st
dd10: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
dd20: 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20   index);..#elif 
dd30: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
dd40: 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
dd50: 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  0;..      Unsafe
dd60: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
dd70: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
dd80: 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  64_interop(stmt.
dd90: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
dda0: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
ddb0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
ddc0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
ddd0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
dde0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
ddf0: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b     return value;
de00: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
de10: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
de20: 20 75 6c 6f 6e 67 20 47 65 74 55 49 6e 74 36 34   ulong GetUInt64
de30: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
de40: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
de50: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
de60: 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
de70: 28 28 75 6c 6f 6e 67 29 47 65 74 49 6e 74 36 34  ((ulong)GetInt64
de80: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d  (stmt, index));.
de90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
dea0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
deb0: 73 74 72 69 6e 67 20 47 65 74 54 65 78 74 28 53  string GetText(S
dec0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
ded0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
dee0: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
def0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
df00: 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
df10: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
df20: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
df30: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
df40: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
df50: 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ext_interop(stmt
df60: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
df70: 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20  ndex, ref len), 
df80: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
df90: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
dfa0: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
dfb0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
dfc0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
dfd0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
dfe0: 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20  t, index),..    
dff0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
e000: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
e010: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d  column_bytes(stm
e020: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
e030: 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66  index));..#endif
e040: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
e050: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
e060: 20 44 61 74 65 54 69 6d 65 20 47 65 74 44 61 74   DateTime GetDat
e070: 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eTime(SQLiteStat
e080: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
e090: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
e0a0: 20 20 20 20 20 69 66 20 28 5f 64 61 74 65 74 69       if (_dateti
e0b0: 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69  meFormat == SQLi
e0c0: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69  teDateFormats.Ti
e0d0: 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 72 65  cks)..        re
e0e0: 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28  turn ToDateTime(
e0f0: 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
e100: 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65  ndex), _datetime
e110: 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c  Kind);..      el
e120: 73 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65  se if (_datetime
e130: 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65  Format == SQLite
e140: 44 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69  DateFormats.Juli
e150: 61 6e 44 61 79 29 0d 0a 20 20 20 20 20 20 20 20  anDay)..        
e160: 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
e170: 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74  e(GetDouble(stmt
e180: 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74  , index), _datet
e190: 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20  imeKind);..     
e1a0: 20 65 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74   else if (_datet
e1b0: 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c  imeFormat == SQL
e1c0: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55  iteDateFormats.U
e1d0: 6e 69 78 45 70 6f 63 68 29 0d 0a 20 20 20 20 20  nixEpoch)..     
e1e0: 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65     return ToDate
e1f0: 54 69 6d 65 28 47 65 74 49 6e 74 33 32 28 73 74  Time(GetInt32(st
e200: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74  mt, index), _dat
e210: 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 0d 0a 23  etimeKind);....#
e220: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
e230: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
e240: 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72  en = 0;..      r
e250: 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65  eturn ToDateTime
e260: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
e270: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
e280: 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70  umn_text_interop
e290: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
e2a0: 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c  mt, index, ref l
e2b0: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
e2c0: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
e2d0: 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66  ToDateTime(Unsaf
e2e0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
e2f0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
e300: 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  xt(stmt._sqlite_
e310: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20  stmt, index),.. 
e320: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
e330: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
e340: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28  e3_column_bytes(
e350: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
e360: 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e  t, index));..#en
e370: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
e380: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
e390: 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65  ide long GetByte
e3a0: 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  s(SQLiteStatemen
e3b0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
e3c0: 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73  x, int nDataOffs
e3d0: 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74  et, byte[] bDest
e3e0: 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e  , int nStart, in
e3f0: 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20  t nLength)..    
e400: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65  {..      int nle
e410: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
e420: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
e430: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d  column_bytes(stm
e440: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
e450: 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  index);....     
e460: 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e   // If no destin
e470: 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65  ation buffer, re
e480: 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65  turn the size ne
e490: 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20  eded...      if 
e4a0: 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20  (bDest == null) 
e4b0: 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a  return nlen;....
e4c0: 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65        int nCopie
e4d0: 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  d = nLength;....
e4e0: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
e4f0: 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65  d + nStart > bDe
e500: 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69  st.Length) nCopi
e510: 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74  ed = bDest.Lengt
e520: 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20  h - nStart;..   
e530: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
e540: 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e   nDataOffset > n
e550: 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e  len) nCopied = n
e560: 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65  len - nDataOffse
e570: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  t;....      if (
e580: 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20  nCopied > 0)..  
e590: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
e5a0: 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61  ntPtr ptr = Unsa
e5b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e5c0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
e5d0: 6c 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  lob(stmt._sqlite
e5e0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
e5f0: 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68 61  ..        Marsha
e600: 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28  l.Copy((IntPtr)(
e610: 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20  ptr.ToInt64() + 
e620: 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44  nDataOffset), bD
e630: 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f  est, nStart, nCo
e640: 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  pied);..      }.
e650: 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20  .      else..   
e660: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43     {..        nC
e670: 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20  opied = 0;..    
e680: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
e690: 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20  urn nCopied;..  
e6a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
e6b0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
e6c0: 67 20 47 65 74 43 68 61 72 73 28 53 51 4c 69 74  g GetChars(SQLit
e6d0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
e6e0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20   int index, int 
e6f0: 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 63 68 61  nDataOffset, cha
e700: 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  r[] bDest, int n
e710: 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
e720: 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
e730: 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20    int nlen;..   
e740: 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d     int nCopied =
e750: 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20   nLength;....   
e760: 20 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d 20     string str = 
e770: 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
e780: 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e 6c 65  dex);..      nle
e790: 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68 3b 0d  n = str.Length;.
e7a0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65  ...      if (bDe
e7b0: 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75  st == null) retu
e7c0: 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20  rn nlen;....    
e7d0: 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20    if (nCopied + 
e7e0: 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c  nStart > bDest.L
e7f0: 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d  ength) nCopied =
e800: 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20   bDest.Length - 
e810: 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69  nStart;..      i
e820: 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61  f (nCopied + nDa
e830: 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29  taOffset > nlen)
e840: 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20   nCopied = nlen 
e850: 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a  - nDataOffset;..
e860: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
e870: 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  ied > 0)..      
e880: 20 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e 44 61    str.CopyTo(nDa
e890: 74 61 4f 66 66 73 65 74 2c 20 62 44 65 73 74 2c  taOffset, bDest,
e8a0: 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64   nStart, nCopied
e8b0: 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 6e  );..      else n
e8c0: 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a 20  Copied = 0;.... 
e8d0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70       return nCop
e8e0: 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ied;..    }.... 
e8f0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
e900: 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c  ride bool IsNull
e910: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
e920: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
e930: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
e940: 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e 41 66  return (ColumnAf
e950: 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64  finity(stmt, ind
e960: 65 78 29 20 3d 3d 20 54 79 70 65 41 66 66 69 6e  ex) == TypeAffin
e970: 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20 20  ity.Null);..    
e980: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
e990: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 41  l override int A
e9a0: 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28 49 6e  ggregateCount(In
e9b0: 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20  tPtr context).. 
e9c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
e9d0: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
e9e0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61  ethods.sqlite3_a
e9f0: 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74 28 63  ggregate_count(c
ea00: 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d  ontext);..    }.
ea10: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
ea20: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 72  override void Cr
ea30: 65 61 74 65 46 75 6e 63 74 69 6f 6e 28 73 74 72  eateFunction(str
ea40: 69 6e 67 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c  ing strFunction,
ea50: 20 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f 6f 6c   int nArgs, bool
ea60: 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20 53 51   needCollSeq, SQ
ea70: 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e  LiteCallback fun
ea80: 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63  c, SQLiteCallbac
ea90: 6b 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c 69  k funcstep, SQLi
eaa0: 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 20  teFinalCallback 
eab0: 66 75 6e 63 66 69 6e 61 6c 29 0d 0a 20 20 20 20  funcfinal)..    
eac0: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
ead0: 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23  rrorCode n;....#
eae0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
eaf0: 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  ARD..      n = U
eb00: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
eb10: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
eb20: 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72  e_function_inter
eb30: 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  op(_sql, ToUTF8(
eb40: 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41  strFunction), nA
eb50: 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a  rgs, 4, IntPtr.Z
eb60: 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ero, func, funcs
eb70: 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20  tep, funcfinal, 
eb80: 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20  (needCollSeq == 
eb90: 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d  true) ? 1 : 0);.
eba0: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20  .      if (n == 
ebb0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
ebc0: 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  Ok) n = UnsafeNa
ebd0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
ebe0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
ebf0: 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  ion_interop(_sql
ec00: 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63  , ToUTF8(strFunc
ec10: 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c  tion), nArgs, 1,
ec20: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
ec30: 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75  nc, funcstep, fu
ec40: 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f  ncfinal, (needCo
ec50: 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f  llSeq == true) ?
ec60: 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c 73 65 0d   1 : 0);..#else.
ec70: 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
ec80: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
ec90: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
eca0: 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55  nction(_sql, ToU
ecb0: 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29  TF8(strFunction)
ecc0: 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50  , nArgs, 4, IntP
ecd0: 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66  tr.Zero, func, f
ece0: 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
ecf0: 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  al);..      if (
ed00: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
ed10: 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73  Code.Ok) n = Uns
ed20: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
ed30: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
ed40: 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54  function(_sql, T
ed50: 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f  oUTF8(strFunctio
ed60: 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e  n), nArgs, 1, In
ed70: 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c  tPtr.Zero, func,
ed80: 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66   funcstep, funcf
ed90: 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  inal);..#endif..
eda0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
edb0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
edc0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
edd0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
ede0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
edf0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
ee00: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
ee10: 20 76 6f 69 64 20 43 72 65 61 74 65 43 6f 6c 6c   void CreateColl
ee20: 61 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72  ation(string str
ee30: 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c 69 74  Collation, SQLit
ee40: 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 2c  eCollation func,
ee50: 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e   SQLiteCollation
ee60: 20 66 75 6e 63 31 36 29 0d 0a 20 20 20 20 7b 0d   func16)..    {.
ee70: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
ee80: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
ee90: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
eea0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
eeb0: 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f  llation(_sql, To
eec0: 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f  UTF8(strCollatio
eed0: 6e 29 2c 20 32 2c 20 49 6e 74 50 74 72 2e 5a 65  n), 2, IntPtr.Ze
eee0: 72 6f 2c 20 66 75 6e 63 31 36 29 3b 0d 0a 20 20  ro, func16);..  
eef0: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
ef00: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
ef10: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
ef20: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ef30: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
ef40: 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  n(_sql, ToUTF8(s
ef50: 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 31 2c  trCollation), 1,
ef60: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
ef70: 6e 63 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  nc);..      if (
ef80: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
ef90: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
efa0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
efb0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
efc0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
efd0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
efe0: 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65  erride int Conte
eff0: 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65  xtCollateCompare
f000: 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69  (CollationEncodi
f010: 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50  ngEnum enc, IntP
f020: 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69  tr context, stri
f030: 6e 67 20 73 31 2c 20 73 74 72 69 6e 67 20 73 32  ng s1, string s2
f040: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
f050: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
f060: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b        byte[] b1;
f070: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
f080: 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d  2;..      System
f090: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63  .Text.Encoding c
f0a0: 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b  onverter = null;
f0b0: 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68  ....      switch
f0c0: 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d   (enc)..      {.
f0d0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
f0e0: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
f0f0: 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20  num.UTF8:..     
f100: 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
f110: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
f120: 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20  oding.UTF8;..   
f130: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
f140: 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
f150: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
f160: 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20  m.UTF16LE:..    
f170: 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
f180: 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
f190: 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d  coding.Unicode;.
f1a0: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
f1b0: 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
f1c0: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
f1d0: 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a  gEnum.UTF16BE:..
f1e0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
f1f0: 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
f200: 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e  t.Encoding.BigEn
f210: 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20  dianUnicode;..  
f220: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
f230: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f240: 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e   b1 = converter.
f250: 47 65 74 42 79 74 65 73 28 73 31 29 3b 0d 0a 20  GetBytes(s1);.. 
f260: 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72       b2 = conver
f270: 74 65 72 2e 47 65 74 42 79 74 65 73 28 73 32 29  ter.GetBytes(s2)
f280: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
f290: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
f2a0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
f2b0: 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72  ntext_collcompar
f2c0: 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78  e_interop(contex
f2d0: 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68  t, b1, b1.Length
f2e0: 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29  , b2, b2.Length)
f2f0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
f300: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
f310: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
f320: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
f330: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
f340: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
f350: 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43   ContextCollateC
f360: 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e  ompare(Collation
f370: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63  EncodingEnum enc
f380: 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  , IntPtr context
f390: 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20 63 68 61  , char[] c1, cha
f3a0: 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d 0a  r[] c2)..    {..
f3b0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
f3c0: 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65  DARD..      byte
f3d0: 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79  [] b1;..      by
f3e0: 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20  te[] b2;..      
f3f0: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
f400: 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d  ding converter =
f410: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
f420: 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20  switch (enc)..  
f430: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63      {..        c
f440: 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
f450: 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d  odingEnum.UTF8:.
f460: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
f470: 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
f480: 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38  xt.Encoding.UTF8
f490: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
f4a0: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
f4b0: 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
f4c0: 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a  ingEnum.UTF16LE:
f4d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
f4e0: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
f4f0: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69  ext.Encoding.Uni
f500: 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
f510: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
f520: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
f530: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31  ncodingEnum.UTF1
f540: 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  6BE:..          
f550: 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
f560: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
f570: 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64  .BigEndianUnicod
f580: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  e;..          br
f590: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  eak;..      }...
f5a0: 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76  .      b1 = conv
f5b0: 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 63  erter.GetBytes(c
f5c0: 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20  1);..      b2 = 
f5d0: 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  converter.GetByt
f5e0: 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20 20 20  es(c2);....     
f5f0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
f600: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f610: 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c  te3_context_coll
f620: 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  compare_interop(
f630: 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e  context, b1, b1.
f640: 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c  Length, b2, b2.L
f650: 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ength);..#else..
f660: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
f670: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
f680: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
f690: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
f6a0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
f6b0: 64 65 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  de CollationSequ
f6c0: 65 6e 63 65 20 47 65 74 43 6f 6c 6c 61 74 69 6f  ence GetCollatio
f6d0: 6e 53 65 71 75 65 6e 63 65 28 53 51 4c 69 74 65  nSequence(SQLite
f6e0: 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 2c 20 49  Function func, I
f6f0: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a  ntPtr context)..
f700: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
f710: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
f720: 20 20 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75     CollationSequ
f730: 65 6e 63 65 20 73 65 71 20 3d 20 6e 65 77 20 43  ence seq = new C
f740: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
f750: 28 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ();..      int l
f760: 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69  en = 0;..      i
f770: 6e 74 20 74 79 70 65 20 3d 20 30 3b 0d 0a 20 20  nt type = 0;..  
f780: 20 20 20 20 69 6e 74 20 65 6e 63 20 3d 20 30 3b      int enc = 0;
f790: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
f7a0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
f7b0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
f7c0: 6f 6e 74 65 78 74 5f 63 6f 6c 6c 73 65 71 5f 69  ontext_collseq_i
f7d0: 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20  nterop(context, 
f7e0: 72 65 66 20 74 79 70 65 2c 20 72 65 66 20 65 6e  ref type, ref en
f7f0: 63 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 0d 0a  c, ref len);....
f800: 20 20 20 20 20 20 69 66 20 28 70 20 21 3d 20 6e        if (p != n
f810: 75 6c 6c 29 20 73 65 71 2e 4e 61 6d 65 20 3d 20  ull) seq.Name = 
f820: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20  UTF8ToString(p, 
f830: 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 73 65 71  len);..      seq
f840: 2e 54 79 70 65 20 3d 20 28 43 6f 6c 6c 61 74 69  .Type = (Collati
f850: 6f 6e 54 79 70 65 45 6e 75 6d 29 74 79 70 65 3b  onTypeEnum)type;
f860: 0d 0a 20 20 20 20 20 20 73 65 71 2e 5f 66 75 6e  ..      seq._fun
f870: 63 20 3d 20 66 75 6e 63 3b 0d 0a 20 20 20 20 20  c = func;..     
f880: 20 73 65 71 2e 45 6e 63 6f 64 69 6e 67 20 3d 20   seq.Encoding = 
f890: 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69  (CollationEncodi
f8a0: 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20  ngEnum)enc;.... 
f8b0: 20 20 20 20 20 72 65 74 75 72 6e 20 73 65 71 3b       return seq;
f8c0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
f8d0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
f8e0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
f8f0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
f900: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
f910: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
f920: 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 42 79   GetParamValueBy
f930: 74 65 73 28 49 6e 74 50 74 72 20 70 2c 20 69 6e  tes(IntPtr p, in
f940: 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62  t nDataOffset, b
f950: 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74  yte[] bDest, int
f960: 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65   nStart, int nLe
f970: 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ngth)..    {..  
f980: 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55      int nlen = U
f990: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
f9a0: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
f9b0: 5f 62 79 74 65 73 28 70 29 3b 0d 0a 0d 0a 20 20  _bytes(p);....  
f9c0: 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73      // If no des
f9d0: 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c  tination buffer,
f9e0: 20 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65   return the size
f9f0: 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20   needed...      
fa00: 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c  if (bDest == nul
fa10: 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d  l) return nlen;.
fa20: 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f  ...      int nCo
fa30: 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d  pied = nLength;.
fa40: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
fa50: 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20  pied + nStart > 
fa60: 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43  bDest.Length) nC
fa70: 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65  opied = bDest.Le
fa80: 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a  ngth - nStart;..
fa90: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
faa0: 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20  d + nDataOffset 
fab0: 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20  > nlen) nCopied 
fac0: 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66  = nlen - nDataOf
fad0: 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  fset;....      i
fae0: 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d  f (nCopied > 0).
faf0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
fb00: 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55    IntPtr ptr = U
fb10: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
fb20: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
fb30: 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20 20  _blob(p);....   
fb40: 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70       Marshal.Cop
fb50: 79 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54  y((IntPtr)(ptr.T
fb60: 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61  oInt64() + nData
fb70: 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20  Offset), bDest, 
fb80: 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29  nStart, nCopied)
fb90: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
fba0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d    else..      {.
fbb0: 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64  .        nCopied
fbc0: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a   = 0;..      }..
fbd0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e  ..      return n
fbe0: 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a  Copied;..    }..
fbf0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
fc00: 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47  verride double G
fc10: 65 74 50 61 72 61 6d 56 61 6c 75 65 44 6f 75 62  etParamValueDoub
fc20: 6c 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a  le(IntPtr ptr)..
fc30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75      {..      dou
fc40: 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20  ble value;..#if 
fc50: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
fc60: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
fc70: 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65    value = Unsafe
fc80: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
fc90: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62  lite3_value_doub
fca0: 6c 65 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20  le(ptr);..#elif 
fcb0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
fcc0: 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
fcd0: 30 2e 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61  0.0;..      Unsa
fce0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
fcf0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f  sqlite3_value_do
fd00: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70 74 72  uble_interop(ptr
fd10: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
fd20: 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
fd30: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
fd40: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
fd50: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
fd60: 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20  return value;.. 
fd70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
fd80: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
fd90: 74 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49  t GetParamValueI
fda0: 6e 74 33 32 28 49 6e 74 50 74 72 20 70 74 72 29  nt32(IntPtr ptr)
fdb0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
fdc0: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
fdd0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
fde0: 33 5f 76 61 6c 75 65 5f 69 6e 74 28 70 74 72 29  3_value_int(ptr)
fdf0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
fe00: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
fe10: 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56  e long GetParamV
fe20: 61 6c 75 65 49 6e 74 36 34 28 49 6e 74 50 74 72  alueInt64(IntPtr
fe30: 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   ptr)..    {..  
fe40: 20 20 20 20 49 6e 74 36 34 20 76 61 6c 75 65 3b      Int64 value;
fe50: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
fe60: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
fe70: 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
fe80: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
fe90: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
fea0: 65 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d 0a 23  e_int64(ptr);..#
feb0: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
fec0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 76 61 6c  NDARD..      val
fed0: 75 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 55  ue = 0;..      U
fee0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
fef0: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
ff00: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 70  _int64_interop(p
ff10: 74 72 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  tr, ref value);.
ff20: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
ff30: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
ff40: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
ff50: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
ff60: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
ff70: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
ff80: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
ff90: 73 74 72 69 6e 67 20 47 65 74 50 61 72 61 6d 56  string GetParamV
ffa0: 61 6c 75 65 54 65 78 74 28 49 6e 74 50 74 72 20  alueText(IntPtr 
ffb0: 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  ptr)..    {..#if
ffc0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
ffd0: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
ffe0: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74   = 0;..      ret
fff0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
10000 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
10010 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
10020 75 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28  ue_text_interop(
10030 70 74 72 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c  ptr, ref len), l
10040 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
10050 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
10060 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
10070 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10080 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 74  e3_value_text(pt
10090 72 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73  r),..        Uns
100a0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
100b0 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  .sqlite3_value_b
100c0 79 74 65 73 28 70 74 72 29 29 3b 0d 0a 23 65 6e  ytes(ptr));..#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 54 79 70 65 41 66 66 69 6e 69 74 79  ide TypeAffinity
10100 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 79   GetParamValueTy
10110 70 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a  pe(IntPtr ptr)..
10120 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
10130 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
10140 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10150 76 61 6c 75 65 5f 74 79 70 65 28 70 74 72 29 3b  value_type(ptr);
10160 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
10170 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
10180 20 76 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f 62   void ReturnBlob
10190 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
101a0 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a   byte[] value)..
101b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
101c0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
101d0 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
101e0 62 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20 76 61  blob(context, va
101f0 6c 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74  lue, value.Lengt
10200 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  h, (IntPtr)(-1))
10210 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
10220 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
10230 65 20 76 6f 69 64 20 52 65 74 75 72 6e 44 6f 75  e void ReturnDou
10240 62 6c 65 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ble(IntPtr conte
10250 78 74 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65  xt, double value
10260 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50  )..    {..#if !P
10270 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
10280 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
10290 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
102a0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
102b0 6c 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78  lt_double(contex
102c0 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69  t, value);..#eli
102d0 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
102e0 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RD..      Unsafe
102f0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10300 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
10310 62 6c 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  ble_interop(cont
10320 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  ext, ref value);
10330 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
10340 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
10350 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
10360 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
10370 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
10380 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
10390 20 52 65 74 75 72 6e 45 72 72 6f 72 28 49 6e 74   ReturnError(Int
103a0 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72  Ptr context, str
103b0 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ing value)..    
103c0 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
103d0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
103e0 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
103f0 72 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46  r(context, ToUTF
10400 38 28 76 61 6c 75 65 29 2c 20 76 61 6c 75 65 2e  8(value), value.
10410 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d  Length);..    }.
10420 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
10430 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
10440 74 75 72 6e 49 6e 74 33 32 28 49 6e 74 50 74 72  turnInt32(IntPtr
10450 20 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 76 61   context, int va
10460 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
10470 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
10480 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
10490 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78  esult_int(contex
104a0 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  t, value);..    
104b0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
104c0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
104d0 52 65 74 75 72 6e 49 6e 74 36 34 28 49 6e 74 50  ReturnInt64(IntP
104e0 74 72 20 63 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67  tr context, long
104f0 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
10500 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
10510 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
10520 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
10530 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10540 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 63  3_result_int64(c
10550 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d  ontext, value);.
10560 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
10570 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55  TANDARD..      U
10580 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10590 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
105a0 74 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  t_int64_interop(
105b0 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c  context, ref val
105c0 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
105d0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
105e0 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
105f0 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
10600 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
10610 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10620 76 6f 69 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28  void ReturnNull(
10630 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
10640 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
10650 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10660 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
10670 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d  _null(context);.
10680 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
10690 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
106a0 76 6f 69 64 20 52 65 74 75 72 6e 54 65 78 74 28  void ReturnText(
106b0 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
106c0 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20  string value).. 
106d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 62 79 74 65     {..      byte
106e0 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61  [] b = ToUTF8(va
106f0 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 55 6e 73  lue);..      Uns
10700 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10710 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
10720 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 54 6f  text(context, To
10730 55 54 46 38 28 76 61 6c 75 65 29 2c 20 62 2e 4c  UTF8(value), b.L
10740 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50  ength - 1, (IntP
10750 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d  tr)(-1));..    }
10760 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f  ....#if INTEROP_
10770 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20  VIRTUAL_TABLE.. 
10780 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
10790 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20  ..    /// Calls 
107a0 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74  the native SQLit
107b0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69  e core library i
107c0 6e 20 6f 72 64 65 72 20 74 6f 20 63 72 65 61 74  n order to creat
107d0 65 20 61 20 64 69 73 70 6f 73 61 62 6c 65 0d 0a  e a disposable..
107e0 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20 63      /// module c
107f0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 69 6d  ontaining the im
10800 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
10810 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
10820 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
10830 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
10840 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c  aram name="modul
10850 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
10860 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 74   module object t
10870 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63  o be used when c
10880 72 65 61 74 69 6e 67 20 74 68 65 20 6e 61 74 69  reating the nati
10890 76 65 20 64 69 73 70 6f 73 61 62 6c 65 20 6d 6f  ve disposable mo
108a0 64 75 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  dule...    /// <
108b0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
108c0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c   <param name="fl
108d0 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ags">..    /// T
108e0 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65  he flags for the
108f0 20 61 73 73 6f 63 69 61 74 65 64 20 3c 73 65 65   associated <see
10900 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e   cref="SQLiteCon
10910 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65  nection" /> obje
10920 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
10930 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
10940 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10950 72 72 69 64 65 20 76 6f 69 64 20 43 72 65 61 74  rride void Creat
10960 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d 6f  eModule(SQLiteMo
10970 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51 4c  dule module, SQL
10980 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
10990 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b  gs flags)..    {
109a0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f  ..        if (mo
109b0 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
109c0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
109d0 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
109e0 6c 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75  lException("modu
109f0 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  le");....       
10a00 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
10a10 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
10a20 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 29  ags.NoLogModule)
10a30 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   != SQLiteConnec
10a40 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d  tionFlags.NoLogM
10a50 6f 64 75 6c 65 29 0d 0a 20 20 20 20 20 20 20 20  odule)..        
10a60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d  {..            m
10a70 6f 64 75 6c 65 2e 4c 6f 67 45 72 72 6f 72 73 20  odule.LogErrors 
10a80 3d 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  = ((flags & SQLi
10a90 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
10aa0 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 72 72 6f 72  s.LogModuleError
10ab0 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
10ac0 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f  ctionFlags.LogMo
10ad0 64 75 6c 65 45 72 72 6f 72 29 3b 0d 0a 20 20 20  duleError);..   
10ae0 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
10af0 4c 6f 67 45 78 63 65 70 74 69 6f 6e 73 20 3d 20  LogExceptions = 
10b00 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
10b10 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
10b20 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70 74 69  LogModuleExcepti
10b30 6f 6e 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  on) == SQLiteCon
10b40 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
10b50 4d 6f 64 75 6c 65 45 78 63 65 70 74 69 6f 6e 29  ModuleException)
10b60 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
10b70 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c          if (_sql
10b80 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
10b90 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
10ba0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
10bb0 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73  ("connection has
10bc0 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
10bd0 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  le");....       
10be0 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f   SetLoadExtensio
10bf0 6e 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  n(true);..      
10c00 20 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28    LoadExtension(
10c10 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10c20 6f 64 73 2e 53 51 4c 49 54 45 5f 44 4c 4c 2c 20  ods.SQLITE_DLL, 
10c30 22 73 71 6c 69 74 65 33 5f 76 74 73 68 69 6d 5f  "sqlite3_vtshim_
10c40 69 6e 69 74 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  init");....     
10c50 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 2e 43 72     if (module.Cr
10c60 65 61 74 65 44 69 73 70 6f 73 61 62 6c 65 4d 6f  eateDisposableMo
10c70 64 75 6c 65 28 5f 73 71 6c 29 29 0d 0a 20 20 20  dule(_sql))..   
10c80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10c90 20 20 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65 73      if (_modules
10ca0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
10cb0 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75             _modu
10cc0 6c 65 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f  les = new Dictio
10cd0 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c  nary<string, SQL
10ce0 69 74 65 4d 6f 64 75 6c 65 3e 28 29 3b 0d 0a 0d  iteModule>();...
10cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f  .            _mo
10d00 64 75 6c 65 73 2e 41 64 64 28 6d 6f 64 75 6c 65  dules.Add(module
10d10 2e 4e 61 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b 0d  .Name, module);.
10d20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
10d30 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20  f (_usePool)..  
10d40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10d50 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 75 73               _us
10d60 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a  ePool = false;..
10d70 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
10d80 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
10d90 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
10da0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
10db0 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
10dc0 67 2e 46 6f 72 6d 61 74 28 22 43 72 65 61 74 65  g.Format("Create
10dd0 4d 6f 64 75 6c 65 20 28 50 6f 6f 6c 29 20 44 69  Module (Pool) Di
10de0 73 61 62 6c 65 64 3a 20 7b 30 7d 22 2c 20 5f 73  sabled: {0}", _s
10df0 71 6c 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ql));..#endif.. 
10e00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
10e10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
10e20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b   else..        {
10e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
10e40 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
10e50 63 65 70 74 69 6f 6e 28 47 65 74 4c 61 73 74 45  ception(GetLastE
10e60 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
10e70 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
10e80 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
10e90 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74  .    /// Calls t
10ea0 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65  he native SQLite
10eb0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e   core library in
10ec0 20 6f 72 64 65 72 20 74 6f 20 63 6c 65 61 6e 75   order to cleanu
10ed0 70 20 74 68 65 20 72 65 73 6f 75 72 63 65 73 0d  p the resources.
10ee0 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61  .    /// associa
10ef0 74 65 64 20 77 69 74 68 20 61 20 6d 6f 64 75 6c  ted with a modul
10f00 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
10f10 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
10f20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
10f30 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  le...    /// </s
10f40 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
10f50 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f   <param name="mo
10f60 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  dule">..    /// 
10f70 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63  The module objec
10f80 74 20 70 72 65 76 69 6f 75 73 6c 79 20 70 61 73  t previously pas
10f90 73 65 64 20 74 6f 20 74 68 65 20 3c 73 65 65 20  sed to the <see 
10fa0 63 72 65 66 3d 22 43 72 65 61 74 65 4d 6f 64 75  cref="CreateModu
10fb0 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20  le" />..    /// 
10fc0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f  method...    ///
10fd0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
10fe0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
10ff0 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f  flags">..    ///
11000 20 54 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74   The flags for t
11010 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 3c 73  he associated <s
11020 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
11030 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62  onnection" /> ob
11040 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
11050 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
11060 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11070 76 65 72 72 69 64 65 20 76 6f 69 64 20 44 69 73  verride void Dis
11080 70 6f 73 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74  poseModule(SQLit
11090 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 20  eModule module, 
110a0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
110b0 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20  Flags flags)..  
110c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
110d0 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (module == null)
110e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
110f0 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
11100 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 6d  NullException("m
11110 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  odule");....    
11120 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f      module.Dispo
11130 73 65 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65  se();..    }..#e
11140 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ndif....    inte
11150 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 49 6e  rnal override In
11160 74 50 74 72 20 41 67 67 72 65 67 61 74 65 43 6f  tPtr AggregateCo
11170 6e 74 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e  ntext(IntPtr con
11180 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  text)..    {..  
11190 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
111a0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
111b0 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65  qlite3_aggregate
111c0 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74  _context(context
111d0 2c 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  , 1);..    }....
111e0 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54  #if INTEROP_VIRT
111f0 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f  UAL_TABLE..    /
11200 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
11210 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20    /// Calls the 
11220 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f  native SQLite co
11230 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72  re library in or
11240 64 65 72 20 74 6f 20 64 65 63 6c 61 72 65 20 61  der to declare a
11250 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
11260 20 20 20 20 2f 2f 2f 20 69 6e 20 72 65 73 70 6f      /// in respo
11270 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e  nse to a call in
11280 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  to the <see cref
11290 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
112a0 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f  odule.xCreate" /
112b0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73  >..    /// or <s
112c0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
112d0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
112e0 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72 74 75 61  nnect" /> virtua
112f0 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e  l table methods.
11300 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
11310 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
11320 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c  aram name="modul
11330 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
11340 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d   virtual table m
11350 6f 64 75 6c 65 20 74 68 61 74 20 69 73 20 74 6f  odule that is to
11360 20 62 65 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   be responsible 
11370 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  for the virtual 
11380 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 62  table..    /// b
11390 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a  eing declared...
113a0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
113b0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
113c0 20 6e 61 6d 65 3d 22 73 74 72 53 71 6c 22 3e 0d   name="strSql">.
113d0 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 74 72  .    /// The str
113e0 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
113f0 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
11400 20 64 65 73 63 72 69 62 69 6e 67 20 74 68 65 20   describing the 
11410 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74 6f  virtual table to
11420 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20 64 65 63  ..    /// be dec
11430 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lared...    /// 
11440 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
11450 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65  / <param name="e
11460 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  rror">..    /// 
11470 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68  Upon success, th
11480 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  e contents of th
11490 69 73 20 70 61 72 61 6d 65 74 65 72 20 61 72 65  is parameter are
114a0 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 55 70 6f   undefined.  Upo
114b0 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20 20  n failure,..    
114c0 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20 63 6f  /// it should co
114d0 6e 74 61 69 6e 20 61 6e 20 61 70 70 72 6f 70 72  ntain an appropr
114e0 69 61 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61  iate error messa
114f0 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ge...    /// </p
11500 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
11510 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
11520 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
11530 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
11540 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
11550 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
11560 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
11570 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65 63 6c  teErrorCode Decl
11580 61 72 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28  areVirtualTable(
11590 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
115a0 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a  Module module,..
115b0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
115c0 74 72 53 71 6c 2c 0d 0a 20 20 20 20 20 20 20 20  trSql,..        
115d0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
115e0 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
115f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
11600 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
11610 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11620 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 63        error = "c
11630 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e  onnection has an
11640 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22   invalid handle"
11650 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
11660 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
11670 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20  rCode.Error;..  
11680 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
11690 20 20 20 49 6e 74 50 74 72 20 70 53 71 6c 20 3d     IntPtr pSql =
116a0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
116b0 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
116c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
116d0 20 20 20 20 20 70 53 71 6c 20 3d 20 53 51 4c 69       pSql = SQLi
116e0 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74  teString.Utf8Int
116f0 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 73 74  PtrFromString(st
11700 72 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rSql);....      
11710 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
11720 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
11730 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
11740 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
11750 61 62 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab(..           
11760 20 20 20 20 20 5f 73 71 6c 2c 20 70 53 71 6c 29       _sql, pSql)
11770 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11780 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74   if ((n == SQLit
11790 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26  eErrorCode.Ok) &
117a0 26 20 28 6d 6f 64 75 6c 65 20 21 3d 20 6e 75 6c  & (module != nul
117b0 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
117c0 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 65 63 6c       module.Decl
117d0 61 72 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a  ared = true;....
117e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
117f0 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
11800 43 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d  Code.Ok) error =
11810 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3b   GetLastError();
11820 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11830 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20  return n;..     
11840 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
11850 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b  nally..        {
11860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
11870 20 28 70 53 71 6c 20 21 3d 20 49 6e 74 50 74 72   (pSql != IntPtr
11880 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
11890 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
118a0 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d         SQLiteMem
118b0 6f 72 79 2e 46 72 65 65 28 70 53 71 6c 29 3b 0d  ory.Free(pSql);.
118c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
118d0 20 70 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a   pSql = IntPtr.Z
118e0 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
118f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
11900 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
11910 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
11920 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61  /// Calls the na
11930 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65  tive SQLite core
11940 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65   library in orde
11950 72 20 74 6f 20 64 65 63 6c 61 72 65 20 61 20 76  r to declare a v
11960 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
11970 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 69    /// function i
11980 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20  n response to a 
11990 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73  call into the <s
119a0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
119b0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72  NativeModule.xCr
119c0 65 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f  eate" />..    //
119d0 2f 20 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22  / or <see cref="
119e0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
119f0 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e  ule.xConnect" />
11a00 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d   virtual table m
11a10 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f  ethods...    ///
11a20 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
11a30 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
11a40 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20  ="module">..    
11a50 2f 2f 2f 20 54 68 65 20 76 69 72 74 75 61 6c 20  /// The virtual 
11a60 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61  table module tha
11a70 74 20 69 73 20 74 6f 20 62 65 20 72 65 73 70 6f  t is to be respo
11a80 6e 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 76  nsible for the v
11a90 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
11aa0 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 62    /// function b
11ab0 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a  eing declared...
11ac0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
11ad0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
11ae0 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e 74 43   name="argumentC
11af0 6f 75 6e 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  ount">..    /// 
11b00 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  The number of ar
11b10 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 66  guments to the f
11b20 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65  unction being de
11b30 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  clared...    ///
11b40 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
11b50 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
11b60 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  name">..    /// 
11b70 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
11b80 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64  function being d
11b90 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f  eclared...    //
11ba0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
11bb0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
11bc0 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f  "error">..    //
11bd0 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20  / Upon success, 
11be0 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
11bf0 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 61  this parameter a
11c00 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 55  re undefined.  U
11c10 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20  pon failure,..  
11c20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20    /// it should 
11c30 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70 72 6f  contain an appro
11c40 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d 65 73  priate error mes
11c50 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sage...    /// <
11c60 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
11c70 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
11c80 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
11c90 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
11ca0 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  e...    /// </re
11cb0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
11cc0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
11cd0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65  LiteErrorCode De
11ce0 63 6c 61 72 65 56 69 72 74 75 61 6c 46 75 6e 63  clareVirtualFunc
11cf0 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53  tion(..        S
11d00 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
11d10 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  le,..        int
11d20 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d   argumentCount,.
11d30 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
11d40 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 72  name,..        r
11d50 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
11d60 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
11d70 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  {..        if (_
11d80 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
11d90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11da0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 63 6f       error = "co
11db0 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
11dc0 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 3b  invalid handle";
11dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
11de0 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
11df0 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
11e00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
11e10 20 20 49 6e 74 50 74 72 20 70 4e 61 6d 65 20 3d    IntPtr pName =
11e20 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
11e30 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
11e40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11e50 20 20 20 20 20 70 4e 61 6d 65 20 3d 20 53 51 4c       pName = SQL
11e60 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e  iteString.Utf8In
11e70 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 6e  tPtrFromString(n
11e80 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
11e90 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
11ea0 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
11eb0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
11ec0 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66 75  ite3_overload_fu
11ed0 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  nction(..       
11ee0 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70           _sql, p
11ef0 4e 61 6d 65 2c 20 61 72 67 75 6d 65 6e 74 43 6f  Name, argumentCo
11f00 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
11f10 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
11f20 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
11f30 29 20 65 72 72 6f 72 20 3d 20 47 65 74 4c 61 73  ) error = GetLas
11f40 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20  tError();....   
11f50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11f60 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n;..        }.. 
11f70 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
11f80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11f90 20 20 20 20 20 20 20 69 66 20 28 70 4e 61 6d 65         if (pName
11fa0 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
11fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
11fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11fd0 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72   SQLiteMemory.Fr
11fe0 65 65 28 70 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  ee(pName);..    
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d              pNam
12000 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  e = IntPtr.Zero;
12010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
12020 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
12030 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
12040 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
12050 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20      /// Enables 
12060 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65  or disabled exte
12070 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e 67 20 62 79  nsion loading by
12080 20 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 2f 2f   SQLite...    //
12090 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
120a0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
120b0 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20  e="bOnOff">..   
120c0 20 2f 2f 2f 20 54 72 75 65 20 74 6f 20 65 6e 61   /// True to ena
120d0 62 6c 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65  ble loading of e
120e0 78 74 65 6e 73 69 6f 6e 73 2c 20 66 61 6c 73 65  xtensions, false
120f0 20 74 6f 20 64 69 73 61 62 6c 65 2e 0d 0a 20 20   to disable...  
12100 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
12110 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
12120 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 4c 6f  rride void SetLo
12130 61 64 45 78 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c  adExtension(bool
12140 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d   bOnOff)..    {.
12150 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
12160 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
12170 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
12180 2e 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f  .sqlite3_enable_
12190 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d  load_extension(.
121a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71  .            _sq
121b0 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20  l, (bOnOff ? -1 
121c0 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  : 0));....      
121d0 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
121e0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
121f0 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
12200 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
12210 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
12220 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
12230 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
12240 2f 20 4c 6f 61 64 73 20 61 20 53 51 4c 69 74 65  / Loads a SQLite
12250 20 65 78 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61   extension libra
12260 72 79 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65  ry from the name
12270 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f  d file...    ///
12280 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
12290 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
122a0 3d 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20  ="fileName">..  
122b0 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f    /// The name o
122c0 66 20 74 68 65 20 64 79 6e 61 6d 69 63 20 6c 69  f the dynamic li
122d0 6e 6b 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20  nk library file 
122e0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65  containing the e
122f0 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f  xtension...    /
12300 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
12310 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
12320 3d 22 70 72 6f 63 4e 61 6d 65 22 3e 0d 0a 20 20  ="procName">..  
12330 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f    /// The name o
12340 66 20 74 68 65 20 65 78 70 6f 72 74 65 64 20 66  f the exported f
12350 75 6e 63 74 69 6f 6e 20 75 73 65 64 20 74 6f 20  unction used to 
12360 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 65  initialize the e
12370 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f  xtension...    /
12380 2f 2f 20 49 66 20 6e 75 6c 6c 2c 20 74 68 65 20  // If null, the 
12390 64 65 66 61 75 6c 74 20 22 73 71 6c 69 74 65 33  default "sqlite3
123a0 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 22  _extension_init"
123b0 20 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a   will be used...
123c0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
123d0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
123e0 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 61  verride void Loa
123f0 64 45 78 74 65 6e 73 69 6f 6e 28 73 74 72 69 6e  dExtension(strin
12400 67 20 66 69 6c 65 4e 61 6d 65 2c 20 73 74 72 69  g fileName, stri
12410 6e 67 20 70 72 6f 63 4e 61 6d 65 29 0d 0a 20 20  ng procName)..  
12420 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
12430 28 66 69 6c 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c  (fileName == nul
12440 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
12450 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
12460 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
12470 22 66 69 6c 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a  "fileName");....
12480 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
12490 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a  Error = IntPtr.Z
124a0 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
124b0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
124c0 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
124d0 5b 5d 20 75 74 66 38 46 69 6c 65 4e 61 6d 65 20  [] utf8FileName 
124e0 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55  = UTF8Encoding.U
124f0 54 46 38 2e 47 65 74 42 79 74 65 73 28 66 69 6c  TF8.GetBytes(fil
12500 65 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a  eName + '\0');..
12510 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
12520 5b 5d 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20  [] utf8ProcName 
12530 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
12540 20 20 20 20 20 20 20 69 66 20 28 70 72 6f 63 4e         if (procN
12550 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame != null)..  
12560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 74                ut
12570 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20 55 54 46  f8ProcName = UTF
12580 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47  8Encoding.UTF8.G
12590 65 74 42 79 74 65 73 28 70 72 6f 63 4e 61 6d 65  etBytes(procName
125a0 20 2b 20 27 5c 30 27 29 3b 0d 0a 0d 0a 20 20 20   + '\0');....   
125b0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
125c0 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
125d0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
125e0 2e 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78  .sqlite3_load_ex
125f0 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  tension(..      
12600 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20            _sql, 
12610 75 74 66 38 46 69 6c 65 4e 61 6d 65 2c 20 75 74  utf8FileName, ut
12620 66 38 50 72 6f 63 4e 61 6d 65 2c 20 72 65 66 20  f8ProcName, ref 
12630 70 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  pError);....    
12640 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
12650 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12660 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
12670 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
12680 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
12690 6e 2c 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  n, UTF8ToString(
126a0 70 45 72 72 6f 72 2c 20 2d 31 29 29 3b 0d 0a 20  pError, -1));.. 
126b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
126c0 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
126d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
126e0 20 20 69 66 20 28 70 45 72 72 6f 72 20 21 3d 20    if (pError != 
126f0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
12700 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
12710 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73               Uns
12720 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
12730 2e 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 45  .sqlite3_free(pE
12740 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
12750 20 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d          pError =
12760 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
12770 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
12780 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
12790 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65  ..    /// Enable
127a0 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78  s or disabled ex
127b0 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f  tended result co
127c0 64 65 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  des returned by 
127d0 53 51 4c 69 74 65 0d 0a 20 20 20 20 69 6e 74 65  SQLite..    inte
127e0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
127f0 69 64 20 53 65 74 45 78 74 65 6e 64 65 64 52 65  id SetExtendedRe
12800 73 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62  sultCodes(bool b
12810 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20  OnOff)..    {.. 
12820 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
12830 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
12840 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
12850 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65  ite3_extended_re
12860 73 75 6c 74 5f 63 6f 64 65 73 28 0d 0a 20 20 20  sult_codes(..   
12870 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f         _sql, (bO
12880 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b  nOff ? -1 : 0));
12890 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  ....      if (n 
128a0 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
128b0 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
128c0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
128d0 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
128e0 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  ());..    }..   
128f0 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61   /// Gets the la
12900 73 74 20 53 51 4c 69 74 65 20 65 72 72 6f 72 20  st SQLite error 
12910 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e  code..    intern
12920 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
12930 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73 75  teErrorCode Resu
12940 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d  ltCode()..    {.
12950 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
12960 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12970 73 2e 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  s.sqlite3_errcod
12980 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d  e(_sql);..    }.
12990 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68  .    /// Gets th
129a0 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65 78  e last SQLite ex
129b0 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64  tended error cod
129c0 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  e..    internal 
129d0 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
129e0 72 72 6f 72 43 6f 64 65 20 45 78 74 65 6e 64 65  rrorCode Extende
129f0 64 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20  dResultCode().. 
12a00 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
12a10 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
12a20 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
12a30 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28  xtended_errcode(
12a40 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  _sql);..    }...
12a50 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c  .    /// Add a l
12a60 6f 67 20 6d 65 73 73 61 67 65 20 76 69 61 20 74  og message via t
12a70 68 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65  he SQLite sqlite
12a80 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e  3_log interface.
12a90 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
12aa0 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 67  verride void Log
12ab0 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65 45 72  Message(SQLiteEr
12ac0 72 6f 72 43 6f 64 65 20 69 45 72 72 43 6f 64 65  rorCode iErrCode
12ad0 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67  , string zMessag
12ae0 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
12af0 20 53 74 61 74 69 63 4c 6f 67 4d 65 73 73 61 67   StaticLogMessag
12b00 65 28 69 45 72 72 43 6f 64 65 2c 20 7a 4d 65 73  e(iErrCode, zMes
12b10 73 61 67 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  sage);..    }...
12b20 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c  .    /// Add a l
12b30 6f 67 20 6d 65 73 73 61 67 65 20 76 69 61 20 74  og message via t
12b40 68 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65  he SQLite sqlite
12b50 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e  3_log interface.
12b60 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
12b70 74 61 74 69 63 20 76 6f 69 64 20 53 74 61 74 69  tatic void Stati
12b80 63 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69  cLogMessage(SQLi
12b90 74 65 45 72 72 6f 72 43 6f 64 65 20 69 45 72 72  teErrorCode iErr
12ba0 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65  Code, string zMe
12bb0 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  ssage)..    {.. 
12bc0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
12bd0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12be0 5f 6c 6f 67 28 69 45 72 72 43 6f 64 65 2c 20 54  _log(iErrCode, T
12bf0 6f 55 54 46 38 28 7a 4d 65 73 73 61 67 65 29 29  oUTF8(zMessage))
12c00 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20  ;..    }....#if 
12c10 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 7c 7c  INTEROP_CODEC ||
12c20 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45   INTEROP_INCLUDE
12c30 5f 53 45 45 0d 0a 20 20 20 20 69 6e 74 65 72 6e  _SEE..    intern
12c40 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
12c50 20 53 65 74 50 61 73 73 77 6f 72 64 28 62 79 74   SetPassword(byt
12c60 65 5b 5d 20 70 61 73 73 77 6f 72 64 42 79 74 65  e[] passwordByte
12c70 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
12c80 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12c90 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
12ca0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12cb0 5f 6b 65 79 28 5f 73 71 6c 2c 20 70 61 73 73 77  _key(_sql, passw
12cc0 6f 72 64 42 79 74 65 73 2c 20 70 61 73 73 77 6f  ordBytes, passwo
12cd0 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b  rdBytes.Length);
12ce0 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
12cf0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12d00 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
12d10 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
12d20 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
12d30 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
12d40 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
12d50 64 65 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61  de void ChangePa
12d60 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65  ssword(byte[] ne
12d70 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d  wPasswordBytes).
12d80 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
12d90 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
12da0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
12db0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
12dc0 6b 65 79 28 5f 73 71 6c 2c 20 6e 65 77 50 61 73  key(_sql, newPas
12dd0 73 77 6f 72 64 42 79 74 65 73 2c 20 28 6e 65 77  swordBytes, (new
12de0 50 61 73 73 77 6f 72 64 42 79 74 65 73 20 3d 3d  PasswordBytes ==
12df0 20 6e 75 6c 6c 29 20 3f 20 30 20 3a 20 6e 65 77   null) ? 0 : new
12e00 50 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65  PasswordBytes.Le
12e10 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66  ngth);..      if
12e20 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
12e30 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
12e40 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
12e50 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
12e60 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
12e70 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69  .#endif....    i
12e80 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12e90 20 76 6f 69 64 20 53 65 74 41 75 74 68 6f 72 69   void SetAuthori
12ea0 7a 65 72 48 6f 6f 6b 28 53 51 4c 69 74 65 41 75  zerHook(SQLiteAu
12eb0 74 68 6f 72 69 7a 65 72 43 61 6c 6c 62 61 63 6b  thorizerCallback
12ec0 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
12ed0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
12ee0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12ef0 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 28  _set_authorizer(
12f00 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
12f10 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
12f20 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
12f30 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
12f40 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c  etUpdateHook(SQL
12f50 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  iteUpdateCallbac
12f60 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
12f70 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
12f80 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
12f90 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f 73  3_update_hook(_s
12fa0 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
12fb0 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
12fc0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
12fd0 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
12fe0 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74  CommitHook(SQLit
12ff0 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20  eCommitCallback 
13000 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
13010 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
13020 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
13030 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c  commit_hook(_sql
13040 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
13050 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ero);..    }....
13060 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
13070 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 72  rride void SetTr
13080 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69  aceCallback(SQLi
13090 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20  teTraceCallback 
130a0 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
130b0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
130c0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
130d0 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e 63  trace(_sql, func
130e0 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
130f0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
13100 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
13110 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b  void SetRollback
13120 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62  Hook(SQLiteRollb
13130 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  ackCallback func
13140 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
13150 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
13160 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c 6c  ods.sqlite3_roll
13170 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20  back_hook(_sql, 
13180 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
13190 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
131a0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
131b0 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20  .    /// Allows 
131c0 74 68 65 20 73 65 74 74 69 6e 67 20 6f 66 20 61  the setting of a
131d0 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63   logging callbac
131e0 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20 53 51 4c  k invoked by SQL
131f0 69 74 65 20 77 68 65 6e 20 61 0d 0a 20 20 20 20  ite when a..    
13200 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f 63  /// log event oc
13210 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20  curs.  Only one 
13220 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65 20  callback may be 
13230 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69 73  set.  If NULL is
13240 20 70 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f 2f   passed,..    //
13250 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 61  / the logging ca
13260 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72 65 67 69  llback is unregi
13270 73 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  stered...    ///
13280 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
13290 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
132a0 3d 22 66 75 6e 63 22 3e 54 68 65 20 63 61 6c 6c  ="func">The call
132b0 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f  back function to
132c0 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e   invoke.</param>
132d0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
132e0 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65 73  ns>Returns a res
132f0 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e  ult code</return
13300 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
13310 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
13320 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f 67  ErrorCode SetLog
13330 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c  Callback(SQLiteL
13340 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ogCallback func)
13350 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
13360 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
13370 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
13380 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
13390 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a 20  3_config_log(.. 
133a0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
133b0 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53  eConfigOpsEnum.S
133c0 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47  QLITE_CONFIG_LOG
133d0 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
133e0 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ero);....       
133f0 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20   return rc;..   
13400 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
13410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13460 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
13470 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
13480 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20      /// Creates 
13490 61 20 6e 65 77 20 53 51 4c 69 74 65 20 62 61 63  a new SQLite bac
134a0 6b 75 70 20 6f 62 6a 65 63 74 20 62 61 73 65 64  kup object based
134b0 20 6f 6e 20 74 68 65 20 70 72 6f 76 69 64 65 64   on the provided
134c0 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20   destination..  
134d0 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 63    /// database c
134e0 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
134f0 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
13500 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74 68  connection is th
13510 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 61  e one..    /// a
13520 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
13530 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 65  his object.  The
13540 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73 74   source and dest
13550 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65  ination database
13560 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63  ..    /// connec
13570 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20  tions cannot be 
13580 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20 2f  the same...    /
13590 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
135a0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
135b0 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68 65  me="destCnn">The
135c0 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
135d0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
135e0 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
135f0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
13600 64 65 73 74 4e 61 6d 65 22 3e 54 68 65 20 64 65  destName">The de
13610 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
13620 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e  se name.</param>
13630 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
13640 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d   name="sourceNam
13650 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64 61  e">The source da
13660 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61  tabase name.</pa
13670 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
13680 65 74 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c 79  eturns>The newly
13690 20 63 72 65 61 74 65 64 20 62 61 63 6b 75 70 20   created backup 
136a0 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73  object.</returns
136b0 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
136c0 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 42  override SQLiteB
136d0 61 63 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a 65  ackup Initialize
136e0 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
136f0 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
13700 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20 20  n destCnn,..    
13710 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 74 4e      string destN
13720 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ame,..        st
13730 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65 0d  ring sourceName.
13740 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
13750 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  {..        if (d
13760 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  estCnn == null).
13770 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
13780 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
13790 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65  ullException("de
137a0 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20  stCnn");....    
137b0 20 20 20 20 69 66 20 28 64 65 73 74 4e 61 6d 65      if (destName
137c0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
137d0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
137e0 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
137f0 65 70 74 69 6f 6e 28 22 64 65 73 74 4e 61 6d 65  eption("destName
13800 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
13810 66 20 28 73 6f 75 72 63 65 4e 61 6d 65 20 3d 3d  f (sourceName ==
13820 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
13830 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
13840 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
13850 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d 65 22  ion("sourceName"
13860 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
13870 4c 69 74 65 33 20 64 65 73 74 53 71 6c 69 74 65  Lite3 destSqlite
13880 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73 71 6c  3 = destCnn._sql
13890 20 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a   as SQLite3;....
138a0 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74          if (dest
138b0 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c 29  Sqlite3 == null)
138c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
138d0 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
138e0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
138f0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73              "Des
13900 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  tination connect
13910 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61 70 70  ion has no wrapp
13920 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  er.",..         
13930 20 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22         "destCnn"
13940 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
13950 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
13960 6e 64 6c 65 20 64 65 73 74 48 61 6e 64 6c 65 20  ndle destHandle 
13970 3d 20 64 65 73 74 53 71 6c 69 74 65 33 2e 5f 73  = destSqlite3._s
13980 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ql;....        i
13990 66 20 28 64 65 73 74 48 61 6e 64 6c 65 20 3d 3d  f (destHandle ==
139a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
139b0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
139c0 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28  gumentException(
139d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
139e0 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63    "Destination c
139f0 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e  onnection has an
13a00 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
13a10 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
13a20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d      "destCnn");.
13a30 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
13a40 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c  eConnectionHandl
13a50 65 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d  e sourceHandle =
13a60 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   _sql;....      
13a70 20 20 69 66 20 28 73 6f 75 72 63 65 48 61 6e 64    if (sourceHand
13a80 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
13a90 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
13aa0 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
13ab0 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
13ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
13ad0 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74 69 6f  Source connectio
13ae0 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  n has an invalid
13af0 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
13b00 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 44         byte[] zD
13b10 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38  estName = ToUTF8
13b20 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20 20 20  (destName);..   
13b30 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 53 6f 75       byte[] zSou
13b40 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38  rceName = ToUTF8
13b50 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d  (sourceName);...
13b60 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
13b70 61 63 6b 75 70 48 61 6e 64 6c 65 20 62 61 63 6b  ackupHandle back
13b80 75 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b  upHandle = null;
13b90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
13ba0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
13bb0 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
13bc0 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
13bd0 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
13be0 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65  ly /* NOTE: Thre
13bf0 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65  ad.Abort() prote
13c00 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20  ction. */..     
13c10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13c20 20 20 49 6e 74 50 74 72 20 62 61 63 6b 75 70 20    IntPtr backup 
13c30 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
13c40 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
13c50 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20 20 20  ckup_init(..    
13c60 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 74              dest
13c70 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d  Handle, zDestNam
13c80 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c  e, sourceHandle,
13c90 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a   zSourceName);..
13ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
13cb0 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50   (backup == IntP
13cc0 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
13cd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13ce0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
13cf0 72 72 6f 72 43 6f 64 65 20 72 65 73 75 6c 74 43  rrorCode resultC
13d00 6f 64 65 20 3d 20 52 65 73 75 6c 74 43 6f 64 65  ode = ResultCode
13d10 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
13d20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c         if (resul
13d30 74 43 6f 64 65 20 21 3d 20 53 51 4c 69 74 65 45  tCode != SQLiteE
13d40 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
13d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d60 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
13d70 74 65 45 78 63 65 70 74 69 6f 6e 28 72 65 73 75  teException(resu
13d80 6c 74 43 6f 64 65 2c 20 47 65 74 4c 61 73 74 45  ltCode, GetLastE
13d90 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
13da0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
13db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dc0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
13dd0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 66  LiteException("f
13de0 61 69 6c 65 64 20 74 6f 20 69 6e 69 74 69 61 6c  ailed to initial
13df0 69 7a 65 20 62 61 63 6b 75 70 22 29 3b 0d 0a 20  ize backup");.. 
13e00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
13e10 20 20 20 20 20 20 20 20 20 20 20 20 62 61 63 6b              back
13e20 75 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53  upHandle = new S
13e30 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c  QLiteBackupHandl
13e40 65 28 64 65 73 74 48 61 6e 64 6c 65 2c 20 62 61  e(destHandle, ba
13e50 63 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  ckup);..        
13e60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
13e70 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e  iteConnection.On
13e80 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65  Changed(null, ne
13e90 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  w ConnectionEven
13ea0 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
13eb0 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
13ec0 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65  tionEventType.Ne
13ed0 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c  wCriticalHandle,
13ee0 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20   null, null,..  
13ef0 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
13f00 6e 75 6c 6c 2c 20 62 61 63 6b 75 70 48 61 6e 64  null, backupHand
13f10 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62  le, null, new ob
13f20 6a 65 63 74 5b 5d 20 7b 20 64 65 73 74 43 6e 6e  ject[] { destCnn
13f30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ,..            d
13f40 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 4e  estName, sourceN
13f50 61 6d 65 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20  ame }));....    
13f60 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53      return new S
13f70 51 4c 69 74 65 42 61 63 6b 75 70 28 0d 0a 20 20  QLiteBackup(..  
13f80 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2c 20            this, 
13f90 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64 65  backupHandle, de
13fa0 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e  stHandle, zDestN
13fb0 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c  ame, sourceHandl
13fc0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
13fd0 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 20  zSourceName);.. 
13fe0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
13ff0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
14000 2f 2f 20 43 6f 70 69 65 73 20 75 70 20 74 6f 20  // Copies up to 
14010 4e 20 70 61 67 65 73 20 66 72 6f 6d 20 74 68 65  N pages from the
14020 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
14030 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74   to the destinat
14040 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74  ion..    /// dat
14050 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
14060 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
14070 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ied backup objec
14080 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
14090 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
140a0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
140b0 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
140c0 6f 62 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f  object to use.</
140d0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
140e0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61  <param name="nPa
140f0 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ge">..    /// Th
14100 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
14110 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61 74  s to copy, negat
14120 69 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20  ive to copy all 
14130 72 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73 2e  remaining pages.
14140 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
14150 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
14160 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e  am name="retry">
14170 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f  ..    /// Set to
14180 20 74 72 75 65 20 69 66 20 74 68 65 20 6f 70 65   true if the ope
14190 72 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  ration needs to 
141a0 62 65 20 72 65 74 72 69 65 64 20 64 75 65 20 74  be retried due t
141b0 6f 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  o database..    
141c0 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75  /// locking issu
141d0 65 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 73  es; otherwise, s
141e0 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20 20  et to false...  
141f0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
14200 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
14210 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20  >..    /// True 
14220 69 66 20 74 68 65 72 65 20 61 72 65 20 6d 6f 72  if there are mor
14230 65 20 70 61 67 65 73 20 74 6f 20 62 65 20 63 6f  e pages to be co
14240 70 69 65 64 2c 20 66 61 6c 73 65 20 6f 74 68 65  pied, false othe
14250 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  rwise...    /// 
14260 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
14270 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
14280 65 20 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75  e bool StepBacku
14290 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
142a0 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 2c  teBackup backup,
142b0 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 50  ..        int nP
142c0 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  age,..        re
142d0 66 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20 20  f bool retry..  
142e0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
142f0 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20          retry = 
14300 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
14310 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
14320 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
14330 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
14340 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
14350 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
14360 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
14370 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
14380 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
14390 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
143a0 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
143b0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
143c0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
143d0 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
143e0 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
14400 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
14410 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
14420 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
14430 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50    IntPtr handleP
14440 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
14450 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
14460 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e  lePtr == IntPtr.
14470 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
14480 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
14490 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
144a0 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
144b0 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
144c0 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
144d0 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f  nvalid handle po
144e0 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20  inter.");....   
144f0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
14500 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
14510 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
14520 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70  ite3_backup_step
14530 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61 67  (handlePtr, nPag
14540 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 61 63  e);..        bac
14550 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 20  kup._stepResult 
14560 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61  = n; /* NOTE: Sa
14570 76 65 20 66 6f 72 20 75 73 65 20 62 79 20 46 69  ve for use by Fi
14580 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a  nishBackup. */..
14590 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
145a0 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
145b0 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
145c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
145d0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
145e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
145f0 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
14600 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75  LiteErrorCode.Bu
14610 73 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  sy)..        {..
14620 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72              retr
14630 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
14640 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
14650 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
14660 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
14670 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
14680 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20  rCode.Locked).. 
14690 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
146a0 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74 72        retry = tr
146b0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
146c0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
146d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
146e0 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
146f0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
14700 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  Done)..        {
14710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
14720 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
14730 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
14740 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  else..        {.
14750 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
14760 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
14770 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
14780 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
14790 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
147a0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
147b0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
147c0 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
147d0 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67   pages remaining
147e0 20 74 6f 20 62 65 20 63 6f 70 69 65 64 20 66 72   to be copied fr
147f0 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 0d 0a 20  om the source.. 
14800 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20     /// database 
14810 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69  to the destinati
14820 6f 6e 20 64 61 74 61 62 61 73 65 20 61 73 73 6f  on database asso
14830 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
14840 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f  specified..    /
14850 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  // backup object
14860 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
14870 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
14880 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
14890 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
148a0 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c  bject to check.<
148b0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
148c0 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75   <returns>The nu
148d0 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72 65  mber of pages re
148e0 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f  maining to be co
148f0 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  pied.</returns>.
14900 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
14910 65 72 72 69 64 65 20 69 6e 74 20 52 65 6d 61 69  erride int Remai
14920 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20 20  ningBackup(..   
14930 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
14940 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20  p backup..      
14950 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
14960 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
14970 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
14980 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
14990 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
149a0 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
149b0 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
149c0 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
149d0 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
149e0 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
149f0 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
14a00 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
14a10 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
14a20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
14a30 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a50 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
14a60 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
14a70 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
14a80 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
14a90 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
14aa0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
14ab0 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
14ac0 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
14ad0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
14ae0 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
14af0 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
14b00 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
14b10 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
14b20 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
14b30 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20  pointer.");.... 
14b40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
14b50 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
14b60 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
14b70 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64 6c  _remaining(handl
14b80 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ePtr);..    }...
14b90 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
14ba0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
14bb0 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  rns the total nu
14bc0 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
14bd0 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   the source data
14be0 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 0d  base associated.
14bf0 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68  .    /// with th
14c00 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b  e specified back
14c10 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20  up object...    
14c20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
14c30 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
14c40 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65  ame="backup">The
14c50 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74   backup object t
14c60 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e  o check.</param>
14c70 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
14c80 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns>The total num
14c90 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
14ca0 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  the source datab
14cb0 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ase.</returns>..
14cc0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
14cd0 72 72 69 64 65 20 69 6e 74 20 50 61 67 65 43 6f  rride int PageCo
14ce0 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  untBackup(..    
14cf0 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
14d00 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20   backup..       
14d10 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
14d20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
14d30 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
14d40 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
14d50 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
14d60 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
14d70 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
14d80 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
14d90 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
14da0 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
14db0 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
14dc0 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
14dd0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
14de0 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
14df0 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
14e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14e10 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
14e20 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
14e30 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
14e40 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
14e50 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
14e60 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
14e70 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72  dlePtr == IntPtr
14e80 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
14e90 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
14ea0 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
14eb0 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
14ec0 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
14ed0 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
14ee0 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
14ef0 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20  ointer.");....  
14f00 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
14f10 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
14f20 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  .sqlite3_backup_
14f30 70 61 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c 65  pagecount(handle
14f40 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  Ptr);..    }....
14f50 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
14f60 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74 72  >..    /// Destr
14f70 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70 20 6f  oys the backup o
14f80 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62  bject, rolling b
14f90 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20 74  ack any backup t
14fa0 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20  hat may be in.. 
14fb0 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d     /// progess..
14fc0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
14fd0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
14fe0 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
14ff0 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
15000 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c  ect to destroy.<
15010 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
15020 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
15030 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70  oid FinishBackup
15040 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
15050 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a  eBackup backup..
15060 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
15070 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61  ..        if (ba
15080 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ckup == null).. 
15090 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
150a0 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
150b0 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b  lException("back
150c0 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  up");....       
150d0 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
150e0 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63  dle handle = bac
150f0 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b  kup._sqlite_back
15100 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  up;....        i
15110 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  f (handle == nul
15120 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
15130 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
15140 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
15150 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
15160 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
15170 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
15180 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
15190 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
151a0 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e   handlePtr = han
151b0 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
151c0 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d  if (handlePtr ==
151d0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
151e0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
151f0 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
15200 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
15210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15220 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
15230 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
15240 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29  andle pointer.")
15250 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
15260 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
15270 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
15280 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
15290 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
152a0 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68  e3_backup_finish
152b0 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 50  _interop(handleP
152c0 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  tr);..#else..   
152d0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
152e0 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
152f0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
15300 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
15310 73 68 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a  sh(handlePtr);..
15320 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
15330 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65  handle.SetHandle
15340 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a  AsInvalid();....
15350 23 69 66 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45  #if COUNT_HANDLE
15360 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 6e  ..        if ((n
15370 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
15380 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d 3d  ode.Ok) || (n ==
15390 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73   backup._stepRes
153a0 75 6c 74 29 29 20 68 61 6e 64 6c 65 2e 57 61 73  ult)) handle.Was
153b0 52 65 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a 23  ReleasedOk();..#
153c0 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
153d0 20 69 66 20 28 28 6e 20 21 3d 20 53 51 4c 69 74   if ((n != SQLit
153e0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26  eErrorCode.Ok) &
153f0 26 20 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e 5f  & (n != backup._
15400 73 74 65 70 52 65 73 75 6c 74 29 29 0d 0a 20 20  stepResult))..  
15410 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
15420 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
15430 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
15440 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
15450 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
15460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
154a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
154b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
154c0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
154d0 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69  /// Determines i
154e0 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
154f0 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
15500 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  en initialized f
15510 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  or the..    /// 
15520 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
15530 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
15540 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
15550 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
15560 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63   A boolean indic
15570 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
15580 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20   not the SQLite 
15590 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
155a0 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69   been..    /// i
155b0 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74  nitialized for t
155c0 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
155d0 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ss...    /// </r
155e0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
155f0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
15600 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a 65  ool IsInitialize
15610 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  d()..    {..    
15620 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69      return Stati
15630 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29  cIsInitialized()
15640 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
15650 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
15660 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65     /// Determine
15670 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  s if the SQLite 
15680 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
15690 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65   been initialize
156a0 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f  d for the..    /
156b0 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  // current proce
156c0 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ss...    /// </s
156d0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
156e0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
156f0 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e  /// A boolean in
15700 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
15710 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69   or not the SQLi
15720 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
15730 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f  has been..    //
15740 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f  / initialized fo
15750 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  r the current pr
15760 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ocess...    /// 
15770 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
15780 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
15790 62 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e 69  bool StaticIsIni
157a0 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20  tialized()..    
157b0 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  {..        //.. 
157c0 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58         // BUGFIX
157d0 3a 20 50 72 65 76 65 6e 74 20 72 61 63 65 73 20  : Prevent races 
157e0 77 69 74 68 20 6f 74 68 65 72 20 74 68 72 65 61  with other threa
157f0 64 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74 69  ds for this enti
15800 72 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20  re block, due.. 
15810 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
15820 20 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69 6e    to the try/fin
15830 61 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e 20  ally semantics. 
15840 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32 39   See ticket [729
15850 30 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20  05c9a77]...     
15860 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c     //..        l
15870 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a  ock (syncRoot)..
15880 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15890 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
158a0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
158b0 53 61 76 65 20 74 68 65 20 73 74 61 74 65 20 6f  Save the state o
158c0 66 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c  f the logging cl
158d0 61 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65 73  ass and then res
158e0 74 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20 20  tore it..       
158f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 66       //       af
15900 74 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65 20  ter we are done 
15910 74 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67  to avoid logging
15920 20 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20   too many false 
15930 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20  errors...       
15940 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
15950 20 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 45       bool savedE
15960 6e 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c  nabled = SQLiteL
15970 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20  og.Enabled;..   
15980 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
15990 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c  og.Enabled = fal
159a0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
159b0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
159c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
159d0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
159e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
159f0 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20  TE: This method 
15a00 5b 61 62 5d 75 73 65 73 20 74 68 65 20 66 61 63  [ab]uses the fac
15a10 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 69  t that SQLite wi
15a20 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20  ll always..     
15a30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
15a40 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
15a50 45 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79 20  E_ERROR for any 
15a60 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72  unknown configur
15a70 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20  ation option..  
15a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15a90 20 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20         *unless* 
15aa0 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
15ab0 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 62  ry has already b
15ac0 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  een initialized.
15ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15ae0 20 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74 68    //       In th
15af0 61 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c 20  at case it will 
15b00 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53 51  always return SQ
15b10 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20  LITE_MISUSE...  
15b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15b40 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
15b50 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
15b60 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
15b70 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d  e3_config_none(.
15b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15b90 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69       SQLiteConfi
15ba0 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  gOpsEnum.SQLITE_
15bb0 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d  CONFIG_NONE);...
15bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15bd0 20 72 65 74 75 72 6e 20 28 72 63 20 3d 3d 20 53   return (rc == S
15be0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4d  QLiteErrorCode.M
15bf0 69 73 75 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  isuse);..       
15c00 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15c10 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
15c20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15c30 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
15c40 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20  teLog.Enabled = 
15c50 73 61 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a 20  savedEnabled;.. 
15c60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
15c70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
15c80 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
15c90 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c  ry>..    /// Hel
15ca0 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  per function to 
15cb0 72 65 74 72 69 65 76 65 20 61 20 63 6f 6c 75 6d  retrieve a colum
15cc0 6e 20 6f 66 20 64 61 74 61 20 66 72 6f 6d 20 61  n of data from a
15cd0 6e 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  n active stateme
15ce0 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  nt...    /// </s
15cf0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
15d00 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74   <param name="st
15d10 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e  mt">The statemen
15d20 74 20 62 65 69 6e 67 20 73 74 65 70 28 29 27 64  t being step()'d
15d30 20 74 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e   through</param>
15d40 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
15d50 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68   name="flags">Th
15d60 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74  e flags associat
15d70 65 64 20 77 69 74 68 20 74 68 65 20 63 6f 6e 6e  ed with the conn
15d80 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  ection.</param>.
15d90 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
15da0 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68 65  name="index">The
15db0 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f   column index to
15dc0 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
15dd0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
15de0 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65  m name="typ">The
15df0 20 74 79 70 65 20 6f 66 20 64 61 74 61 20 63 6f   type of data co
15e00 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63  ntained in the c
15e10 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69  olumn.  If Unini
15e20 74 69 61 6c 69 7a 65 64 2c 20 74 68 69 73 20 66  tialized, this f
15e30 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74  unction will ret
15e40 72 69 65 76 65 20 74 68 65 20 64 61 74 61 74 79  rieve the dataty
15e50 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c  pe information.<
15e60 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
15e70 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
15e80 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 74 68  s the data in th
15e90 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e  e column</return
15ea0 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
15eb0 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
15ec0 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74 65   GetValue(SQLite
15ed0 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
15ee0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
15ef0 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
15f00 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54 79   index, SQLiteTy
15f10 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a  pe typ)..    {..
15f20 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
15f30 74 79 20 61 66 66 20 3d 20 74 79 70 2e 41 66 66  ty aff = typ.Aff
15f40 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 69 66  inity;..      if
15f50 20 28 61 66 66 20 3d 3d 20 54 79 70 65 41 66 66   (aff == TypeAff
15f60 69 6e 69 74 79 2e 4e 75 6c 6c 29 20 72 65 74 75  inity.Null) retu
15f70 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b  rn DBNull.Value;
15f80 0d 0a 20 20 20 20 20 20 54 79 70 65 20 74 20 3d  ..      Type t =
15f90 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
15fa0 69 66 20 28 74 79 70 2e 54 79 70 65 20 21 3d 20  if (typ.Type != 
15fb0 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 0d 0a  DbType.Object)..
15fc0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15fd0 20 74 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65   t = SQLiteConve
15fe0 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54 6f 54  rt.SQLiteTypeToT
15ff0 79 70 65 28 74 79 70 29 3b 0d 0a 20 20 20 20 20  ype(typ);..     
16000 20 20 20 61 66 66 20 3d 20 54 79 70 65 54 6f 41     aff = TypeToA
16010 66 66 69 6e 69 74 79 28 74 29 3b 0d 0a 20 20 20  ffinity(t);..   
16020 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
16030 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
16040 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
16050 2e 47 65 74 41 6c 6c 41 73 54 65 78 74 29 20 3d  .GetAllAsText) =
16060 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
16070 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73  onFlags.GetAllAs
16080 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Text)..         
16090 20 72 65 74 75 72 6e 20 47 65 74 54 65 78 74 28   return GetText(
160a0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d  stmt, index);...
160b0 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28 61  .      switch (a
160c0 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ff)..      {..  
160d0 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
160e0 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20  ffinity.Blob:.. 
160f0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
16100 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e  .Type == DbType.
16110 47 75 69 64 20 26 26 20 74 79 70 2e 41 66 66 69  Guid && typ.Affi
16120 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69  nity == TypeAffi
16130 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20 20 20 20  nity.Text)..    
16140 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
16150 65 77 20 47 75 69 64 28 47 65 74 54 65 78 74 28  ew Guid(GetText(
16160 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
16170 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
16180 6e 20 3d 20 28 69 6e 74 29 47 65 74 42 79 74 65  n = (int)GetByte
16190 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30  s(stmt, index, 0
161a0 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a  , null, 0, 0);..
161b0 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
161c0 20 62 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e 5d   b = new byte[n]
161d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 47 65 74  ;..          Get
161e0 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65  Bytes(stmt, inde
161f0 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d  x, 0, b, 0, n);.
16200 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
16210 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54  (typ.Type == DbT
16220 79 70 65 2e 47 75 69 64 20 26 26 20 6e 20 3d 3d  ype.Guid && n ==
16230 20 31 36 29 0d 0a 20 20 20 20 20 20 20 20 20 20   16)..          
16240 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69    return new Gui
16250 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  d(b);....       
16260 20 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a 20 20     return b;..  
16270 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
16280 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65  ffinity.DateTime
16290 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  :..          ret
162a0 75 72 6e 20 47 65 74 44 61 74 65 54 69 6d 65 28  urn GetDateTime(
162b0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
162c0 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
162d0 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a  Affinity.Double:
162e0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
162f0 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
16300 6e 20 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74  n GetDouble(stmt
16310 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
16320 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
16330 65 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47  ert.ChangeType(G
16340 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69  etDouble(stmt, i
16350 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b  ndex), t, null);
16360 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
16370 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
16380 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  4:..          if
16390 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74   (t == null) ret
163a0 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74 6d  urn GetInt64(stm
163b0 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
163c0 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
163d0 79 70 65 6f 66 28 53 42 79 74 65 29 29 20 72 65  ypeof(SByte)) re
163e0 74 75 72 6e 20 47 65 74 53 42 79 74 65 28 73 74  turn GetSByte(st
163f0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
16400 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
16410 74 79 70 65 6f 66 28 42 79 74 65 29 29 20 72 65  typeof(Byte)) re
16420 74 75 72 6e 20 47 65 74 42 79 74 65 28 73 74 6d  turn GetByte(stm
16430 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
16440 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
16450 79 70 65 6f 66 28 49 6e 74 31 36 29 29 20 72 65  ypeof(Int16)) re
16460 74 75 72 6e 20 47 65 74 49 6e 74 31 36 28 73 74  turn GetInt16(st
16470 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
16480 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
16490 74 79 70 65 6f 66 28 55 49 6e 74 31 36 29 29 20  typeof(UInt16)) 
164a0 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 31 36  return GetUInt16
164b0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
164c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
164d0 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74 33 32 29  == typeof(Int32)
164e0 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 33  ) return GetInt3
164f0 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  2(stmt, index);.
16500 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
16510 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 33   == typeof(UInt3
16520 32 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49  2)) return GetUI
16530 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
16540 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
16550 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49   (t == typeof(UI
16560 6e 74 36 34 29 29 20 72 65 74 75 72 6e 20 47 65  nt64)) return Ge
16570 74 55 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e  tUInt64(stmt, in
16580 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
16590 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
165a0 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 49 6e  ChangeType(GetIn
165b0 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
165c0 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  , t, null);..   
165d0 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20       default:.. 
165e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
165f0 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
16600 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  dex);..      }..
16610 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
16620 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
16630 6e 74 20 47 65 74 43 75 72 73 6f 72 46 6f 72 54  nt GetCursorForT
16640 61 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65  able(SQLiteState
16650 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 64  ment stmt, int d
16660 62 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67 65 29  b, int rootPage)
16670 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
16680 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
16690 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
166a0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
166b0 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 75  sqlite3_table_cu
166c0 72 73 6f 72 5f 69 6e 74 65 72 6f 70 28 73 74 6d  rsor_interop(stm
166d0 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
166e0 64 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a  db, rootPage);..
166f0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
16700 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d  urn -1;..#endif.
16710 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
16720 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
16730 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 6f 72  long GetRowIdFor
16740 43 75 72 73 6f 72 28 53 51 4c 69 74 65 53 74 61  Cursor(SQLiteSta
16750 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
16760 20 63 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d   cursor)..    {.
16770 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
16780 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e  NDARD..      lon
16790 67 20 72 6f 77 69 64 20 3d 20 30 3b 0d 0a 20 20  g rowid = 0;..  
167a0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
167b0 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e  ode rc = UnsafeN
167c0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
167d0 69 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f 77 69  ite3_cursor_rowi
167e0 64 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  d_interop(stmt._
167f0 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 63 75 72  sqlite_stmt, cur
16800 73 6f 72 2c 20 72 65 66 20 72 6f 77 69 64 29 3b  sor, ref rowid);
16810 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63 20 3d  ..      if (rc =
16820 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
16830 65 2e 4f 6b 29 20 72 65 74 75 72 6e 20 72 6f 77  e.Ok) return row
16840 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  id;....      ret
16850 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20  urn 0;..#else.. 
16860 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
16870 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
16880 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
16890 65 72 72 69 64 65 20 76 6f 69 64 20 47 65 74 49  erride void GetI
168a0 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e 64  ndexColumnExtend
168b0 65 64 49 6e 66 6f 28 73 74 72 69 6e 67 20 64 61  edInfo(string da
168c0 74 61 62 61 73 65 2c 20 73 74 72 69 6e 67 20 69  tabase, string i
168d0 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 63 6f 6c  ndex, string col
168e0 75 6d 6e 2c 20 72 65 66 20 69 6e 74 20 73 6f 72  umn, ref int sor
168f0 74 4d 6f 64 65 2c 20 72 65 66 20 69 6e 74 20 6f  tMode, ref int o
16900 6e 45 72 72 6f 72 2c 20 72 65 66 20 73 74 72 69  nError, ref stri
16910 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  ng collationSequ
16920 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ence)..    {..#i
16930 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
16940 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  RD..      IntPtr
16950 20 63 6f 6c 6c 20 3d 20 49 6e 74 50 74 72 2e 5a   coll = IntPtr.Z
16960 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ero;..      int 
16970 63 6f 6c 6c 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20  colllen = 0;..  
16980 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
16990 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20  ode rc;....     
169a0 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
169b0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
169c0 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69  3_index_column_i
169d0 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  nfo_interop(_sql
169e0 2c 20 54 6f 55 54 46 38 28 64 61 74 61 62 61 73  , ToUTF8(databas
169f0 65 29 2c 20 54 6f 55 54 46 38 28 69 6e 64 65 78  e), ToUTF8(index
16a00 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e  ), ToUTF8(column
16a10 29 2c 20 72 65 66 20 73 6f 72 74 4d 6f 64 65 2c  ), ref sortMode,
16a20 20 72 65 66 20 6f 6e 45 72 72 6f 72 2c 20 72 65   ref onError, re
16a30 66 20 63 6f 6c 6c 2c 20 72 65 66 20 63 6f 6c 6c  f coll, ref coll
16a40 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  len);..      if 
16a50 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72  (rc != SQLiteErr
16a60 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
16a70 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
16a80 74 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29 3b 0d  tion(rc, null);.
16a90 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69  ...      collati
16aa0 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46  onSequence = UTF
16ab0 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 2c 20  8ToString(coll, 
16ac0 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  colllen);..#else
16ad0 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f 64 65  ..      sortMode
16ae0 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f 6e 45   = 0;..      onE
16af0 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20 20 20  rror = 2;..     
16b00 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   collationSequen
16b10 63 65 20 3d 20 22 42 49 4e 41 52 59 22 3b 0d 0a  ce = "BINARY";..
16b20 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
16b30 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
16b40 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
16b50 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e 74 72  orCode FileContr
16b60 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e 61 6d  ol(string zDbNam
16b70 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74 50 74  e, int op, IntPt
16b80 72 20 70 41 72 67 29 0d 0a 20 20 20 20 7b 0d 0a  r pArg)..    {..
16b90 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
16ba0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
16bb0 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f  .sqlite3_file_co
16bc0 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44 62  ntrol(_sql, (zDb
16bd0 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  Name != null) ? 
16be0 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65 29 20  ToUTF8(zDbName) 
16bf0 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41 72 67  : null, op, pArg
16c00 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a  );..    }..  }..
16c10 7d 0d 0a                                         }..