System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact acc028ff15c8feaa03f94bb7a8edb8cfcee4a837:


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 38 38 2e 30  sion = "1.0.88.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 29 20 26  _40 || NET_45) &
0a30: 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  & !PLATFORM_COMP
0a40: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
0a50: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 5f    private bool _
0a60: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 3b 0d  buildingSchema;.
0a70: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
0a80: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0a90: 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72 2d 64    /// The user-d
0aa0: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
0ab0: 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e 20 74   registered on t
0ac0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  his connection..
0ad0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ae0: 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  y>..    protecte
0af0: 64 20 4c 69 73 74 3c 53 51 4c 69 74 65 46 75 6e  d List<SQLiteFun
0b00: 63 74 69 6f 6e 3e 20 5f 66 75 6e 63 74 69 6f 6e  ction> _function
0b10: 73 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f  s;....#if INTERO
0b20: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
0b30: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0b40: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
0b50: 6d 6f 64 75 6c 65 73 20 63 72 65 61 74 65 64 20  modules created 
0b60: 75 73 69 6e 67 20 74 68 69 73 20 63 6f 6e 6e 65  using this conne
0b70: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
0b80: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0b90: 70 72 6f 74 65 63 74 65 64 20 44 69 63 74 69 6f  protected Dictio
0ba0: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c  nary<string, SQL
0bb0: 69 74 65 4d 6f 64 75 6c 65 3e 20 5f 6d 6f 64 75  iteModule> _modu
0bc0: 6c 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  les;..#endif....
0bd0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
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 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
0c40: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0c50: 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 74 68 65  / Constructs the
0c60: 20 6f 62 6a 65 63 74 20 75 73 65 64 20 74 6f 20   object used to 
0c70: 69 6e 74 65 72 61 63 74 20 77 69 74 68 20 74 68  interact with th
0c80: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
0c90: 62 72 61 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 75  brary..    /// u
0ca0: 73 69 6e 67 20 74 68 65 20 55 54 46 2d 38 20 74  sing the UTF-8 t
0cb0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 0d 0a 20  ext encoding... 
0cc0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0cd0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0ce0: 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e 0d 0a 20  m name="fmt">.. 
0cf0: 20 20 20 2f 2f 2f 20 54 68 65 20 44 61 74 65 54     /// The DateT
0d00: 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20 62 65  ime format to be
0d10: 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6e 76 65   used when conve
0d20: 72 74 69 6e 67 20 73 74 72 69 6e 67 20 76 61 6c  rting string val
0d30: 75 65 73 20 74 6f 20 61 0d 0a 20 20 20 20 2f 2f  ues to a..    //
0d40: 2f 20 44 61 74 65 54 69 6d 65 20 61 6e 64 20 62  / DateTime and b
0d50: 69 6e 64 69 6e 67 20 44 61 74 65 54 69 6d 65 20  inding DateTime 
0d60: 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20 20  parameters...   
0d70: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
0d80: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0d90: 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20 20 20 20  me="kind">..    
0da0: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
0db0: 66 3d 22 44 61 74 65 54 69 6d 65 4b 69 6e 64 22  f="DateTimeKind"
0dc0: 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64 20 77   /> to be used w
0dd0: 68 65 6e 20 63 72 65 61 74 69 6e 67 20 44 61 74  hen creating Dat
0de0: 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76  eTime..    /// v
0df0: 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alues...    /// 
0e00: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0e10: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
0e20: 6d 74 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20 20  mtString">..    
0e30: 2f 2f 2f 20 54 68 65 20 66 6f 72 6d 61 74 20 73  /// The format s
0e40: 74 72 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64  tring to be used
0e50: 20 77 68 65 6e 20 70 61 72 73 69 6e 67 20 61 6e   when parsing an
0e60: 64 20 66 6f 72 6d 61 74 74 69 6e 67 20 44 61 74  d formatting Dat
0e70: 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76  eTime..    /// v
0e80: 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alues...    /// 
0e90: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0ea0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
0eb0: 62 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  b">..    /// The
0ec0: 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 74   native handle t
0ed0: 6f 20 62 65 20 61 73 73 6f 63 69 61 74 65 64 20  o be associated 
0ee0: 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73  with the databas
0ef0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
0f00: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
0f10: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
0f20: 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e  name="fileName">
0f30: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 75  ..    /// The fu
0f40: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69  lly qualified fi
0f50: 6c 65 20 6e 61 6d 65 20 61 73 73 6f 63 69 61 74  le name associat
0f60: 65 64 20 77 69 74 68 20 3c 70 61 72 61 6d 72 65  ed with <paramre
0f70: 66 20 6e 61 6d 65 3d 22 64 62 20 22 2f 3e 2e 0d  f name="db "/>..
0f80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
0f90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0fa0: 6d 20 6e 61 6d 65 3d 22 6f 77 6e 48 61 6e 64 6c  m name="ownHandl
0fb0: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  e">..    /// Non
0fc0: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 65 77  -zero if the new
0fd0: 6c 79 20 63 72 65 61 74 65 64 20 6f 62 6a 65 63  ly created objec
0fe0: 74 20 69 6e 73 74 61 6e 63 65 20 77 69 6c 6c 20  t instance will 
0ff0: 6e 65 65 64 20 74 6f 20 64 69 73 70 6f 73 65 0d  need to dispose.
1000: 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 3c 70 61 72  .    /// of <par
1010: 61 6d 72 65 66 20 6e 61 6d 65 3d 22 64 62 22 20  amref name="db" 
1020: 2f 3e 20 77 68 65 6e 20 69 74 20 69 73 20 6e 6f  /> when it is no
1030: 20 6c 6f 6e 67 65 72 20 6e 65 65 64 65 64 2e 0d   longer needed..
1040: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
1050: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
1060: 53 51 4c 69 74 65 33 28 0d 0a 20 20 20 20 20 20  SQLite3(..      
1070: 20 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d    SQLiteDateForm
1080: 61 74 73 20 66 6d 74 2c 0d 0a 20 20 20 20 20 20  ats fmt,..      
1090: 20 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 6b    DateTimeKind k
10a0: 69 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ind,..        st
10b0: 72 69 6e 67 20 66 6d 74 53 74 72 69 6e 67 2c 0d  ring fmtString,.
10c0: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
10d0: 64 62 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  db,..        str
10e0: 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  ing fileName,.. 
10f0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f 77 6e 48         bool ownH
1100: 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 29  andle..        )
1110: 0d 0a 20 20 20 20 20 20 3a 20 62 61 73 65 28 66  ..      : base(f
1120: 6d 74 2c 20 6b 69 6e 64 2c 20 66 6d 74 53 74 72  mt, kind, fmtStr
1130: 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ing)..    {..   
1140: 20 20 20 20 20 69 66 20 28 64 62 20 21 3d 20 49       if (db != I
1150: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
1160: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1170: 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53      _sql = new S
1180: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
1190: 61 6e 64 6c 65 28 64 62 2c 20 6f 77 6e 48 61 6e  andle(db, ownHan
11a0: 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dle);..         
11b0: 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 66     _fileName = f
11c0: 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
11d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
11e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
11f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1240: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
1250: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
1260: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
1270: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1280: 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20   disposed;..    
1290: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
12a0: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
12b0: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b 0d  throw */..    {.
12c0: 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49  .#if THROW_ON_DI
12d0: 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20  SPOSED..        
12e0: 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20  if (disposed).. 
12f0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1300: 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
1310: 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74 79 70  sedException(typ
1320: 65 6f 66 28 53 51 4c 69 74 65 33 29 2e 4e 61 6d  eof(SQLite3).Nam
1330: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
1340: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
1350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
13b0: 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72   protected overr
13c0: 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65  ide void Dispose
13d0: 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29  (bool disposing)
13e0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
13f0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1410: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
1420: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1430: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
1440: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
1450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1460: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1470: 20 20 20 2f 2f 20 20 20 20 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 0d 0a 20  /////////////.. 
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14b0: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
14c0: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
14d0: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
14e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
14f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1510: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1520: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1560: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
1570: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
1580: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
1590: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d0: 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45  ////....#if INTE
15e0: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
15f0: 45 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  E..             
1600: 20 20 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65     DisposeModule
1610: 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  s();..#endif....
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1630: 43 6c 6f 73 65 28 66 61 6c 73 65 29 3b 20 2f 2a  Close(false); /*
1640: 20 44 69 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e   Disposing, cann
1650: 6f 74 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a 20 20  ot throw. */..  
1660: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1670: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1680: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
1690: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16a0: 62 61 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73  base.Dispose(dis
16b0: 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20  posing);....    
16c0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
16d0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
16e0: 20 45 76 65 72 79 74 68 69 6e 67 20 73 68 6f 75   Everything shou
16f0: 6c 64 20 62 65 20 66 75 6c 6c 79 20 64 69 73 70  ld be fully disp
1700: 6f 73 65 64 20 61 74 20 74 68 69 73 20 70 6f 69  osed at this poi
1710: 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt...           
1720: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1730: 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65   disposed = true
1740: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1750: 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
1760: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
1770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69  //////////....#i
17d0: 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  f INTEROP_VIRTUA
17e0: 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f  L_TABLE..    ///
17f0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1800: 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
1810: 61 74 74 65 6d 70 74 73 20 74 6f 20 64 69 73 70  attempts to disp
1820: 6f 73 65 20 6f 66 20 61 6c 6c 20 74 68 65 20 3c  ose of all the <
1830: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
1840: 4d 6f 64 75 6c 65 22 20 2f 3e 20 64 65 72 69 76  Module" /> deriv
1850: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6f 62 6a 65  ed..    /// obje
1860: 63 74 20 69 6e 73 74 61 6e 63 65 73 20 63 75 72  ct instances cur
1870: 72 65 6e 74 6c 79 20 61 73 73 6f 63 69 61 74 65  rently associate
1880: 64 20 77 69 74 68 20 74 68 65 20 6e 61 74 69 76  d with the nativ
1890: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
18a0: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
18b0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
18c0: 70 72 69 76 61 74 65 20 76 6f 69 64 20 44 69 73  private void Dis
18d0: 70 6f 73 65 4d 6f 64 75 6c 65 73 28 29 0d 0a 20  poseModules().. 
18e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
18f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
1900: 45 3a 20 49 66 20 61 6e 79 20 6d 6f 64 75 6c 65  E: If any module
1910: 73 20 77 65 72 65 20 63 72 65 61 74 65 64 2c 20  s were created, 
1920: 61 74 74 65 6d 70 74 20 74 6f 20 64 69 73 70 6f  attempt to dispo
1930: 73 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f  se of..        /
1940: 2f 20 20 20 20 20 20 20 74 68 65 6d 20 6e 6f 77  /       them now
1950: 2e 20 20 54 68 69 73 20 63 6f 64 65 20 69 73 20  .  This code is 
1960: 64 65 73 69 67 6e 65 64 20 74 6f 20 61 76 6f 69  designed to avoi
1970: 64 20 74 68 72 6f 77 69 6e 67 0d 0a 20 20 20 20  d throwing..    
1980: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 63      //       exc
1990: 65 70 74 69 6f 6e 73 20 75 6e 6c 65 73 73 20 74  eptions unless t
19a0: 68 65 20 44 69 73 70 6f 73 65 20 6d 65 74 68 6f  he Dispose metho
19b0: 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 0d  d of the module.
19c0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
19d0: 20 20 69 74 73 65 6c 66 20 74 68 72 6f 77 73 20    itself throws 
19e0: 61 6e 20 65 78 63 65 70 74 69 6f 6e 2e 0d 0a 20  an exception... 
19f0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1a00: 20 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20     if (_modules 
1a10: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
1a20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1a30: 20 66 6f 72 65 61 63 68 20 28 4b 65 79 56 61 6c   foreach (KeyVal
1a40: 75 65 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 53  uePair<string, S
1a50: 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 20 70 61 69  QLiteModule> pai
1a60: 72 20 69 6e 20 5f 6d 6f 64 75 6c 65 73 29 0d 0a  r in _modules)..
1a70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1a90: 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
1aa0: 6c 65 20 3d 20 70 61 69 72 2e 56 61 6c 75 65 3b  le = pair.Value;
1ab0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ac0: 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
1ad0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1af0: 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
1b00: 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
1b10: 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
1b20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1b30: 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c            _modul
1b40: 65 73 2e 43 6c 65 61 72 28 29 3b 0d 0a 20 20 20  es.Clear();..   
1b50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23       }..    }..#
1b60: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  endif....    ///
1b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1bd0: 20 20 20 20 2f 2f 20 49 74 20 69 73 6e 27 74 20      // It isn't 
1be0: 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63 6c 65  necessary to cle
1bf0: 61 6e 75 70 20 61 6e 79 20 66 75 6e 63 74 69 6f  anup any functio
1c00: 6e 73 20 77 65 27 76 65 20 72 65 67 69 73 74 65  ns we've registe
1c10: 72 65 64 2e 20 20 49 66 20 74 68 65 20 63 6f 6e  red.  If the con
1c20: 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 20  nection..    // 
1c30: 67 6f 65 73 20 74 6f 20 74 68 65 20 70 6f 6f 6c  goes to the pool
1c40: 20 61 6e 64 20 69 73 20 72 65 73 75 72 72 65 63   and is resurrec
1c50: 74 65 64 20 6c 61 74 65 72 2c 20 72 65 2d 72 65  ted later, re-re
1c60: 67 69 73 74 65 72 65 64 20 66 75 6e 63 74 69 6f  gistered functio
1c70: 6e 73 20 77 69 6c 6c 20 6f 76 65 72 77 72 69 74  ns will overwrit
1c80: 65 20 74 68 65 0d 0a 20 20 20 20 2f 2f 20 70 72  e the..    // pr
1c90: 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73  evious functions
1ca0: 2e 20 20 54 68 65 20 53 51 4c 69 74 65 46 75 6e  .  The SQLiteFun
1cb0: 63 74 69 6f 6e 43 6f 6f 6b 69 65 48 61 6e 64 6c  ctionCookieHandl
1cc0: 65 20 77 69 6c 6c 20 74 61 6b 65 20 63 61 72 65  e will take care
1cd0: 20 6f 66 20 66 72 65 65 69 6e 67 20 75 6e 6d 61   of freeing unma
1ce0: 6e 61 67 65 64 0d 0a 20 20 20 20 2f 2f 20 72 65  naged..    // re
1cf0: 73 6f 75 72 63 65 73 20 62 65 6c 6f 6e 67 69 6e  sources belongin
1d00: 67 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  g to the previou
1d10: 73 6c 79 2d 72 65 67 69 73 74 65 72 65 64 20 66  sly-registered f
1d20: 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 69  unctions...    i
1d30: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1d40: 20 76 6f 69 64 20 43 6c 6f 73 65 28 62 6f 6f 6c   void Close(bool
1d50: 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20   canThrow)..    
1d60: 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71  {..      if (_sq
1d70: 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  l != null)..    
1d80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69    {..          i
1d90: 66 20 28 21 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64  f (!_sql.OwnHand
1da0: 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  le)..          {
1db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dc0: 5f 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  _sql = null;..  
1dd0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1de0: 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  rn;..          }
1df0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
1e00: 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20   (_usePool)..   
1e10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1e20: 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69          if (SQLi
1e30: 74 65 42 61 73 65 2e 52 65 73 65 74 43 6f 6e 6e  teBase.ResetConn
1e40: 65 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 5f 73 71  ection(_sql, _sq
1e50: 6c 2c 20 63 61 6e 54 68 72 6f 77 29 29 0d 0a 20  l, canThrow)).. 
1e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1e70: 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54  #if INTEROP_VIRT
1e80: 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 20  UAL_TABLE..     
1e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73               Dis
1ea0: 70 6f 73 65 4d 6f 64 75 6c 65 73 28 29 3b 0d 0a  poseModules();..
1eb0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1ed0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c  teConnectionPool
1ee0: 2e 41 64 64 28 5f 66 69 6c 65 4e 61 6d 65 2c 20  .Add(_fileName, 
1ef0: 5f 73 71 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69  _sql, _poolVersi
1f00: 6f 6e 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54  on);....#if !NET
1f10: 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
1f20: 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
1f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f40: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
1f50: 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ne(String.Format
1f60: 28 22 43 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 53  ("Close (Pool) S
1f70: 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c 20 5f 73  uccess: {0}", _s
1f80: 71 6c 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ql));..#endif.. 
1f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1fa0: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
1fb0: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
1fc0: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
1fd0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
1fe0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2000: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
2010: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43  String.Format("C
2020: 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 46 61 69 6c  lose (Pool) Fail
2030: 75 72 65 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29  ure: {0}", _sql)
2040: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2050: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20    }..#endif..   
2060: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2070: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
2080: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2090: 20 20 20 20 20 5f 73 71 6c 2e 44 69 73 70 6f 73       _sql.Dispos
20a0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
20b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71  }..          _sq
20c0: 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  l = null;..     
20d0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
20e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
20f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2140: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2150: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  mary>..    /// A
2160: 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 74 65 72  ttempts to inter
2170: 72 75 70 74 20 74 68 65 20 71 75 65 72 79 20 63  rupt the query c
2180: 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69  urrently executi
2190: 6e 67 20 6f 6e 20 74 68 65 20 61 73 73 6f 63 69  ng on the associ
21a0: 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61  ated..    /// na
21b0: 74 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f  tive database co
21c0: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
21d0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
21e0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
21f0: 72 69 64 65 20 76 6f 69 64 20 43 61 6e 63 65 6c  ride void Cancel
2200: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
2210: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2220: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 74  hods.sqlite3_int
2230: 65 72 72 75 70 74 28 5f 73 71 6c 29 3b 0d 0a 20  errupt(_sql);.. 
2240: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
2250: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
2260: 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  // This function
2270: 20 62 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65   binds a user-de
2280: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74  fined function t
2290: 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  o the connection
22a0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
22b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
22c0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63  param name="func
22d0: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 3e 0d  tionAttribute">.
22e0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65  .    /// The <se
22f0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75  e cref="SQLiteFu
2300: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22  nctionAttribute"
2310: 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
2320: 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20  ce containing.. 
2330: 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64     /// the metad
2340: 61 74 61 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ata for the func
2350: 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64  tion to be bound
2360: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
2370: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
2380: 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69  ram name="functi
2390: 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  on">..    /// Th
23a0: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
23b0: 69 74 65 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f  iteFunction"/> o
23c0: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74  bject instance t
23d0: 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
23e0: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63  he..    /// func
23f0: 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64  tion to be bound
2400: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
2410: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
2420: 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22  ram name="flags"
2430: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
2440: 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
2450: 77 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 20  with the parent 
2460: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63  connection objec
2470: 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  t...    /// </pa
2480: 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
2490: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
24a0: 20 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a   BindFunction(..
24b0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
24c0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20  nctionAttribute 
24d0: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
24e0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  e,..        SQLi
24f0: 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74  teFunction funct
2500: 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 53 51  ion,..        SQ
2510: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
2520: 61 67 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20  ags flags..     
2530: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
2540: 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74       SQLiteFunct
2550: 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e  ion.BindFunction
2560: 28 74 68 69 73 2c 20 66 75 6e 63 74 69 6f 6e 41  (this, functionA
2570: 74 74 72 69 62 75 74 65 2c 20 66 75 6e 63 74 69  ttribute, functi
2580: 6f 6e 2c 20 66 6c 61 67 73 29 3b 0d 0a 0d 0a 20  on, flags);.... 
2590: 20 20 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63         if (_func
25a0: 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  tions == null)..
25b0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 66 75 6e              _fun
25c0: 63 74 69 6f 6e 73 20 3d 20 6e 65 77 20 4c 69 73  ctions = new Lis
25d0: 74 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  t<SQLiteFunction
25e0: 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  >();....        
25f0: 5f 66 75 6e 63 74 69 6f 6e 73 2e 41 64 64 28 66  _functions.Add(f
2600: 75 6e 63 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 7d  unction);..    }
2610: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2620: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
2630: 20 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d   Version..    {.
2640: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
2650: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
2660: 75 72 6e 20 53 51 4c 69 74 65 33 2e 53 51 4c 69  urn SQLite3.SQLi
2670: 74 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  teVersion;..    
2680: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
2690: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
26a0: 69 64 65 20 69 6e 74 20 56 65 72 73 69 6f 6e 4e  ide int VersionN
26b0: 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  umber..    {..  
26c0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
26d0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
26e0: 20 53 51 4c 69 74 65 33 2e 53 51 4c 69 74 65 56   SQLite3.SQLiteV
26f0: 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20  ersionNumber;.. 
2700: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2710: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
2720: 61 74 69 63 20 73 74 72 69 6e 67 20 44 65 66 69  atic string Defi
2730: 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20  neConstants..   
2740: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
2750: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2760: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75          StringBu
2770: 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e  ilder result = n
2780: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
2790: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
27a0: 20 49 4c 69 73 74 3c 73 74 72 69 6e 67 3e 20 6c   IList<string> l
27b0: 69 73 74 20 3d 20 53 51 4c 69 74 65 44 65 66 69  ist = SQLiteDefi
27c0: 6e 65 43 6f 6e 73 74 61 6e 74 73 2e 4f 70 74 69  neConstants.Opti
27d0: 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20  onList;....     
27e0: 20 20 20 20 20 20 20 69 66 20 28 6c 69 73 74 20         if (list 
27f0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
2800: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2810: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
2820: 20 28 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74   (string element
2830: 20 69 6e 20 6c 69 73 74 29 0d 0a 20 20 20 20 20   in list)..     
2840: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2860: 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d    if (element ==
2870: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2890: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b0: 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67   if (result.Leng
28c0: 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20  th > 0)..       
28d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e0: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27   result.Append('
28f0: 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   ');....        
2900: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
2910: 6c 74 2e 41 70 70 65 6e 64 28 65 6c 65 6d 65 6e  lt.Append(elemen
2920: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
2930: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2940: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2950: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
2960: 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  lt.ToString();..
2970: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
2980: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2990: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 53   static string S
29a0: 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20  QLiteVersion..  
29b0: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
29c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29d0: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
29e0: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
29f0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
2a00: 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d  _libversion(), -
2a10: 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  1);..      }..  
2a20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
2a30: 6e 61 6c 20 73 74 61 74 69 63 20 69 6e 74 20 53  nal static int S
2a40: 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62  QLiteVersionNumb
2a50: 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  er..    {..     
2a60: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
2a70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
2a80: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
2a90: 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72  s.sqlite3_libver
2aa0: 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 3b 0d 0a  sion_number();..
2ab0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
2ac0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
2ad0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c  tatic string SQL
2ae0: 69 74 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20  iteSourceId..   
2af0: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
2b00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b10: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
2b20: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
2b30: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2b40: 73 6f 75 72 63 65 69 64 28 29 2c 20 2d 31 29 3b  sourceid(), -1);
2b50: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2b60: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2b70: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 41   override bool A
2b80: 75 74 6f 43 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b  utoCommit..    {
2b90: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
2ba0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
2bb0: 74 75 72 6e 20 49 73 41 75 74 6f 63 6f 6d 6d 69  turn IsAutocommi
2bc0: 74 28 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a  t(_sql, _sql);..
2bd0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
2be0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
2bf0: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4c 61 73  verride long Las
2c00: 74 49 6e 73 65 72 74 52 6f 77 49 64 0d 0a 20 20  tInsertRowId..  
2c10: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
2c20: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c        {..#if !PL
2c30: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
2c40: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
2c50: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
2c60: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
2c70: 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
2c80: 72 6f 77 69 64 28 5f 73 71 6c 29 3b 0d 0a 23 65  rowid(_sql);..#e
2c90: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
2ca0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 6c 6f  DARD..        lo
2cb0: 6e 67 20 72 6f 77 49 64 20 3d 20 30 3b 0d 0a 20  ng rowId = 0;.. 
2cc0: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
2cd0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2ce0: 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
2cf0: 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28 5f 73 71  owid_interop(_sq
2d00: 6c 2c 20 72 65 66 20 72 6f 77 49 64 29 3b 0d 0a  l, ref rowId);..
2d10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
2d20: 6f 77 49 64 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  owId;..#else..  
2d30: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
2d40: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
2d50: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
2d60: 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  if..      }..   
2d70: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
2d80: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
2d90: 43 68 61 6e 67 65 73 0d 0a 20 20 20 20 7b 0d 0a  Changes..    {..
2da0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
2db0: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
2dc0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
2dd0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
2de0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
2df0: 69 74 65 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74  ite3_changes_int
2e00: 65 72 6f 70 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c  erop(_sql);..#el
2e10: 73 65 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  se..        retu
2e20: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
2e30: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
2e40: 68 61 6e 67 65 73 28 5f 73 71 6c 29 3b 0d 0a 23  hanges(_sql);..#
2e50: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a  endif..      }..
2e60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
2e70: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
2e80: 6f 6e 67 20 4d 65 6d 6f 72 79 55 73 65 64 0d 0a  ong MemoryUsed..
2e90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
2ea0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21  ..      {..#if !
2eb0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
2ec0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
2ed0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
2ee0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
2ef0: 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65  lite3_memory_use
2f00: 64 28 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  d();..#elif !SQL
2f10: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
2f20: 20 20 20 20 20 20 6c 6f 6e 67 20 62 79 74 65 73        long bytes
2f30: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 55   = 0;..        U
2f40: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2f50: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  ds.sqlite3_memor
2f60: 79 5f 75 73 65 64 5f 69 6e 74 65 72 6f 70 28 72  y_used_interop(r
2f70: 65 66 20 62 79 74 65 73 29 3b 0d 0a 20 20 20 20  ef bytes);..    
2f80: 20 20 20 20 72 65 74 75 72 6e 20 62 79 74 65 73      return bytes
2f90: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
2fa0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
2fb0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
2fc0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
2fd0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
2fe0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
2ff0: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d  verride long Mem
3000: 6f 72 79 48 69 67 68 77 61 74 65 72 0d 0a 20 20  oryHighwater..  
3010: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
3020: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c        {..#if !PL
3030: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
3040: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
3050: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
3060: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3070: 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77  te3_memory_highw
3080: 61 74 65 72 28 30 29 3b 0d 0a 23 65 6c 69 66 20  ater(0);..#elif 
3090: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
30a0: 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 62  ..        long b
30b0: 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ytes = 0;..     
30c0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
30d0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
30e0: 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 5f  emory_highwater_
30f0: 69 6e 74 65 72 6f 70 28 30 2c 20 72 65 66 20 62  interop(0, ref b
3100: 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  ytes);..        
3110: 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23  return bytes;..#
3120: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
3130: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
3140: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
3150: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
3160: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
3170: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
3180: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
3190: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   non-zero if the
31a0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6e 61 74 69   underlying nati
31b0: 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ve connection ha
31c0: 6e 64 6c 65 20 69 73 20 6f 77 6e 65 64 0d 0a 20  ndle is owned.. 
31d0: 20 20 20 2f 2f 2f 20 62 79 20 74 68 69 73 20 69     /// by this i
31e0: 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f  nstance...    //
31f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
3200: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
3210: 69 64 65 20 62 6f 6f 6c 20 4f 77 6e 48 61 6e 64  ide bool OwnHand
3220: 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  le..    {..     
3230: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
3240: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
3250: 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29  f (_sql == null)
3260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3270: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
3280: 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20  teException("no 
3290: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
32a0: 65 20 61 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a  e available");..
32b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
32c0: 74 75 72 6e 20 5f 73 71 6c 2e 4f 77 6e 48 61 6e  turn _sql.OwnHan
32d0: 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  dle;..        }.
32e0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
32f0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
3300: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
3310: 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28  SetMemoryStatus(
3320: 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20  bool value)..   
3330: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
3340: 72 6e 20 53 74 61 74 69 63 53 65 74 4d 65 6d 6f  rn StaticSetMemo
3350: 72 79 53 74 61 74 75 73 28 76 61 6c 75 65 29 3b  ryStatus(value);
3360: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
3370: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53  nternal static S
3380: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
3390: 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74  taticSetMemorySt
33a0: 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29  atus(bool value)
33b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
33c0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
33d0: 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
33e0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
33f0: 33 5f 63 6f 6e 66 69 67 5f 69 6e 74 28 0d 0a 20  3_config_int(.. 
3400: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
3410: 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53  eConfigOpsEnum.S
3420: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d  QLITE_CONFIG_MEM
3430: 53 54 41 54 55 53 2c 20 76 61 6c 75 65 20 3f 20  STATUS, value ? 
3440: 31 20 3a 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20  1 : 0);....     
3450: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20     return rc;.. 
3460: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
3470: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
3480: 2f 2f 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20  // Shutdown the 
3490: 53 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 73 6f  SQLite engine so
34a0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
34b0: 72 65 73 74 61 72 74 65 64 20 77 69 74 68 20 64  restarted with d
34c0: 69 66 66 65 72 65 6e 74 20 63 6f 6e 66 69 67 20  ifferent config 
34d0: 6f 70 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f  options...    //
34e0: 2f 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61  / We depend on a
34f0: 75 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  uto initializati
3500: 6f 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a  on to recover...
3510: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
3520: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
3530: 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72  urns>Returns a r
3540: 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75  esult code</retu
3550: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
3560: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
3570: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 68 75 74  teErrorCode Shut
3580: 64 6f 77 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  down()..    {.. 
3590: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
35a0: 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61  orCode rc = Unsa
35b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
35c0: 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e  sqlite3_shutdown
35d0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ();..        ret
35e0: 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a  urn rc;..    }..
35f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
3600: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74  ry>..    /// Det
3610: 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20 61  ermines if the a
3620: 73 73 6f 63 69 61 74 65 64 20 6e 61 74 69 76 65  ssociated native
3630: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
3640: 6c 65 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20  le is open...   
3650: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
3660: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
3670: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d  s>..    /// Non-
3680: 7a 65 72 6f 20 69 66 20 74 68 65 20 61 73 73 6f  zero if the asso
3690: 63 69 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f  ciated native co
36a0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
36b0: 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f  is open...    //
36c0: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
36d0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
36e0: 69 64 65 20 62 6f 6f 6c 20 49 73 4f 70 65 6e 28  ide bool IsOpen(
36f0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3700: 20 20 72 65 74 75 72 6e 20 28 5f 73 71 6c 20 21    return (_sql !
3710: 3d 20 6e 75 6c 6c 29 20 26 26 20 21 5f 73 71 6c  = null) && !_sql
3720: 2e 49 73 49 6e 76 61 6c 69 64 20 26 26 20 21 5f  .IsInvalid && !_
3730: 73 71 6c 2e 49 73 43 6c 6f 73 65 64 3b 0d 0a 20  sql.IsClosed;.. 
3740: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
3750: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
3760: 69 64 20 4f 70 65 6e 28 73 74 72 69 6e 67 20 73  id Open(string s
3770: 74 72 46 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 69  trFilename, SQLi
3780: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
3790: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  s connectionFlag
37a0: 73 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61  s, SQLiteOpenFla
37b0: 67 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61 67 73  gsEnum openFlags
37c0: 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53 69 7a  , int maxPoolSiz
37d0: 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29  e, bool usePool)
37e0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 2f  ..    {..      /
37f0: 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  /..      // NOTE
3800: 3a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  : If the databas
3810: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
3820: 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20  currently open, 
3830: 61 74 74 65 6d 70 74 20 74 6f 0d 0a 20 20 20 20  attempt to..    
3840: 20 20 2f 2f 20 20 20 20 20 20 20 63 6c 6f 73 65    //       close
3850: 20 69 74 20 6e 6f 77 2e 20 20 54 68 69 73 20 6d   it now.  This m
3860: 75 73 74 20 62 65 20 64 6f 6e 65 20 62 65 63 61  ust be done beca
3870: 75 73 65 20 74 68 65 20 66 69 6c 65 20 6e 61 6d  use the file nam
3880: 65 20 6f 72 0d 0a 20 20 20 20 20 20 2f 2f 20 20  e or..      //  
3890: 20 20 20 20 20 6f 74 68 65 72 20 70 61 72 61 6d       other param
38a0: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 69  eters that may i
38b0: 6d 70 61 63 74 20 74 68 65 20 75 6e 64 65 72 6c  mpact the underl
38c0: 79 69 6e 67 20 64 61 74 61 62 61 73 65 0d 0a 20  ying database.. 
38d0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f       //       co
38e0: 6e 6e 65 63 74 69 6f 6e 20 6d 61 79 20 68 61 76  nnection may hav
38f0: 65 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20 20 20  e changed...    
3900: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28    //..      if (
3910: 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 43 6c  _sql != null) Cl
3920: 6f 73 65 28 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  ose(true);....  
3930: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f      //..      //
3940: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f   NOTE: If the co
3950: 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74  nnection was not
3960: 20 63 6c 6f 73 65 64 20 73 75 63 63 65 73 73 66   closed successf
3970: 75 6c 6c 79 2c 20 74 68 72 6f 77 20 61 6e 0d 0a  ully, throw an..
3980: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65        //       e
3990: 78 63 65 70 74 69 6f 6e 20 6e 6f 77 2e 0d 0a 20  xception now... 
39a0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69       //..      i
39b0: 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  f (_sql != null)
39c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68 72 6f  ..          thro
39d0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
39e0: 70 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f  ption("connectio
39f0: 6e 20 68 61 6e 64 6c 65 20 69 73 20 73 74 69 6c  n handle is stil
3a00: 6c 20 61 63 74 69 76 65 22 29 3b 0d 0a 0d 0a 20  l active");.... 
3a10: 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20       _usePool = 
3a20: 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20  usePool;..      
3a30: 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 73 74 72 46  _fileName = strF
3a40: 69 6c 65 6e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ilename;....    
3a50: 20 20 69 66 20 28 75 73 65 50 6f 6f 6c 29 0d 0a    if (usePool)..
3a60: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3a70: 20 5f 73 71 6c 20 3d 20 53 51 4c 69 74 65 43 6f   _sql = SQLiteCo
3a80: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 52 65 6d  nnectionPool.Rem
3a90: 6f 76 65 28 73 74 72 46 69 6c 65 6e 61 6d 65 2c  ove(strFilename,
3aa0: 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 6f 75   maxPoolSize, ou
3ab0: 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b  t _poolVersion);
3ac0: 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
3ad0: 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
3ae0: 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
3af0: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
3b00: 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Line(String.Form
3b10: 61 74 28 22 4f 70 65 6e 20 28 50 6f 6f 6c 29 3a  at("Open (Pool):
3b20: 20 7b 30 7d 22 2c 20 28 5f 73 71 6c 20 21 3d 20   {0}", (_sql != 
3b30: 6e 75 6c 6c 29 20 3f 20 5f 73 71 6c 2e 54 6f 53  null) ? _sql.ToS
3b40: 74 72 69 6e 67 28 29 20 3a 20 22 3c 6e 75 6c 6c  tring() : "<null
3b50: 3e 22 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  >"));..#endif.. 
3b60: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3b70: 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  if (_sql == null
3b80: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
3b90: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
3ba0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3bb0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
3bc0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3bd0: 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f     finally /* NO
3be0: 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74  TE: Thread.Abort
3bf0: 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a  () protection. *
3c00: 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  /..        {..  
3c10: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 64          IntPtr d
3c20: 62 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51  b;..          SQ
3c30: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b  LiteErrorCode n;
3c40: 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
3c50: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
3c60: 20 20 20 20 69 66 20 28 28 63 6f 6e 6e 65 63 74      if ((connect
3c70: 69 6f 6e 46 6c 61 67 73 20 26 20 53 51 4c 69 74  ionFlags & SQLit
3c80: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
3c90: 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63  .NoExtensionFunc
3ca0: 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69 74 65  tions) != SQLite
3cb0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
3cc0: 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74  NoExtensionFunct
3cd0: 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20  ions)..         
3ce0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3cf0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
3d00: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3d10: 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28 54 6f 55  open_interop(ToU
3d20: 54 46 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29  TF8(strFilename)
3d30: 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 6f 75 74  , openFlags, out
3d40: 20 64 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20   db);..         
3d50: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c   }..          el
3d60: 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  se..#endif..    
3d70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3d80: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
3d90: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
3da0: 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 54 6f 55  ite3_open_v2(ToU
3db0: 54 46 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29  TF8(strFilename)
3dc0: 2c 20 6f 75 74 20 64 62 2c 20 6f 70 65 6e 46 6c  , out db, openFl
3dd0: 61 67 73 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  ags, IntPtr.Zero
3de0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
3df0: 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  ...#if !NET_COMP
3e00: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
3e10: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
3e20: 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
3e30: 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72  eLine(String.For
3e40: 6d 61 74 28 22 4f 70 65 6e 3a 20 7b 30 7d 22 2c  mat("Open: {0}",
3e50: 20 64 62 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a   db));..#endif..
3e60: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
3e70: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
3e80: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
3e90: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
3ea0: 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20  on(n, null);..  
3eb0: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
3ec0: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
3ed0: 69 6f 6e 48 61 6e 64 6c 65 28 64 62 2c 20 74 72  ionHandle(db, tr
3ee0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
3ef0: 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f  .        lock (_
3f00: 73 71 6c 29 20 7b 20 2f 2a 20 48 41 43 4b 3a 20  sql) { /* HACK: 
3f10: 46 6f 72 63 65 20 74 68 65 20 53 79 6e 63 42 6c  Force the SyncBl
3f20: 6f 63 6b 20 74 6f 20 62 65 20 22 63 72 65 61 74  ock to be "creat
3f30: 65 64 22 20 6e 6f 77 2e 20 2a 2f 20 7d 0d 0a 20  ed" now. */ }.. 
3f40: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3f50: 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e  // Bind function
3f60: 73 20 74 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63  s to this connec
3f70: 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79 20 70 72  tion.  If any pr
3f80: 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73  evious functions
3f90: 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d   of the same nam
3fa0: 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77 65 72 65  e..      // were
3fb0: 20 61 6c 72 65 61 64 79 20 62 6f 75 6e 64 2c 20   already bound, 
3fc0: 74 68 65 6e 20 74 68 65 20 6e 65 77 20 62 69 6e  then the new bin
3fd0: 64 69 6e 67 73 20 72 65 70 6c 61 63 65 20 74 68  dings replace th
3fe0: 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20 20 69 66  e old...      if
3ff0: 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61   ((connectionFla
4000: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
4010: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e  ctionFlags.NoBin
4020: 64 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53  dFunctions) != S
4030: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
4040: 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75 6e 63 74  lags.NoBindFunct
4050: 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  ions)..      {..
4060: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 66            if (_f
4070: 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  unctions == null
4080: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4090: 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65   _functions = ne
40a0: 77 20 4c 69 73 74 3c 53 51 4c 69 74 65 46 75 6e  w List<SQLiteFun
40b0: 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20  ction>();....   
40c0: 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e         _function
40d0: 73 2e 41 64 64 52 61 6e 67 65 28 6e 65 77 20 4c  s.AddRange(new L
40e0: 69 73 74 3c 53 51 4c 69 74 65 46 75 6e 63 74 69  ist<SQLiteFuncti
40f0: 6f 6e 3e 28 53 51 4c 69 74 65 46 75 6e 63 74 69  on>(SQLiteFuncti
4100: 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73  on.BindFunctions
4110: 28 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f  (this, connectio
4120: 6e 46 6c 61 67 73 29 29 29 3b 0d 0a 20 20 20 20  nFlags)));..    
4130: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 53 65 74    }....      Set
4140: 54 69 6d 65 6f 75 74 28 30 29 3b 0d 0a 20 20 20  Timeout(0);..   
4150: 20 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65 28     GC.KeepAlive(
4160: 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  _sql);..    }...
4170: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
4180: 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c 65 61  erride void Clea
4190: 72 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a  rPool()..    {..
41a0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
41b0: 65 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72  ectionPool.Clear
41c0: 50 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b  Pool(_fileName);
41d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
41e0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
41f0: 20 69 6e 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29   int CountPool()
4200: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4210: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
4220: 6e 67 2c 20 69 6e 74 3e 20 63 6f 75 6e 74 73 20  ng, int> counts 
4230: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
4240: 20 69 6e 74 20 6f 70 65 6e 43 6f 75 6e 74 20 3d   int openCount =
4250: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74   0;..        int
4260: 20 63 6c 6f 73 65 43 6f 75 6e 74 20 3d 20 30 3b   closeCount = 0;
4270: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 74 6f  ..        int to
4280: 74 61 6c 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d  talCount = 0;...
4290: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43  .        SQLiteC
42a0: 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65  onnectionPool.Ge
42b0: 74 43 6f 75 6e 74 73 28 5f 66 69 6c 65 4e 61 6d  tCounts(_fileNam
42c0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
42d0: 72 65 66 20 63 6f 75 6e 74 73 2c 20 72 65 66 20  ref counts, ref 
42e0: 6f 70 65 6e 43 6f 75 6e 74 2c 20 72 65 66 20 63  openCount, ref c
42f0: 6c 6f 73 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  loseCount,..    
4300: 20 20 20 20 20 20 20 20 72 65 66 20 74 6f 74 61          ref tota
4310: 6c 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  lCount);....    
4320: 20 20 20 20 72 65 74 75 72 6e 20 74 6f 74 61 6c      return total
4330: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Count;..    }...
4340: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
4350: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54  erride void SetT
4360: 69 6d 65 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65  imeout(int nTime
4370: 6f 75 74 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a 20  outMS)..    {.. 
4380: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
4390: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
43a0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
43b0: 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
43c0: 74 28 5f 73 71 6c 2c 20 6e 54 69 6d 65 6f 75 74  t(_sql, nTimeout
43d0: 4d 53 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  MS);..      if (
43e0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
43f0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
4400: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
4410: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
4420: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
4430: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
4440: 65 72 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70  erride bool Step
4450: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
4460: 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20   stmt)..    {.. 
4470: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
4480: 43 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 52  Code n;..      R
4490: 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c  andom rnd = null
44a0: 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74  ;..      uint st
44b0: 61 72 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29  arttick = (uint)
44c0: 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b  Environment.Tick
44d0: 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 75 69  Count;..      ui
44e0: 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 75 69  nt timeout = (ui
44f0: 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e  nt)(stmt._comman
4500: 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75  d._commandTimeou
4510: 74 20 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a 20 20  t * 1000);....  
4520: 20 20 20 20 77 68 69 6c 65 20 28 74 72 75 65 29      while (true)
4530: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
4540: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
4550: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
4560: 65 33 5f 73 74 65 70 28 73 74 6d 74 2e 5f 73 71  e3_step(stmt._sq
4570: 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 0d 0a 20  lite_stmt);.... 
4580: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
4590: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
45a0: 52 6f 77 29 20 72 65 74 75 72 6e 20 74 72 75 65  Row) return true
45b0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
45c0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
45d0: 6f 64 65 2e 44 6f 6e 65 29 20 72 65 74 75 72 6e  ode.Done) return
45e0: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
45f0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
4600: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
4610: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4620: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
4630: 72 43 6f 64 65 20 72 3b 0d 0a 0d 0a 20 20 20 20  rCode r;....    
4640: 20 20 20 20 20 20 2f 2f 20 41 6e 20 65 72 72 6f        // An erro
4650: 72 20 6f 63 63 75 72 72 65 64 2c 20 61 74 74 65  r occurred, atte
4660: 6d 70 74 20 74 6f 20 72 65 73 65 74 20 74 68 65  mpt to reset the
4670: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 66 20   statement.  If 
4680: 74 68 65 20 72 65 73 65 74 20 77 6f 72 6b 65 64  the reset worked
4690: 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20   because the..  
46a0: 20 20 20 20 20 20 20 20 2f 2f 20 73 63 68 65 6d          // schem
46b0: 61 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 72  a has changed, r
46c0: 65 2d 74 72 79 20 74 68 65 20 73 74 65 70 20 61  e-try the step a
46d0: 67 61 69 6e 2e 20 20 49 66 20 69 74 20 65 72 72  gain.  If it err
46e0: 6f 72 65 64 20 6f 75 72 20 62 65 63 61 75 73 65  ored our because
46f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 0d 0a 20   the database.. 
4700: 20 20 20 20 20 20 20 20 20 2f 2f 20 69 73 20 6c           // is l
4710: 6f 63 6b 65 64 2c 20 74 68 65 6e 20 6b 65 65 70  ocked, then keep
4720: 20 72 65 74 72 79 69 6e 67 20 75 6e 74 69 6c 20   retrying until 
4730: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 69 6d 65  the command time
4740: 6f 75 74 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20  out occurs...   
4750: 20 20 20 20 20 20 20 72 20 3d 20 52 65 73 65 74         r = Reset
4760: 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (stmt);....     
4770: 20 20 20 20 20 69 66 20 28 72 20 3d 3d 20 53 51       if (r == SQ
4780: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
4790: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
47a0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
47b0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
47c0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a  astError());....
47d0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
47e0: 66 20 28 28 72 20 3d 3d 20 53 51 4c 69 74 65 45  f ((r == SQLiteE
47f0: 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20  rrorCode.Locked 
4800: 7c 7c 20 72 20 3d 3d 20 53 51 4c 69 74 65 45 72  || r == SQLiteEr
4810: 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 26 26  rorCode.Busy) &&
4820: 20 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21   stmt._command !
4830: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
4840: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4850: 20 20 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67    // Keep trying
4860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
4870: 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f   (rnd == null) /
4880: 2f 20 46 69 72 73 74 20 74 69 6d 65 20 77 65 27  / First time we'
4890: 76 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74  ve encountered t
48a0: 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20  he lock..       
48b0: 20 20 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77         rnd = new
48c0: 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20   Random();....  
48d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20            // If 
48e0: 77 65 27 76 65 20 65 78 63 65 65 64 65 64 20 74  we've exceeded t
48f0: 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d  he command's tim
4900: 65 6f 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e  eout, give up an
4910: 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72  d throw an error
4920: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
4930: 20 28 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d   ((uint)Environm
4940: 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20  ent.TickCount - 
4950: 73 74 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65  starttick > time
4960: 6f 75 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  out)..          
4970: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4980: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
4990: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 2c 20  iteException(r, 
49a0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
49b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
49c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
49d0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
49e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
49f0: 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65  // Otherwise sle
4a00: 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20  ep for a random 
4a10: 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75  amount of time u
4a20: 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20  p to 150ms..    
4a30: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
4a40: 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61  .Threading.Threa
4a50: 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74  d.Sleep(rnd.Next
4a60: 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20  (1, 150));..    
4a70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4a80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4a90: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..    
4aa0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
4ab0: 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
4ac0: 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73 65 74  eErrorCode Reset
4ad0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
4ae0: 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20   stmt)..    {.. 
4af0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
4b00: 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21  Code n;....#if !
4b10: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
4b20: 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
4b30: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4b40: 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74  qlite3_reset_int
4b50: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
4b60: 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d  e_stmt);..#else.
4b70: 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
4b80: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4b90: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d  qlite3_reset(stm
4ba0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b  t._sqlite_stmt);
4bb0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
4bc0: 20 20 2f 2f 20 49 66 20 74 68 65 20 73 63 68 65    // If the sche
4bd0: 6d 61 20 63 68 61 6e 67 65 64 2c 20 74 72 79 20  ma changed, try 
4be0: 61 6e 64 20 72 65 2d 70 72 65 70 61 72 65 20 69  and re-prepare i
4bf0: 74 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d  t..      if (n =
4c00: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
4c10: 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20  e.Schema)..     
4c20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 52   {..        // R
4c30: 65 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79 20  ecreate a dummy 
4c40: 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20  statement..     
4c50: 20 20 20 73 74 72 69 6e 67 20 73 74 72 3b 0d 0a     string str;..
4c60: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
4c70: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 74  QLiteStatement t
4c80: 6d 70 20 3d 20 50 72 65 70 61 72 65 28 6e 75 6c  mp = Prepare(nul
4c90: 6c 2c 20 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74  l, stmt._sqlStat
4ca0: 65 6d 65 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69  ement, null, (ui
4cb0: 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e  nt)(stmt._comman
4cc0: 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75  d._commandTimeou
4cd0: 74 20 2a 20 31 30 30 30 29 2c 20 6f 75 74 20 73  t * 1000), out s
4ce0: 74 72 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  tr))..        {.
4cf0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46 69  .          // Fi
4d00: 6e 61 6c 69 7a 65 20 74 68 65 20 65 78 69 73 74  nalize the exist
4d10: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20  ing statement.. 
4d20: 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73           stmt._s
4d30: 71 6c 69 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f  qlite_stmt.Dispo
4d40: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
4d50: 20 2f 2f 20 52 65 61 73 73 69 67 6e 20 61 20 6e   // Reassign a n
4d60: 65 77 20 73 74 61 74 65 6d 65 6e 74 20 70 6f 69  ew statement poi
4d70: 6e 74 65 72 20 74 6f 20 74 68 65 20 6f 6c 64 20  nter to the old 
4d80: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c  statement and cl
4d90: 65 61 72 20 74 68 65 20 74 65 6d 70 6f 72 61 72  ear the temporar
4da0: 79 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 20  y one..         
4db0: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
4dc0: 6d 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65  mt = tmp._sqlite
4dd0: 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20  _stmt;..        
4de0: 20 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74    tmp._sqlite_st
4df0: 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  mt = null;....  
4e00: 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70          // Reapp
4e10: 6c 79 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20  ly parameters.. 
4e20: 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69           stmt.Bi
4e30: 6e 64 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d  ndParameters();.
4e40: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
4e50: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
4e60: 65 45 72 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e 6f  eErrorCode.Unkno
4e70: 77 6e 3b 20 2f 2f 20 52 65 73 65 74 20 77 61 73  wn; // Reset was
4e80: 20 4f 4b 2c 20 77 69 74 68 20 73 63 68 65 6d 61   OK, with schema
4e90: 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d   change..      }
4ea0: 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20  ..      else if 
4eb0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
4ec0: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
4ed0: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
4ee0: 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20  Code.Busy)..    
4ef0: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d      return n;...
4f00: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
4f10: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
4f20: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72  Ok)..        thr
4f30: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
4f40: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
4f50: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20  tError());....  
4f60: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 20 2f 2f      return n; //
4f70: 20 57 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f   We reset OK, no
4f80: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0d   schema changes.
4f90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
4fa0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
4fb0: 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72  string GetLastEr
4fc0: 72 6f 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ror()..    {..  
4fd0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
4fe0: 65 42 61 73 65 2e 47 65 74 4c 61 73 74 45 72 72  eBase.GetLastErr
4ff0: 6f 72 28 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d  or(_sql, _sql);.
5000: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
5010: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5020: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
5030: 50 72 65 70 61 72 65 28 53 51 4c 69 74 65 43 6f  Prepare(SQLiteCo
5040: 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74  nnection cnn, st
5050: 72 69 6e 67 20 73 74 72 53 71 6c 2c 20 53 51 4c  ring strSql, SQL
5060: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 70 72 65  iteStatement pre
5070: 76 69 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d 65  vious, uint time
5080: 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74 72 69 6e  outMS, out strin
5090: 67 20 73 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20  g strRemain)..  
50a0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 21    {..      if (!
50b0: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
50c0: 6d 70 74 79 28 73 74 72 53 71 6c 29 29 0d 0a 20  mpty(strSql)).. 
50d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
50e0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e  //..        // N
50f0: 4f 54 45 3a 20 53 51 4c 69 74 65 20 64 6f 65 73  OTE: SQLite does
5100: 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 74 68 65   not support the
5110: 20 63 6f 6e 63 65 70 74 20 6f 66 20 73 65 70 61   concept of sepa
5120: 72 61 74 65 20 73 63 68 65 6d 61 73 0d 0a 20 20  rate schemas..  
5130: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
5140: 6e 20 6f 6e 65 20 64 61 74 61 62 61 73 65 3b 20  n one database; 
5150: 74 68 65 72 65 66 6f 72 65 2c 20 72 65 6d 6f 76  therefore, remov
5160: 65 20 74 68 65 20 62 61 73 65 20 73 63 68 65 6d  e the base schem
5170: 61 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  a name..        
5180: 2f 2f 20 20 20 20 20 20 20 75 73 65 64 20 74 6f  //       used to
5190: 20 73 6d 6f 6f 74 68 20 69 6e 74 65 67 72 61 74   smooth integrat
51a0: 69 6f 6e 20 77 69 74 68 20 74 68 65 20 62 61 73  ion with the bas
51b0: 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
51c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
51d0: 20 20 20 64 61 74 61 20 63 6c 61 73 73 65 73 2e     data classes.
51e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
51f0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 62 61 73        string bas
5200: 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 28 63  eSchemaName = (c
5210: 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e  nn != null) ? cn
5220: 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  n._baseSchemaNam
5230: 65 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  e : null;....   
5240: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
5250: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 62  .IsNullOrEmpty(b
5260: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 29 0d  aseSchemaName)).
5270: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
5280: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
5290: 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a  trSql.Replace(..
52a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
52b0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74  ring.Format(Cult
52c0: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
52d0: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
52e0: 20 20 20 20 20 20 20 20 20 22 5b 7b 30 7d 5d 2e           "[{0}].
52f0: 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  ", baseSchemaNam
5300: 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  e), String.Empty
5310: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5320: 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e  strSql = strSql.
5330: 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20  Replace(..      
5340: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
5350: 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
5360: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
5370: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
5380: 20 20 20 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53     "{0}.", baseS
5390: 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69  chemaName), Stri
53a0: 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20  ng.Empty);..    
53b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
53c0: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f  ..      SQLiteCo
53d0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
53e0: 61 67 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ags =..         
53f0: 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f   (cnn != null) ?
5400: 20 63 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51 4c   cnn.Flags : SQL
5410: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
5420: 67 73 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20  gs.Default;.... 
5430: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
5440: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
5450: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61  onFlags.LogPrepa
5460: 72 65 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  re) == SQLiteCon
5470: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
5480: 50 72 65 70 61 72 65 29 0d 0a 20 20 20 20 20 20  Prepare)..      
5490: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
54a0: 28 28 73 74 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c  ((strSql == null
54b0: 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 4c 65 6e  ) || (strSql.Len
54c0: 67 74 68 20 3d 3d 20 30 29 20 7c 7c 20 28 73 74  gth == 0) || (st
54d0: 72 53 71 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e 67  rSql.Trim().Leng
54e0: 74 68 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20  th == 0))..     
54f0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
5500: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 22 50  og.LogMessage("P
5510: 72 65 70 61 72 69 6e 67 20 7b 3c 6e 6f 74 68 69  reparing {<nothi
5520: 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20 20  ng>}...");..    
5530: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
5540: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
5550: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
5560: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
5570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5580: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
5590: 72 65 6e 74 43 75 6c 74 75 72 65 2c 20 22 50 72  rentCulture, "Pr
55a0: 65 70 61 72 69 6e 67 20 7b 7b 7b 30 7d 7d 7d 2e  eparing {{{0}}}.
55b0: 2e 2e 22 2c 20 73 74 72 53 71 6c 29 29 3b 0d 0a  ..", strSql));..
55c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
55d0: 20 49 6e 74 50 74 72 20 73 74 6d 74 20 3d 20 49   IntPtr stmt = I
55e0: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
55f0: 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20     IntPtr ptr = 
5600: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
5610: 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
5620: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
5630: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 53 51 4c 69  rorCode n = SQLi
5640: 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65  teErrorCode.Sche
5650: 6d 61 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72  ma;..      int r
5660: 65 74 72 69 65 73 20 3d 20 30 3b 0d 0a 20 20 20  etries = 0;..   
5670: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
5680: 55 54 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20  UTF8(strSql);.. 
5690: 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65       string type
56a0: 64 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  defs = null;..  
56b0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
56c0: 65 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d  ent cmd = null;.
56d0: 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e  .      Random rn
56e0: 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  d = null;..     
56f0: 20 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20   uint starttick 
5700: 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d  = (uint)Environm
5710: 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a  ent.TickCount;..
5720: 0d 0a 20 20 20 20 20 20 47 43 48 61 6e 64 6c 65  ..      GCHandle
5730: 20 68 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e 64   handle = GCHand
5740: 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48 61  le.Alloc(b, GCHa
5750: 6e 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64 29  ndleType.Pinned)
5760: 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
5770: 70 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41 64  psql = handle.Ad
5780: 64 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63 74  drOfPinnedObject
5790: 28 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74  ();..      SQLit
57a0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
57b0: 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65   statementHandle
57c0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
57d0: 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  try..      {..  
57e0: 20 20 20 20 20 20 77 68 69 6c 65 20 28 28 6e 20        while ((n 
57f0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
5800: 64 65 2e 53 63 68 65 6d 61 20 7c 7c 20 6e 20 3d  de.Schema || n =
5810: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
5820: 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d  e.Locked || n ==
5830: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
5840: 2e 42 75 73 79 29 20 26 26 20 72 65 74 72 69 65  .Busy) && retrie
5850: 73 20 3c 20 33 29 0d 0a 20 20 20 20 20 20 20 20  s < 3)..        
5860: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 72 79  {..          try
5870: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
5880: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
5890: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
58a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
58b0: 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54    finally /* NOT
58c0: 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28  E: Thread.Abort(
58d0: 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f  ) protection. */
58e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23  ..          {..#
58f0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
5900: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ARD..           
5910: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
5920: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
5930: 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70  _prepare_interop
5940: 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c  (_sql, psql, b.L
5950: 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20 73  ength - 1, out s
5960: 74 6d 74 2c 20 6f 75 74 20 70 74 72 2c 20 6f 75  tmt, out ptr, ou
5970: 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  t len);..#else..
5980: 23 69 66 20 55 53 45 5f 50 52 45 50 41 52 45 5f  #if USE_PREPARE_
5990: 56 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  V2..            
59a0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
59b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
59c0: 70 72 65 70 61 72 65 5f 76 32 28 5f 73 71 6c 2c  prepare_v2(_sql,
59d0: 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20   psql, b.Length 
59e0: 2d 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f  - 1, out stmt, o
59f0: 75 74 20 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d  ut ptr);..#else.
5a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
5a10: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
5a20: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65  hods.sqlite3_pre
5a30: 70 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c  pare(_sql, psql,
5a40: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f   b.Length - 1, o
5a50: 75 74 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72  ut stmt, out ptr
5a60: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
5a70: 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31          len = -1
5a80: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66  ;..#endif....#if
5a90: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
5aa0: 20 26 26 20 54 52 41 43 45 5f 53 54 41 54 45 4d   && TRACE_STATEM
5ab0: 45 4e 54 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ENT..           
5ac0: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
5ad0: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
5ae0: 50 72 65 70 61 72 65 20 28 7b 30 7d 29 3a 20 7b  Prepare ({0}): {
5af0: 31 7d 22 2c 20 6e 2c 20 73 74 6d 74 29 29 3b 0d  1}", n, stmt));.
5b00: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
5b10: 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d         if ((n ==
5b20: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
5b30: 2e 4f 6b 29 20 26 26 20 28 73 74 6d 74 20 21 3d  .Ok) && (stmt !=
5b40: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a   IntPtr.Zero))..
5b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
5b60: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20  atementHandle = 
5b70: 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d  new SQLiteStatem
5b80: 65 6e 74 48 61 6e 64 6c 65 28 5f 73 71 6c 2c 20  entHandle(_sql, 
5b90: 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  stmt);..        
5ba0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5bb0: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
5bc0: 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61  ErrorCode.Schema
5bd0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
5be0: 65 74 72 69 65 73 2b 2b 3b 0d 0a 20 20 20 20 20  etries++;..     
5bf0: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
5c00: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
5c10: 64 65 2e 45 72 72 6f 72 29 0d 0a 20 20 20 20 20  de.Error)..     
5c20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5c30: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43      if (String.C
5c40: 6f 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45 72  ompare(GetLastEr
5c50: 72 6f 72 28 29 2c 20 22 6e 65 61 72 20 5c 22 54  ror(), "near \"T
5c60: 59 50 45 53 5c 22 3a 20 73 79 6e 74 61 78 20 65  YPES\": syntax e
5c70: 72 72 6f 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d  rror", StringCom
5c80: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
5c90: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
5ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
5cc0: 6e 74 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e  nt pos = strSql.
5cd0: 49 6e 64 65 78 4f 66 28 27 3b 27 29 3b 0d 0a 20  IndexOf(';');.. 
5ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
5cf0: 28 70 6f 73 20 3d 3d 20 2d 31 29 20 70 6f 73 20  (pos == -1) pos 
5d00: 3d 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  = strSql.Length 
5d10: 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  - 1;....        
5d20: 20 20 20 20 20 20 74 79 70 65 64 65 66 73 20 3d        typedefs =
5d30: 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e   strSql.Substrin
5d40: 67 28 30 2c 20 70 6f 73 20 2b 20 31 29 3b 0d 0a  g(0, pos + 1);..
5d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
5d60: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 53 75  rSql = strSql.Su
5d70: 62 73 74 72 69 6e 67 28 70 6f 73 20 2b 20 31 29  bstring(pos + 1)
5d80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5d90: 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22     strRemain = "
5da0: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
5db0: 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d      while (cmd =
5dc0: 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c  = null && strSql
5dd0: 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20  .Length > 0)..  
5de0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
5e00: 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e  md = Prepare(cnn
5e10: 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f  , strSql, previo
5e20: 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f  us, timeoutMS, o
5e30: 75 74 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a  ut strRemain);..
5e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e50: 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61  strSql = strRema
5e60: 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in;..           
5e70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
5e80: 20 20 20 20 20 20 69 66 20 28 63 6d 64 20 21 3d        if (cmd !=
5e90: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
5ea0: 20 20 20 20 20 20 20 20 63 6d 64 2e 53 65 74 54          cmd.SetT
5eb0: 79 70 65 73 28 74 79 70 65 64 65 66 73 29 3b 0d  ypes(typedefs);.
5ec0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5ed0: 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20   return cmd;..  
5ee0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66            }..#if
5ef0: 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f   (NET_35 || NET_
5f00: 34 30 20 7c 7c 20 4e 45 54 5f 34 35 29 20 26 26  40 || NET_45) &&
5f10: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
5f20: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
5f30: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
5f40: 20 28 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d   (_buildingSchem
5f50: 61 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74  a == false && St
5f60: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74  ring.Compare(Get
5f70: 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 30 2c 20  LastError(), 0, 
5f80: 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  "no such table: 
5f90: 54 45 4d 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c  TEMP.SCHEMA", 0,
5fa0: 20 32 36 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61   26, StringCompa
5fb0: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
5fc0: 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a  oreCase) == 0)..
5fd0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
5ff0: 52 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 20 20  Remain = "";..  
6000: 20 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69              _bui
6010: 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 74 72  ldingSchema = tr
6020: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
6030: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
6040: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6050: 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65           ISQLite
6060: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
6070: 20 65 78 74 20 3d 20 28 28 49 53 65 72 76 69 63   ext = ((IServic
6080: 65 50 72 6f 76 69 64 65 72 29 53 51 4c 69 74 65  eProvider)SQLite
6090: 46 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65  Factory.Instance
60a0: 29 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70  ).GetService(typ
60b0: 65 6f 66 28 49 53 51 4c 69 74 65 53 63 68 65 6d  eof(ISQLiteSchem
60c0: 61 45 78 74 65 6e 73 69 6f 6e 73 29 29 20 61 73  aExtensions)) as
60d0: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
60e0: 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20  tensions;....   
60f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6100: 28 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  (ext != null).. 
6110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6120: 20 65 78 74 2e 42 75 69 6c 64 54 65 6d 70 53 63   ext.BuildTempSc
6130: 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20  hema(cnn);....  
6140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
6150: 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c  ile (cmd == null
6160: 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74   && strSql.Lengt
6170: 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  h > 0)..        
6180: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6190: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64               cmd
61a0: 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20   = Prepare(cnn, 
61b0: 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73  strSql, previous
61c0: 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74  , timeoutMS, out
61d0: 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20   strRemain);..  
61e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61f0: 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61  strSql = strRema
6200: 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in;..           
6210: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6220: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6230: 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20   cmd;..         
6240: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6250: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
6260: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6280: 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20  _buildingSchema 
6290: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
62a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
62b0: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
62c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
62d0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
62e0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
62f0: 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c  orCode.Locked ||
6300: 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   n == SQLiteErro
6310: 72 43 6f 64 65 2e 42 75 73 79 29 20 2f 2f 20 4c  rCode.Busy) // L
6320: 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61  ocked -- delay a
6330: 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65   small amount be
6340: 66 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20  fore retrying.. 
6350: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6360: 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20          // Keep 
6370: 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  trying..        
6380: 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e      if (rnd == n
6390: 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69  ull) // First ti
63a0: 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74  me we've encount
63b0: 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20  ered the lock.. 
63c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64               rnd
63d0: 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b   = new Random();
63e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
63f0: 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65  // If we've exce
6400: 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64  eded the command
6410: 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65  's timeout, give
6420: 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e   up and throw an
6430: 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
6440: 20 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e      if ((uint)En
6450: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
6460: 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20  unt - starttick 
6470: 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20  > timeoutMS)..  
6480: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6490: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
64a0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
64b0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
64c0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
64d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
64e0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
64f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6500: 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72          // Other
6510: 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61  wise sleep for a
6520: 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f   random amount o
6530: 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30  f time up to 150
6540: 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ms..            
6550: 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69    System.Threadi
6560: 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28  ng.Thread.Sleep(
6570: 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29  rnd.Next(1, 150)
6580: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6590: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
65a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
65b0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
65c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
65d0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
65e0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
65f0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
6600: 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72 52 65  ...        strRe
6610: 6d 61 69 6e 20 3d 20 55 54 46 38 54 6f 53 74 72  main = UTF8ToStr
6620: 69 6e 67 28 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a  ing(ptr, len);..
6630: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74  ..        if (st
6640: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d  atementHandle !=
6650: 20 6e 75 6c 6c 29 20 63 6d 64 20 3d 20 6e 65 77   null) cmd = new
6660: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
6670: 28 74 68 69 73 2c 20 66 6c 61 67 73 2c 20 73 74  (this, flags, st
6680: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73  atementHandle, s
6690: 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28  trSql.Substring(
66a0: 30 2c 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68  0, strSql.Length
66b0: 20 2d 20 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e   - strRemain.Len
66c0: 67 74 68 29 2c 20 70 72 65 76 69 6f 75 73 29 3b  gth), previous);
66d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
66e0: 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d  rn cmd;..      }
66f0: 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d  ..      finally.
6700: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
6710: 20 20 68 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b    handle.Free();
6720: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
6730: 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ....    protecte
6740: 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f  d static void Lo
6750: 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74  gBind(SQLiteStat
6760: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
6770: 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  le, int index)..
6780: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
6790: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
67a0: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
67b0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
67c0: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72  g.LogMessage(Str
67d0: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
67e0: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
67f0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
6800: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
6810: 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65    "Binding state
6820: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
6830: 72 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e  r #{1} as NULL..
6840: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
6850: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69   handleIntPtr, i
6860: 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ndex));..    }..
6870: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
6880: 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42  static void LogB
6890: 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ind(SQLiteStatem
68a0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
68b0: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 56 61 6c  , int index, Val
68c0: 75 65 54 79 70 65 20 76 61 6c 75 65 29 0d 0a 20  ueType value).. 
68d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
68e0: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
68f0: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
6900: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
6910: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
6920: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
6930: 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67          "Binding
6940: 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70   statement {0} p
6950: 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20  aramter #{1} as 
6960: 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61  type {2} with va
6970: 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c  lue {{{3}}}...",
6980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61  ..            ha
6990: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65  ndleIntPtr, inde
69a0: 78 2c 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65  x, value.GetType
69b0: 28 29 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20  (), value));..  
69c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61    }....    priva
69d0: 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
69e0: 20 46 6f 72 6d 61 74 44 61 74 65 54 69 6d 65 28   FormatDateTime(
69f0: 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d  DateTime value).
6a00: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
6a10: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65  StringBuilder re
6a20: 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e  sult = new Strin
6a30: 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20  gBuilder();.... 
6a40: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
6a50: 70 65 6e 64 28 76 61 6c 75 65 2e 54 6f 53 74 72  pend(value.ToStr
6a60: 69 6e 67 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54  ing("yyyy-MM-ddT
6a70: 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46  HH:mm:ss.FFFFFFF
6a80: 4b 22 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  K"));..        r
6a90: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27  esult.Append(' '
6aa0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
6ab0: 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e  lt.Append(value.
6ac0: 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20  Kind);..        
6ad0: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20  result.Append(' 
6ae0: 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73  ');..        res
6af0: 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65  ult.Append(value
6b00: 2e 54 69 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20  .Ticks);....    
6b10: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
6b20: 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  t.ToString();.. 
6b30: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74     }....    prot
6b40: 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69  ected static voi
6b50: 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65  d LogBind(SQLite
6b60: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
6b70: 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65  handle, int inde
6b80: 78 2c 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75  x, DateTime valu
6b90: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
6ba0: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
6bb0: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
6bc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
6bd0: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
6be0: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
6bf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69  .            "Bi
6c00: 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  nding statement 
6c10: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31  {0} paramter #{1
6c20: 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69  } as type {2} wi
6c30: 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d  th value {{{3}}}
6c40: 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
6c50: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
6c60: 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 44   index, typeof(D
6c70: 61 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74  ateTime), Format
6c80: 44 61 74 65 54 69 6d 65 28 76 61 6c 75 65 29 29  DateTime(value))
6c90: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
6ca0: 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69   protected stati
6cb0: 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53  c void LogBind(S
6cc0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
6cd0: 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74  ndle handle, int
6ce0: 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76   index, string v
6cf0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
6d00: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
6d10: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
6d20: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  le;....        S
6d30: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
6d40: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
6d50: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
6d60: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
6d70: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
6d80: 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d  #{1} as type {2}
6d90: 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33   with value {{{3
6da0: 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  }}}...",..      
6db0: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
6dc0: 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f  tr, index, typeo
6dd0: 66 28 53 74 72 69 6e 67 29 2c 20 28 76 61 6c 75  f(String), (valu
6de0: 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c  e != null) ? val
6df0: 75 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b  ue : "<null>"));
6e00: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
6e10: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
6e20: 72 69 6e 67 20 54 6f 48 65 78 61 64 65 63 69 6d  ring ToHexadecim
6e30: 61 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20  alString(..     
6e40: 20 20 20 62 79 74 65 5b 5d 20 61 72 72 61 79 0d     byte[] array.
6e50: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
6e60: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61  {..        if (a
6e70: 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  rray == null).. 
6e80: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6e90: 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
6ea0: 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72     StringBuilder
6eb0: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
6ec0: 72 69 6e 67 42 75 69 6c 64 65 72 28 61 72 72 61  ringBuilder(arra
6ed0: 79 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a  y.Length * 2);..
6ee0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65  ..        int le
6ef0: 6e 67 74 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e  ngth = array.Len
6f00: 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gth;....        
6f10: 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d  for (int index =
6f20: 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67   0; index < leng
6f30: 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20  th; index++)..  
6f40: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
6f50: 2e 41 70 70 65 6e 64 28 61 72 72 61 79 5b 69 6e  .Append(array[in
6f60: 64 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78  dex].ToString("x
6f70: 32 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  2"));....       
6f80: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54   return result.T
6f90: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
6fa0: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
6fb0: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
6fc0: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
6fd0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
6fe0: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
6ff0: 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20  byte[] value).. 
7000: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
7010: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
7020: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
7030: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
7040: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
7050: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
7060: 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67          "Binding
7070: 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70   statement {0} p
7080: 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20  aramter #{1} as 
7090: 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61  type {2} with va
70a0: 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c  lue {{{3}}}...",
70b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61  ..            ha
70c0: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65  ndleIntPtr, inde
70d0: 78 2c 20 74 79 70 65 6f 66 28 42 79 74 65 5b 5d  x, typeof(Byte[]
70e0: 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c  ), (value != nul
70f0: 6c 29 20 3f 20 54 6f 48 65 78 61 64 65 63 69 6d  l) ? ToHexadecim
7100: 61 6c 53 74 72 69 6e 67 28 76 61 6c 75 65 29 20  alString(value) 
7110: 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20  : "<null>"));.. 
7120: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
7130: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
7140: 69 64 20 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53  id Bind_Double(S
7150: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
7160: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
7170: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
7180: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75  , int index, dou
7190: 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ble value)..    
71a0: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
71b0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
71c0: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
71d0: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
71e0: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
71f0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
7200: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
7210: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
7220: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
7230: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
7240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
7250: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
7260: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
7270: 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21        }....#if !
7280: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
7290: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
72a0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
72b0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
72c0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
72d0: 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68  e3_bind_double(h
72e0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
72f0: 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
7300: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
7310: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
7320: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
7330: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7340: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
7350: 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  le_interop(handl
7360: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
7370: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
7380: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
7390: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
73a0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
73b0: 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  if..        if (
73c0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
73d0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
73e0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
73f0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
7400: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
7410: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
7420: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
7430: 5f 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61  _Int32(SQLiteSta
7440: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
7450: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7460: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
7470: 64 65 78 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d  dex, int value).
7480: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
7490: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
74a0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
74b0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
74c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
74d0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
74e0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
74f0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
7500: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7510: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
7520: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7530: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
7540: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
7550: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
7560: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
7570: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
7580: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
7590: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
75a0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
75b0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
75c0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
75d0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
75e0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
75f0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
7600: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
7610: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
7620: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
7630: 20 42 69 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c   Bind_UInt32(SQL
7640: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
7650: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
7660: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
7670: 69 6e 74 20 69 6e 64 65 78 2c 20 75 69 6e 74 20  int index, uint 
7680: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
7690: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
76a0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
76b0: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
76c0: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
76d0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
76e0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
76f0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
7700: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7710: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
7720: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
7730: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
7740: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
7750: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
7760: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
7770: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
7780: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
7790: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
77a0: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20  orCode n;....   
77b0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
77c0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
77d0: 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74  onFlags.BindUInt
77e0: 33 32 41 73 49 6e 74 36 34 29 20 3d 3d 20 53 51  32AsInt64) == SQ
77f0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7800: 61 67 73 2e 42 69 6e 64 55 49 6e 74 33 32 41 73  ags.BindUInt32As
7810: 49 6e 74 36 34 29 0d 0a 20 20 20 20 20 20 20 20  Int64)..        
7820: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  {..            l
7830: 6f 6e 67 20 76 61 6c 75 65 32 20 3d 20 76 61 6c  ong value2 = val
7840: 75 65 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  ue;....#if !PLAT
7850: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
7860: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
7870: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
7880: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
7890: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61  e3_bind_int64(ha
78a0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
78b0: 75 65 32 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  ue2);..#elif !SQ
78c0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
78d0: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
78e0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
78f0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
7900: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61  int64_interop(ha
7910: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
7920: 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 73 65   value2);..#else
7930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
7940: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
7950: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
7960: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
7970: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
7980: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lse..        {..
7990: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
79a0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
79b0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
79c0: 5f 75 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e  _uint(handle, in
79d0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
79e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
79f0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
7a00: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
7a10: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
7a20: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
7a30: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
7a40: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
7a50: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
7a60: 20 42 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69   Bind_Int64(SQLi
7a70: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
7a80: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
7a90: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
7aa0: 6e 74 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76  nt index, long v
7ab0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
7ac0: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
7ad0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
7ae0: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
7af0: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21  e_stmt;....#if !
7b00: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
7b10: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
7b20: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
7b30: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7b40: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
7b50: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7b60: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
7b70: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
7b80: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
7b90: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
7ba0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
7bb0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51   }....        SQ
7bc0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
7bd0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
7be0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
7bf0: 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c  nd_int64(handle,
7c00: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
7c10: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
7c20: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
7c30: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
7c40: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
7c50: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7c60: 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65  _bind_int64_inte
7c70: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
7c80: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
7c90: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74  #else..        t
7ca0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
7cb0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
7cc0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
7cd0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
7ce0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
7cf0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
7d00: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
7d10: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
7d20: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
7d30: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
7d40: 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 36 34  void Bind_UInt64
7d50: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
7d60: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
7d70: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
7d80: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75  gs, int index, u
7d90: 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  long value)..   
7da0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
7db0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
7dc0: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
7dd0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
7de0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
7df0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
7e00: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
7e10: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
7e20: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
7e30: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
7e40: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
7e50: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
7e60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
7e70: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
7e80: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
7e90: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7ea0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
7eb0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
7ec0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
7ed0: 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 28  te3_bind_uint64(
7ee0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
7ef0: 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53  alue);..#elif !S
7f00: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
7f10: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
7f20: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
7f30: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
7f40: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e  sqlite3_bind_uin
7f50: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
7f60: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
7f70: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
7f80: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
7f90: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
7fa0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
7fb0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20  dif..        if 
7fc0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
7fd0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
7fe0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
7ff0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
8000: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
8010: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
8020: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
8030: 64 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74 61  d_Text(SQLiteSta
8040: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
8050: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
8060: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
8070: 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  dex, string valu
8080: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
8090: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
80a0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
80b0: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
80c0: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
80d0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
80e0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
80f0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
8100: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
8110: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
8120: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
8130: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
8140: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8150: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
8160: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
8170: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
8180: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
8190: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
81a0: 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a  UTF8(value);....
81b0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
81c0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
81d0: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
81e0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
81f0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
8200: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
8210: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
8220: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
8230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
8240: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
8250: 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20  dex, b);..      
8260: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
8270: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
8280: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
8290: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
82a0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
82b0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
82c0: 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c  b, b.Length - 1,
82d0: 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
82e0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
82f0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
8300: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
8310: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
8320: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
8330: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
8340: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
8350: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 61  ide void Bind_Da
8360: 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61  teTime(SQLiteSta
8370: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
8380: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
8390: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
83a0: 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74  dex, DateTime dt
83b0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
83c0: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
83d0: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
83e0: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
83f0: 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  mt;....#if !PLAT
8400: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
8410: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
8420: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
8430: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8440: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
8450: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
8460: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
8470: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8480: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
8490: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b  dle, index, dt);
84a0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
84b0: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  dif....        s
84c0: 77 69 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65  witch (_datetime
84d0: 46 6f 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20  Format)..       
84e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
84f0: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
8500: 6f 72 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20  ormats.Ticks:.. 
8510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
8520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8530: 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65        long value
8540: 20 3d 20 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a   = dt.Ticks;....
8550: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
8560: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
8570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8580: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
8590: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
85a0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
85b0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
85c0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
85d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
85e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8600: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
8610: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
8620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8630: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
8650: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
8660: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
8670: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
8680: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
8690: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
86a0: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
86b0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
86c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
86d0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
86e0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
86f0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
8700: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
8710: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
8720: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
8730: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
8740: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
8750: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
8760: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
8770: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
8780: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
8790: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
87a0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
87b0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
87c0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
87d0: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
87e0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
87f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8800: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
8810: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
8820: 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61  Formats.JulianDa
8830: 79 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y:..            
8840: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8850: 20 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c             doubl
8860: 65 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69  e value = ToJuli
8870: 61 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 23 69  anDay(dt);....#i
8880: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
8890: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
88a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88b0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
88c0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
88d0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
88e0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
88f0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
8900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8910: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8930: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
8940: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
8950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8960: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8970: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
8980: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
8990: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
89a0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
89b0: 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c  d_double(handle,
89c0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
89d0: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
89e0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
89f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
8a00: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
8a10: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
8a20: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
8a30: 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  d_double_interop
8a40: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
8a50: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
8a60: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
8a70: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
8a80: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
8a90: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
8aa0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
8ab0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
8ac0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
8ad0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
8ae0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
8af0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
8b00: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
8b10: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
8b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8b30: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
8b40: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
8b50: 46 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63  Formats.UnixEpoc
8b60: 68 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h:..            
8b70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8b80: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
8b90: 76 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e  value = Convert.
8ba0: 54 6f 49 6e 74 36 34 28 64 74 2e 53 75 62 74 72  ToInt64(dt.Subtr
8bb0: 61 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54  act(UnixEpoch).T
8bc0: 6f 74 61 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d  otalSeconds);...
8bd0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
8be0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
8bf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8c00: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
8c10: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
8c20: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
8c30: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
8c40: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
8c50: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
8c60: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c80: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
8c90: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
8ca0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8cb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cd0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
8ce0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
8cf0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8d00: 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c  bind_int64(handl
8d10: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
8d20: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
8d30: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
8d50: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
8d60: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
8d70: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
8d80: 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ind_int64_intero
8d90: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
8da0: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
8db0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
8dc0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
8dd0: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
8de0: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
8df0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
8e00: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
8e10: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
8e20: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
8e30: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
8e40: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
8e50: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
8e60: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
8e70: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8e80: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8e90: 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20    default:..    
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ec0: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
8ed0: 55 54 46 38 28 64 74 29 3b 0d 0a 0d 0a 23 69 66  UTF8(dt);....#if
8ee0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
8ef0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
8f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f10: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
8f20: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
8f30: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
8f40: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8f50: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
8f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
8f90: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
8fa0: 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20  ndex, b);..     
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8fc0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fe0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
8ff0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
9000: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9010: 62 69 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c 65  bind_text(handle
9020: 2c 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65  , index, b, b.Le
9030: 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74  ngth - 1, (IntPt
9040: 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  r)(-1));..      
9050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9060: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
9070: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
9080: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
9090: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
90a0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
90b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
90c0: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
90d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
90e0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
90f0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
9100: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 42 6c 6f  de void Bind_Blo
9110: 62 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  b(SQLiteStatemen
9120: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
9130: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
9140: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
9150: 62 79 74 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29  byte[] blobData)
9160: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
9170: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
9180: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
9190: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
91a0: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
91b0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
91c0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
91d0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
91e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
91f0: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
9200: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
9210: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
9220: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9230: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
9240: 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44  le, index, blobD
9250: 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ata);..        }
9260: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
9270: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
9280: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
9290: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
92a0: 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 68 61  te3_bind_blob(ha
92b0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f  ndle, index, blo
92c0: 62 44 61 74 61 2c 20 62 6c 6f 62 44 61 74 61 2e  bData, blobData.
92d0: 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29  Length, (IntPtr)
92e0: 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  (-1));..        
92f0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
9300: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
9310: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
9320: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
9330: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
9340: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
9350: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
9360: 42 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65  Bind_Null(SQLite
9370: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
9380: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
9390: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
93a0: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
93b0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
93c0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
93d0: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
93e0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
93f0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
9400: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
9410: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
9420: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
9430: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
9440: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
9450: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
9460: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
9470: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
9480: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
9490: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
94a0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
94b0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
94c0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
94d0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
94e0: 5f 62 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c  _bind_null(handl
94f0: 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  e, index);..    
9500: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
9510: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
9520: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
9530: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
9540: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
9550: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
9560: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
9570: 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75  nt Bind_ParamCou
9580: 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nt(SQLiteStateme
9590: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
95a0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
95b0: 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  lags)..    {..  
95c0: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
95d0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
95e0: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
95f0: 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20  e_stmt;..       
9600: 20 69 6e 74 20 76 61 6c 75 65 20 3d 20 55 6e 73   int value = Uns
9610: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9620: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
9630: 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 68 61  rameter_count(ha
9640: 6e 64 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndle);....      
9650: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
9660: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
9670: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
9680: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
9690: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
96a0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
96b0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
96c0: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
96d0: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
96e0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
96f0: 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67  ogMessage(String
9700: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
9710: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
9720: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
9730: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
9740: 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e         "Statemen
9750: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 63  t {0} paramter c
9760: 6f 75 6e 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a  ount is {1}.",..
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9780: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 76 61  handleIntPtr, va
9790: 6c 75 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  lue));..        
97a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
97b0: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
97c0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
97d0: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
97e0: 67 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65  g Bind_ParamName
97f0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
9800: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
9810: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
9820: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  gs, int index)..
9830: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
9840: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
9850: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
9860: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
9870: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
9880: 20 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53   name;....#if !S
9890: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
98a0: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b          int len;
98b0: 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d  ..        name =
98c0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
98d0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
98e0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  s.sqlite3_bind_p
98f0: 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f 69 6e  arameter_name_in
9900: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
9910: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  dex, out len), l
9920: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
9930: 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46 38       name = UTF8
9940: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
9950: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
9960: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
9970: 74 65 72 5f 6e 61 6d 65 28 68 61 6e 64 6c 65 2c  ter_name(handle,
9980: 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23   index), -1);..#
9990: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
99a0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
99b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
99c0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
99d0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
99e0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
99f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9a00: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
9a10: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
9a20: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
9a30: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
9a40: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
9a50: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
9a60: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
9a70: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
9a80: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
9a90: 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74        "Statement
9aa0: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b   {0} paramter #{
9ab0: 31 7d 20 6e 61 6d 65 20 69 73 20 7b 7b 7b 32 7d  1} name is {{{2}
9ac0: 7d 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  }}.",..         
9ad0: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74         handleInt
9ae0: 50 74 72 2c 20 69 6e 64 65 78 2c 20 6e 61 6d 65  Ptr, index, name
9af0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
9b00: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
9b10: 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d   name;..    }...
9b20: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
9b30: 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f  erride int Bind_
9b40: 50 61 72 61 6d 49 6e 64 65 78 28 53 51 4c 69 74  ParamIndex(SQLit
9b50: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
9b60: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
9b70: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 73 74  nFlags flags, st
9b80: 72 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65 29 0d  ring paramName).
9b90: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
9ba0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
9bb0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
9bc0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
9bd0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  ;..        int i
9be0: 6e 64 65 78 20 3d 20 55 6e 73 61 66 65 4e 61 74  ndex = UnsafeNat
9bf0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9c00: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
9c10: 72 5f 69 6e 64 65 78 28 68 61 6e 64 6c 65 2c 20  r_index(handle, 
9c20: 54 6f 55 54 46 38 28 70 61 72 61 6d 4e 61 6d 65  ToUTF8(paramName
9c30: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ));....        i
9c40: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
9c50: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
9c60: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
9c70: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
9c80: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
9c90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9ca0: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
9cb0: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
9cc0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
9cd0: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
9ce0: 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f  essage(String.Fo
9cf0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
9d00: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
9d10: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
9d20: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
9d30: 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b      "Statement {
9d40: 30 7d 20 70 61 72 61 6d 74 65 72 20 69 6e 64 65  0} paramter inde
9d50: 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d  x of name {{{1}}
9d60: 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20  } is #{2}.",..  
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
9d80: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70 61 72 61  ndleIntPtr, para
9d90: 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b 0d  mName, index));.
9da0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
9db0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 6e 64        return ind
9dc0: 65 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ex;..    }....  
9dd0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
9de0: 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f  ide int ColumnCo
9df0: 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d  unt(SQLiteStatem
9e00: 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b  ent stmt)..    {
9e10: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
9e20: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9e30: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
9e40: 6e 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71  n_count(stmt._sq
9e50: 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20  lite_stmt);..   
9e60: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
9e70: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
9e80: 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51  ng ColumnName(SQ
9e90: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
9ea0: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
9eb0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
9ec0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
9ed0: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
9ee0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
9ef0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
9f00: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9f10: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69  e3_column_name_i
9f20: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
9f30: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
9f40: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
9f50: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
9f60: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
9f70: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
9f80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
9f90: 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e  olumn_name(stmt.
9fa0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
9fb0: 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
9fc0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
9fd0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
9fe0: 64 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 20  de TypeAffinity 
9ff0: 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 53  ColumnAffinity(S
a000: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
a010: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
a020: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
a030: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
a040: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a050: 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d  _column_type(stm
a060: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
a070: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a  index);..    }..
a080: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
a090: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
a0a0: 6f 6c 75 6d 6e 54 79 70 65 28 53 51 4c 69 74 65  olumnType(SQLite
a0b0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
a0c0: 69 6e 74 20 69 6e 64 65 78 2c 20 6f 75 74 20 54  int index, out T
a0d0: 79 70 65 41 66 66 69 6e 69 74 79 20 6e 41 66 66  ypeAffinity nAff
a0e0: 69 6e 69 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20  inity)..    {.. 
a0f0: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23       int len;..#
a100: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
a110: 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ARD..      IntPt
a120: 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  r p = UnsafeNati
a130: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
a140: 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
a150: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
a160: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
a170: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23  ex, out len);..#
a180: 65 6c 73 65 0d 0a 20 20 20 20 20 20 6c 65 6e 20  else..      len 
a190: 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 49 6e 74  = -1;..      Int
a1a0: 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61  Ptr p = UnsafeNa
a1b0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a1c0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
a1d0: 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ype(stmt._sqlite
a1e0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
a1f0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 6e 41  #endif..      nA
a200: 66 66 69 6e 69 74 79 20 3d 20 43 6f 6c 75 6d 6e  ffinity = Column
a210: 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69  Affinity(stmt, i
a220: 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
a230: 69 66 20 28 70 20 21 3d 20 49 6e 74 50 74 72 2e  if (p != IntPtr.
a240: 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 55 54 46  Zero) return UTF
a250: 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e  8ToString(p, len
a260: 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a  );..      else..
a270: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a280: 20 73 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20 73   string[] ar = s
a290: 74 6d 74 2e 54 79 70 65 44 65 66 69 6e 69 74 69  tmt.TypeDefiniti
a2a0: 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  ons;..        if
a2b0: 20 28 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20   (ar != null).. 
a2c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a2d0: 20 20 20 20 69 66 20 28 69 6e 64 65 78 20 3c 20      if (index < 
a2e0: 61 72 2e 4c 65 6e 67 74 68 20 26 26 20 61 72 5b  ar.Length && ar[
a2f0: 69 6e 64 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d  index] != null).
a300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
a310: 75 72 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a  urn ar[index];..
a320: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
a330: 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
a340: 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20  .Empty;....     
a350: 20 20 20 2f 2f 73 77 69 74 63 68 20 28 6e 41 66     //switch (nAf
a360: 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20 20 20  finity)..       
a370: 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f   //{..        //
a380: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
a390: 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20  ity.Int64:..    
a3a0: 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e      //    return
a3b0: 20 22 42 49 47 49 4e 54 22 3b 0d 0a 20 20 20 20   "BIGINT";..    
a3c0: 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70      //  case Typ
a3d0: 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65  eAffinity.Double
a3e0: 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  :..        //   
a3f0: 20 72 65 74 75 72 6e 20 22 44 4f 55 42 4c 45 22   return "DOUBLE"
a400: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63  ;..        //  c
a410: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
a420: 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20  .Blob:..        
a430: 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 42 4c  //    return "BL
a440: 4f 42 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  OB";..        //
a450: 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20    default:..    
a460: 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e      //    return
a470: 20 22 54 45 58 54 22 3b 0d 0a 20 20 20 20 20 20   "TEXT";..      
a480: 20 20 2f 2f 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a    //}..      }..
a490: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
a4a0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
a4b0: 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53  nt ColumnIndex(S
a4c0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
a4d0: 74 6d 74 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75  tmt, string colu
a4e0: 6d 6e 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a  mnName)..    {..
a4f0: 20 20 20 20 20 20 69 6e 74 20 78 20 3d 20 43 6f        int x = Co
a500: 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b  lumnCount(stmt);
a510: 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69  ....      for (i
a520: 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b  nt n = 0; n < x;
a530: 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   n++)..      {..
a540: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
a550: 6e 67 2e 43 6f 6d 70 61 72 65 28 63 6f 6c 75 6d  ng.Compare(colum
a560: 6e 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d  nName, ColumnNam
a570: 65 28 73 74 6d 74 2c 20 6e 29 2c 20 53 74 72 69  e(stmt, n), Stri
a580: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
a590: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
a5a0: 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
a5b0: 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20   return n;..    
a5c0: 20 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72    }..      retur
a5d0: 6e 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  n -1;..    }....
a5e0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
a5f0: 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
a600: 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28  umnOriginalName(
a610: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
a620: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
a630: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
a640: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
a650: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20       int len;.. 
a660: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
a670: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
a680: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a690: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
a6a0: 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  in_name_interop(
a6b0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
a6c0: 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65  t, index, out le
a6d0: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
a6e0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
a6f0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
a700: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a710: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
a720: 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e  rigin_name(stmt.
a730: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
a740: 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
a750: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
a760: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a770: 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
a780: 44 61 74 61 62 61 73 65 4e 61 6d 65 28 53 51 4c  DatabaseName(SQL
a790: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
a7a0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
a7b0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
a7c0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
a7d0: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
a7e0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
a7f0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
a800: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
a810: 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
a820: 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  e_name_interop(s
a830: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
a840: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e  , index, out len
a850: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
a860: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
a870: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
a880: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a890: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
a8a0: 74 61 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74  tabase_name(stmt
a8b0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
a8c0: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
a8d0: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
a8e0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
a8f0: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
a900: 6e 54 61 62 6c 65 4e 61 6d 65 28 53 51 4c 69 74  nTableName(SQLit
a910: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
a920: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
a930: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
a940: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
a950: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
a960: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
a970: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
a980: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a990: 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
a9a0: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
a9b0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
a9c0: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
a9d0: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
a9e0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
a9f0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
aa00: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
aa10: 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e  3_column_table_n
aa20: 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ame(stmt._sqlite
aa30: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d  _stmt, index), -
aa40: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
aa50: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
aa60: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
aa70: 20 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28   ColumnMetaData(
aa80: 73 74 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c  string dataBase,
aa90: 20 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73   string table, s
aaa0: 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75  tring column, ou
aab0: 74 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70  t string dataTyp
aac0: 65 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f  e, out string co
aad0: 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20 6f  llateSequence, o
aae0: 75 74 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c  ut bool notNull,
aaf0: 20 6f 75 74 20 62 6f 6f 6c 20 70 72 69 6d 61 72   out bool primar
ab00: 79 4b 65 79 2c 20 6f 75 74 20 62 6f 6f 6c 20 61  yKey, out bool a
ab10: 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20  utoIncrement).. 
ab20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50     {..      IntP
ab30: 74 72 20 64 61 74 61 54 79 70 65 50 74 72 3b 0d  tr dataTypePtr;.
ab40: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f  .      IntPtr co
ab50: 6c 6c 53 65 71 50 74 72 3b 0d 0a 20 20 20 20 20  llSeqPtr;..     
ab60: 20 69 6e 74 20 6e 6e 6f 74 4e 75 6c 6c 3b 0d 0a   int nnotNull;..
ab70: 20 20 20 20 20 20 69 6e 74 20 6e 70 72 69 6d 61        int nprima
ab80: 72 79 4b 65 79 3b 0d 0a 20 20 20 20 20 20 69 6e  ryKey;..      in
ab90: 74 20 6e 61 75 74 6f 49 6e 63 3b 0d 0a 20 20 20  t nautoInc;..   
aba0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
abb0: 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  de n;..      int
abc0: 20 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69   dtLen;..      i
abd0: 6e 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66  nt csLen;....#if
abe0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
abf0: 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  D..      n = Uns
ac00: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
ac10: 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63  .sqlite3_table_c
ac20: 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 5f 69  olumn_metadata_i
ac30: 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55  nterop(_sql, ToU
ac40: 54 46 38 28 64 61 74 61 42 61 73 65 29 2c 20 54  TF8(dataBase), T
ac50: 6f 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f  oUTF8(table), To
ac60: 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75  UTF8(column), ou
ac70: 74 20 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f  t dataTypePtr, o
ac80: 75 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f  ut collSeqPtr, o
ac90: 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74  ut nnotNull, out
aca0: 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75   nprimaryKey, ou
acb0: 74 20 6e 61 75 74 6f 49 6e 63 2c 20 6f 75 74 20  t nautoInc, out 
acc0: 64 74 4c 65 6e 2c 20 6f 75 74 20 63 73 4c 65 6e  dtLen, out csLen
acd0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
ace0: 20 64 74 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20   dtLen = -1;..  
acf0: 20 20 20 20 63 73 4c 65 6e 20 3d 20 2d 31 3b 0d      csLen = -1;.
ad00: 0a 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  ...      n = Uns
ad10: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
ad20: 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63  .sqlite3_table_c
ad30: 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 5f  olumn_metadata(_
ad40: 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61  sql, ToUTF8(data
ad50: 42 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61  Base), ToUTF8(ta
ad60: 62 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c  ble), ToUTF8(col
ad70: 75 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79  umn), out dataTy
ad80: 70 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53  pePtr, out collS
ad90: 65 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e  eqPtr, out nnotN
ada0: 75 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72  ull, out nprimar
adb0: 79 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49  yKey, out nautoI
adc0: 6e 63 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  nc);..#endif..  
add0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
ade0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
adf0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
ae00: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
ae10: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
ae20: 0d 0a 20 20 20 20 20 20 64 61 74 61 54 79 70 65  ..      dataType
ae30: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
ae40: 64 61 74 61 54 79 70 65 50 74 72 2c 20 64 74 4c  dataTypePtr, dtL
ae50: 65 6e 29 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c  en);..      coll
ae60: 61 74 65 53 65 71 75 65 6e 63 65 20 3d 20 55 54  ateSequence = UT
ae70: 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 53  F8ToString(collS
ae80: 65 71 50 74 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a  eqPtr, csLen);..
ae90: 0d 0a 20 20 20 20 20 20 6e 6f 74 4e 75 6c 6c 20  ..      notNull 
aea0: 3d 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31  = (nnotNull == 1
aeb0: 29 3b 0d 0a 20 20 20 20 20 20 70 72 69 6d 61 72  );..      primar
aec0: 79 4b 65 79 20 3d 20 28 6e 70 72 69 6d 61 72 79  yKey = (nprimary
aed0: 4b 65 79 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20  Key == 1);..    
aee0: 20 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20    autoIncrement 
aef0: 3d 20 28 6e 61 75 74 6f 49 6e 63 20 3d 3d 20 31  = (nautoInc == 1
af00: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
af10: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
af20: 64 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75  de double GetDou
af30: 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
af40: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
af50: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
af60: 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b     double value;
af70: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
af80: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
af90: 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
afa0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
afb0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
afc0: 6d 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f  mn_double(stmt._
afd0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
afe0: 65 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ex);..#elif !SQL
aff0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
b000: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
b010: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b020: 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e  column_double_in
b030: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
b040: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
b050: 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  out value);..#el
b060: 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
b070: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
b080: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
b090: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65  #endif..      re
b0a0: 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20  turn value;..   
b0b0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
b0c0: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 62 79 74  al override sbyt
b0d0: 65 20 47 65 74 53 42 79 74 65 28 53 51 4c 69 74  e GetSByte(SQLit
b0e0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
b0f0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
b100: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
b110: 20 75 6e 63 68 65 63 6b 65 64 28 28 73 62 79 74   unchecked((sbyt
b120: 65 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74  e)(GetInt32(stmt
b130: 2c 20 69 6e 64 65 78 29 20 26 20 62 79 74 65 2e  , index) & byte.
b140: 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20  MaxValue));..   
b150: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
b160: 61 6c 20 6f 76 65 72 72 69 64 65 20 62 79 74 65  al override byte
b170: 20 47 65 74 42 79 74 65 28 53 51 4c 69 74 65 53   GetByte(SQLiteS
b180: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
b190: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
b1a0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75  ..      return u
b1b0: 6e 63 68 65 63 6b 65 64 28 28 62 79 74 65 29 28  nchecked((byte)(
b1c0: 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69  GetInt32(stmt, i
b1d0: 6e 64 65 78 29 20 26 20 62 79 74 65 2e 4d 61 78  ndex) & byte.Max
b1e0: 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d  Value));..    }.
b1f0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
b200: 6f 76 65 72 72 69 64 65 20 73 68 6f 72 74 20 47  override short G
b210: 65 74 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74  etInt16(SQLiteSt
b220: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
b230: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
b240: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e  .      return un
b250: 63 68 65 63 6b 65 64 28 28 73 68 6f 72 74 29 28  checked((short)(
b260: 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69  GetInt32(stmt, i
b270: 6e 64 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d  ndex) & ushort.M
b280: 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  axValue));..    
b290: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
b2a0: 6c 20 6f 76 65 72 72 69 64 65 20 75 73 68 6f 72  l override ushor
b2b0: 74 20 47 65 74 55 49 6e 74 31 36 28 53 51 4c 69  t GetUInt16(SQLi
b2c0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
b2d0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
b2e0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
b2f0: 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75 73 68  n unchecked((ush
b300: 6f 72 74 29 28 47 65 74 49 6e 74 33 32 28 73 74  ort)(GetInt32(st
b310: 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 75 73 68  mt, index) & ush
b320: 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d  ort.MaxValue));.
b330: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
b340: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
b350: 69 6e 74 20 47 65 74 49 6e 74 33 32 28 53 51 4c  int GetInt32(SQL
b360: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
b370: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
b380: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
b390: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
b3a0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
b3b0: 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f  olumn_int(stmt._
b3c0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
b3d0: 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ex);..    }.... 
b3e0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
b3f0: 72 69 64 65 20 75 69 6e 74 20 47 65 74 55 49 6e  ride uint GetUIn
b400: 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t32(SQLiteStatem
b410: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
b420: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
b430: 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63     return unchec
b440: 6b 65 64 28 28 75 69 6e 74 29 47 65 74 49 6e 74  ked((uint)GetInt
b450: 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  32(stmt, index))
b460: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
b470: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
b480: 65 20 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34 28  e long GetInt64(
b490: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
b4a0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
b4b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c  ..    {..      l
b4c0: 6f 6e 67 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20  ong value;..#if 
b4d0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
b4e0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
b4f0: 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65    value = Unsafe
b500: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b510: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
b520: 36 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  64(stmt._sqlite_
b530: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23  stmt, index);..#
b540: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
b550: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73  NDARD..      Uns
b560: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b570: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
b580: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 74  int64_interop(st
b590: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
b5a0: 20 69 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c 75   index, out valu
b5b0: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
b5c0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
b5d0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
b5e0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
b5f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
b600: 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ue;..    }....  
b610: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
b620: 69 64 65 20 75 6c 6f 6e 67 20 47 65 74 55 49 6e  ide ulong GetUIn
b630: 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t64(SQLiteStatem
b640: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
b650: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
b660: 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63     return unchec
b670: 6b 65 64 28 28 75 6c 6f 6e 67 29 47 65 74 49 6e  ked((ulong)GetIn
b680: 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
b690: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
b6a0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b6b0: 64 65 20 73 74 72 69 6e 67 20 47 65 74 54 65 78  de string GetTex
b6c0: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
b6d0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
b6e0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
b6f0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
b700: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
b710: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
b720: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
b730: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b740: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
b750: 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  xt_interop(stmt.
b760: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
b770: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  dex, out len), l
b780: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
b790: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
b7a0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
b7b0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b7c0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73  e3_column_text(s
b7d0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
b7e0: 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20  , index),..     
b7f0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
b800: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
b810: 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74  olumn_bytes(stmt
b820: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
b830: 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ndex));..#endif.
b840: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
b850: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
b860: 44 61 74 65 54 69 6d 65 20 47 65 74 44 61 74 65  DateTime GetDate
b870: 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Time(SQLiteState
b880: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
b890: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
b8a0: 20 20 20 20 69 66 20 28 5f 64 61 74 65 74 69 6d      if (_datetim
b8b0: 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74  eFormat == SQLit
b8c0: 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63  eDateFormats.Tic
b8d0: 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ks)..        ret
b8e0: 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 47  urn ToDateTime(G
b8f0: 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e  etInt64(stmt, in
b900: 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b  dex), _datetimeK
b910: 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73  ind);..      els
b920: 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46  e if (_datetimeF
b930: 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44  ormat == SQLiteD
b940: 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61  ateFormats.Julia
b950: 6e 44 61 79 29 0d 0a 20 20 20 20 20 20 20 20 72  nDay)..        r
b960: 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65  eturn ToDateTime
b970: 28 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c  (GetDouble(stmt,
b980: 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69   index), _dateti
b990: 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20  meKind);..      
b9a0: 65 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74 69  else if (_dateti
b9b0: 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69  meFormat == SQLi
b9c0: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e  teDateFormats.Un
b9d0: 69 78 45 70 6f 63 68 29 0d 0a 20 20 20 20 20 20  ixEpoch)..      
b9e0: 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54    return ToDateT
b9f0: 69 6d 65 28 47 65 74 49 6e 74 33 32 28 73 74 6d  ime(GetInt32(stm
ba00: 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65  t, index), _date
ba10: 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 0d 0a 23 69  timeKind);....#i
ba20: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
ba30: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
ba40: 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n;..      return
ba50: 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61   ToDateTime(Unsa
ba60: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
ba70: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
ba80: 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ext_interop(stmt
ba90: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
baa0: 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20  ndex, out len), 
bab0: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
bac0: 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74      return ToDat
bad0: 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69  eTime(UnsafeNati
bae0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
baf0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74  3_column_text(st
bb00: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
bb10: 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20 20   index),..      
bb20: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
bb30: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
bb40: 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e  lumn_bytes(stmt.
bb50: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
bb60: 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  dex));..#endif..
bb70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
bb80: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
bb90: 6f 6e 67 20 47 65 74 42 79 74 65 73 28 53 51 4c  ong GetBytes(SQL
bba0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
bbb0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e  t, int index, in
bbc0: 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62  t nDataOffset, b
bbd0: 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74  yte[] bDest, int
bbe0: 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65   nStart, int nLe
bbf0: 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ngth)..    {..  
bc00: 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55      int nlen = U
bc10: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
bc20: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
bc30: 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71  n_bytes(stmt._sq
bc40: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
bc50: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49  );....      // I
bc60: 66 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e  f no destination
bc70: 20 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20   buffer, return 
bc80: 74 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e  the size needed.
bc90: 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73  ..      if (bDes
bca0: 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
bcb0: 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20  n nlen;....     
bcc0: 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e   int nCopied = n
bcd0: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
bce0: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
bcf0: 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65  Start > bDest.Le
bd00: 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20  ngth) nCopied = 
bd10: 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e  bDest.Length - n
bd20: 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66  Start;..      if
bd30: 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74   (nCopied + nDat
bd40: 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20  aOffset > nlen) 
bd50: 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d  nCopied = nlen -
bd60: 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d   nDataOffset;...
bd70: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
bd80: 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b  ed > 0)..      {
bd90: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
bda0: 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74   ptr = UnsafeNat
bdb0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
bdc0: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73  e3_column_blob(s
bdd0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
bde0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
bdf0: 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70       Marshal.Cop
be00: 79 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54  y((IntPtr)(ptr.T
be10: 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61  oInt64() + nData
be20: 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20  Offset), bDest, 
be30: 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29  nStart, nCopied)
be40: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
be50: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d    else..      {.
be60: 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64  .        nCopied
be70: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a   = 0;..      }..
be80: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e  ..      return n
be90: 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a  Copied;..    }..
bea0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
beb0: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
bec0: 43 68 61 72 73 28 53 51 4c 69 74 65 53 74 61 74  Chars(SQLiteStat
bed0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
bee0: 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61  index, int nData
bef0: 4f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62  Offset, char[] b
bf00: 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74  Dest, int nStart
bf10: 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a  , int nLength)..
bf20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
bf30: 20 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e   nlen;..      in
bf40: 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e  t nCopied = nLen
bf50: 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 74  gth;....      st
bf60: 72 69 6e 67 20 73 74 72 20 3d 20 47 65 74 54 65  ring str = GetTe
bf70: 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  xt(stmt, index);
bf80: 0d 0a 20 20 20 20 20 20 6e 6c 65 6e 20 3d 20 73  ..      nlen = s
bf90: 74 72 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  tr.Length;....  
bfa0: 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d      if (bDest ==
bfb0: 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c   null) return nl
bfc0: 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  en;....      if 
bfd0: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72  (nCopied + nStar
bfe0: 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  t > bDest.Length
bff0: 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73  ) nCopied = bDes
c000: 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72  t.Length - nStar
c010: 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  t;..      if (nC
c020: 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66  opied + nDataOff
c030: 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70  set > nlen) nCop
c040: 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61  ied = nlen - nDa
c050: 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20  taOffset;....   
c060: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e     if (nCopied >
c070: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 73 74 72   0)..        str
c080: 2e 43 6f 70 79 54 6f 28 6e 44 61 74 61 4f 66 66  .CopyTo(nDataOff
c090: 73 65 74 2c 20 62 44 65 73 74 2c 20 6e 53 74 61  set, bDest, nSta
c0a0: 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20  rt, nCopied);.. 
c0b0: 20 20 20 20 20 65 6c 73 65 20 6e 43 6f 70 69 65       else nCopie
c0c0: 64 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  d = 0;....      
c0d0: 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d  return nCopied;.
c0e0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
c0f0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
c100: 62 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69  bool IsNull(SQLi
c110: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
c120: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
c130: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
c140: 6e 20 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  n (ColumnAffinit
c150: 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 3d  y(stmt, index) =
c160: 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e  = TypeAffinity.N
c170: 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ull);..    }....
c180: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
c190: 72 72 69 64 65 20 69 6e 74 20 41 67 67 72 65 67  rride int Aggreg
c1a0: 61 74 65 43 6f 75 6e 74 28 49 6e 74 50 74 72 20  ateCount(IntPtr 
c1b0: 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d  context)..    {.
c1c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
c1d0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
c1e0: 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67  s.sqlite3_aggreg
c1f0: 61 74 65 5f 63 6f 75 6e 74 28 63 6f 6e 74 65 78  ate_count(contex
c200: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
c210: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
c220: 69 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 46  ide void CreateF
c230: 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67 20 73  unction(string s
c240: 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20  trFunction, int 
c250: 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64  nArgs, bool need
c260: 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65 43  CollSeq, SQLiteC
c270: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53 51  allback func, SQ
c280: 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e  LiteCallback fun
c290: 63 73 74 65 70 2c 20 53 51 4c 69 74 65 46 69 6e  cstep, SQLiteFin
c2a0: 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66  alCallback funcf
c2b0: 69 6e 61 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  inal)..    {..  
c2c0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
c2d0: 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  ode n;....#if !S
c2e0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
c2f0: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
c300: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c310: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
c320: 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73  ction_interop(_s
c330: 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75  ql, ToUTF8(strFu
c340: 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20  nction), nArgs, 
c350: 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  4, IntPtr.Zero, 
c360: 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20  func, funcstep, 
c370: 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64  funcfinal, (need
c380: 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29  CollSeq == true)
c390: 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 20 20 20 20   ? 1 : 0);..    
c3a0: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
c3b0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e  eErrorCode.Ok) n
c3c0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
c3d0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
c3e0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69  reate_function_i
c3f0: 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55  nterop(_sql, ToU
c400: 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29  TF8(strFunction)
c410: 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50  , nArgs, 1, IntP
c420: 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66  tr.Zero, func, f
c430: 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
c440: 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71  al, (needCollSeq
c450: 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20   == true) ? 1 : 
c460: 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  0);..#else..    
c470: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
c480: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
c490: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
c4a0: 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  n(_sql, ToUTF8(s
c4b0: 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72  trFunction), nAr
c4c0: 67 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65  gs, 4, IntPtr.Ze
c4d0: 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74  ro, func, funcst
c4e0: 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d  ep, funcfinal);.
c4f0: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20  .      if (n == 
c500: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
c510: 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  Ok) n = UnsafeNa
c520: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
c530: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
c540: 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  ion(_sql, ToUTF8
c550: 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e  (strFunction), n
c560: 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e  Args, 1, IntPtr.
c570: 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63  Zero, func, func
c580: 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29  step, funcfinal)
c590: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
c5a0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
c5b0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
c5c0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
c5d0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
c5e0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
c5f0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
c600: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
c610: 20 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e   CreateCollation
c620: 28 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61  (string strColla
c630: 74 69 6f 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c  tion, SQLiteColl
c640: 61 74 69 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69  ation func, SQLi
c650: 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63  teCollation func
c660: 31 36 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  16)..    {..    
c670: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
c680: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
c690: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
c6a0: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
c6b0: 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  on(_sql, ToUTF8(
c6c0: 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32  strCollation), 2
c6d0: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
c6e0: 75 6e 63 31 36 29 3b 0d 0a 20 20 20 20 20 20 69  unc16);..      i
c6f0: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
c700: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20  rorCode.Ok) n = 
c710: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
c720: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
c730: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71  te_collation(_sq
c740: 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c  l, ToUTF8(strCol
c750: 6c 61 74 69 6f 6e 29 2c 20 31 2c 20 49 6e 74 50  lation), 1, IntP
c760: 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 29 3b 0d  tr.Zero, func);.
c770: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
c780: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
c790: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
c7a0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
c7b0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
c7c0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
c7d0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
c7e0: 65 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c  e int ContextCol
c7f0: 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c  lateCompare(Coll
c800: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
c810: 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f  m enc, IntPtr co
c820: 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 73 31  ntext, string s1
c830: 2c 20 73 74 72 69 6e 67 20 73 32 29 0d 0a 20 20  , string s2)..  
c840: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
c850: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
c860: 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20   byte[] b1;..   
c870: 20 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20     byte[] b2;.. 
c880: 20 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74       System.Text
c890: 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72  .Encoding conver
c8a0: 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ter = null;.... 
c8b0: 20 20 20 20 20 73 77 69 74 63 68 20 28 65 6e 63       switch (enc
c8c0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
c8d0: 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
c8e0: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
c8f0: 54 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  TF8:..          
c900: 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
c910: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
c920: 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20  .UTF8;..        
c930: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
c940: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
c950: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
c960: 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20  16LE:..         
c970: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
c980: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
c990: 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20  g.Unicode;..    
c9a0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
c9b0: 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61        case Colla
c9c0: 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
c9d0: 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20  .UTF16BE:..     
c9e0: 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
c9f0: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
ca00: 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55  oding.BigEndianU
ca10: 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20  nicode;..       
ca20: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
ca30: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d   }....      b1 =
ca40: 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79   converter.GetBy
ca50: 74 65 73 28 73 31 29 3b 0d 0a 20 20 20 20 20 20  tes(s1);..      
ca60: 62 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47  b2 = converter.G
ca70: 65 74 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a  etBytes(s2);....
ca80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
ca90: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
caa0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  .sqlite3_context
cab0: 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74  _collcompare_int
cac0: 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31  erop(context, b1
cad0: 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c  , b1.Length, b2,
cae0: 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65   b2.Length);..#e
caf0: 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
cb00: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
cb10: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
cb20: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
cb30: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
cb40: 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74  verride int Cont
cb50: 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72  extCollateCompar
cb60: 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e(CollationEncod
cb70: 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74  ingEnum enc, Int
cb80: 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 63 68 61  Ptr context, cha
cb90: 72 5b 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20 63  r[] c1, char[] c
cba0: 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  2)..    {..#if !
cbb0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
cbc0: 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31  .      byte[] b1
cbd0: 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  ;..      byte[] 
cbe0: 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65  b2;..      Syste
cbf0: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20  m.Text.Encoding 
cc00: 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c  converter = null
cc10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63  ;....      switc
cc20: 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b  h (enc)..      {
cc30: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
cc40: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
cc50: 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20  Enum.UTF8:..    
cc60: 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
cc70: 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
cc80: 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20  coding.UTF8;..  
cc90: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
cca0: 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c          case Col
ccb0: 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
ccc0: 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20  um.UTF16LE:..   
ccd0: 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72         converter
cce0: 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45   = System.Text.E
ccf0: 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b  ncoding.Unicode;
cd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
cd10: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  k;..        case
cd20: 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
cd30: 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d  ngEnum.UTF16BE:.
cd40: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
cd50: 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
cd60: 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45  xt.Encoding.BigE
cd70: 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20  ndianUnicode;.. 
cd80: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
cd90: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
cda0: 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72    b1 = converter
cdb0: 2e 47 65 74 42 79 74 65 73 28 63 31 29 3b 0d 0a  .GetBytes(c1);..
cdc0: 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65        b2 = conve
cdd0: 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 63 32  rter.GetBytes(c2
cde0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  );....      retu
cdf0: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
ce00: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
ce10: 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61  ontext_collcompa
ce20: 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65  re_interop(conte
ce30: 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74  xt, b1, b1.Lengt
ce40: 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68  h, b2, b2.Length
ce50: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
ce60: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
ce70: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
ce80: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
ce90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
cea0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 43 6f  rnal override Co
ceb0: 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20  llationSequence 
cec0: 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  GetCollationSequ
ced0: 65 6e 63 65 28 53 51 4c 69 74 65 46 75 6e 63 74  ence(SQLiteFunct
cee0: 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ion func, IntPtr
cef0: 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b   context)..    {
cf00: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
cf10: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 43 6f  ANDARD..      Co
cf20: 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20  llationSequence 
cf30: 73 65 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74  seq = new Collat
cf40: 69 6f 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a  ionSequence();..
cf50: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
cf60: 20 20 20 20 20 20 69 6e 74 20 74 79 70 65 3b 0d        int type;.
cf70: 0a 20 20 20 20 20 20 69 6e 74 20 65 6e 63 3b 0d  .      int enc;.
cf80: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20  .      IntPtr p 
cf90: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
cfa0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
cfb0: 6e 74 65 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e  ntext_collseq_in
cfc0: 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 6f  terop(context, o
cfd0: 75 74 20 74 79 70 65 2c 20 6f 75 74 20 65 6e 63  ut type, out enc
cfe0: 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 0d 0a 20  , out len);.... 
cff0: 20 20 20 20 20 69 66 20 28 70 20 21 3d 20 6e 75       if (p != nu
d000: 6c 6c 29 20 73 65 71 2e 4e 61 6d 65 20 3d 20 55  ll) seq.Name = U
d010: 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c  TF8ToString(p, l
d020: 65 6e 29 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e  en);..      seq.
d030: 54 79 70 65 20 3d 20 28 43 6f 6c 6c 61 74 69 6f  Type = (Collatio
d040: 6e 54 79 70 65 45 6e 75 6d 29 74 79 70 65 3b 0d  nTypeEnum)type;.
d050: 0a 20 20 20 20 20 20 73 65 71 2e 5f 66 75 6e 63  .      seq._func
d060: 20 3d 20 66 75 6e 63 3b 0d 0a 20 20 20 20 20 20   = func;..      
d070: 73 65 71 2e 45 6e 63 6f 64 69 6e 67 20 3d 20 28  seq.Encoding = (
d080: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
d090: 67 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20  gEnum)enc;....  
d0a0: 20 20 20 20 72 65 74 75 72 6e 20 73 65 71 3b 0d      return seq;.
d0b0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
d0c0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
d0d0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
d0e0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
d0f0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
d100: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
d110: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 42 79 74  GetParamValueByt
d120: 65 73 28 49 6e 74 50 74 72 20 70 2c 20 69 6e 74  es(IntPtr p, int
d130: 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79   nDataOffset, by
d140: 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20  te[] bDest, int 
d150: 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e  nStart, int nLen
d160: 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  gth)..    {..   
d170: 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e     int nlen = Un
d180: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d190: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
d1a0: 62 79 74 65 73 28 70 29 3b 0d 0a 0d 0a 20 20 20  bytes(p);....   
d1b0: 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74     // If no dest
d1c0: 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20  ination buffer, 
d1d0: 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20  return the size 
d1e0: 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69  needed...      i
d1f0: 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c  f (bDest == null
d200: 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a  ) return nlen;..
d210: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70  ..      int nCop
d220: 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a  ied = nLength;..
d230: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
d240: 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62  ied + nStart > b
d250: 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f  Dest.Length) nCo
d260: 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e  pied = bDest.Len
d270: 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20  gth - nStart;.. 
d280: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
d290: 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e   + nDataOffset >
d2a0: 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d   nlen) nCopied =
d2b0: 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66   nlen - nDataOff
d2c0: 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  set;....      if
d2d0: 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a   (nCopied > 0)..
d2e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d2f0: 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e   IntPtr ptr = Un
d300: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d310: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
d320: 62 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20 20 20  blob(p);....    
d330: 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79      Marshal.Copy
d340: 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f  ((IntPtr)(ptr.To
d350: 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f  Int64() + nDataO
d360: 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e  ffset), bDest, n
d370: 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b  Start, nCopied);
d380: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
d390: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a   else..      {..
d3a0: 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20          nCopied 
d3b0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  = 0;..      }...
d3c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43  .      return nC
d3d0: 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  opied;..    }...
d3e0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d3f0: 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65  erride double Ge
d400: 74 50 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c  tParamValueDoubl
d410: 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  e(IntPtr ptr).. 
d420: 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62     {..      doub
d430: 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21  le value;..#if !
d440: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
d450: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
d460: 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e   value = UnsafeN
d470: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d480: 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c  ite3_value_doubl
d490: 65 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21  e(ptr);..#elif !
d4a0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
d4b0: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
d4c0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d4d0: 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f  e3_value_double_
d4e0: 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74  interop(ptr, out
d4f0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
d500: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
d510: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
d520: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
d530: 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72  dif..      retur
d540: 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d  n value;..    }.
d550: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
d560: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74  override int Get
d570: 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 33 32 28  ParamValueInt32(
d580: 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20  IntPtr ptr)..   
d590: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
d5a0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d5b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
d5c0: 75 65 5f 69 6e 74 28 70 74 72 29 3b 0d 0a 20 20  ue_int(ptr);..  
d5d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
d5e0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
d5f0: 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49  g GetParamValueI
d600: 6e 74 36 34 28 49 6e 74 50 74 72 20 70 74 72 29  nt64(IntPtr ptr)
d610: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49  ..    {..      I
d620: 6e 74 36 34 20 76 61 6c 75 65 3b 0d 0a 23 69 66  nt64 value;..#if
d630: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
d640: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
d650: 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66     value = Unsaf
d660: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
d670: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
d680: 36 34 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20  64(ptr);..#elif 
d690: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
d6a0: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
d6b0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d6c0: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f  te3_value_int64_
d6d0: 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74  interop(ptr, out
d6e0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
d6f0: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
d700: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
d710: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
d720: 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72  dif..      retur
d730: 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d  n value;..    }.
d740: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
d750: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
d760: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 65 78  GetParamValueTex
d770: 74 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  t(IntPtr ptr).. 
d780: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
d790: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
d7a0: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
d7b0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
d7c0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
d7d0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d7e0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74  3_value_text_int
d7f0: 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 6c 65  erop(ptr, out le
d800: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
d810: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
d820: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
d830: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
d840: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
d850: 78 74 28 70 74 72 29 2c 0d 0a 20 20 20 20 20 20  xt(ptr),..      
d860: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
d870: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
d880: 6c 75 65 5f 62 79 74 65 73 28 70 74 72 29 29 3b  lue_bytes(ptr));
d890: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
d8a0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
d8b0: 6f 76 65 72 72 69 64 65 20 54 79 70 65 41 66 66  override TypeAff
d8c0: 69 6e 69 74 79 20 47 65 74 50 61 72 61 6d 56 61  inity GetParamVa
d8d0: 6c 75 65 54 79 70 65 28 49 6e 74 50 74 72 20 70  lueType(IntPtr p
d8e0: 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  tr)..    {..    
d8f0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
d900: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d910: 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28  ite3_value_type(
d920: 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ptr);..    }....
d930: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d940: 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
d950: 6e 42 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e  nBlob(IntPtr con
d960: 74 65 78 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c  text, byte[] val
d970: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
d980: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
d990: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
d9a0: 73 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e 74 65 78  sult_blob(contex
d9b0: 74 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75 65 2e  t, value, value.
d9c0: 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29  Length, (IntPtr)
d9d0: 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  (-1));..    }...
d9e0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d9f0: 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
da00: 72 6e 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20  rnDouble(IntPtr 
da10: 63 6f 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65 20  context, double 
da20: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23  value)..    {..#
da30: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
da40: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
da50: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
da60: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
da70: 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63  _result_double(c
da80: 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d  ontext, value);.
da90: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
daa0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55  TANDARD..      U
dab0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
dac0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
dad0: 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  t_double_interop
dae0: 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61  (context, ref va
daf0: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
db00: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
db10: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
db20: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
db30: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
db40: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
db50: 20 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72 6f   void ReturnErro
db60: 72 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  r(IntPtr context
db70: 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d  , string value).
db80: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
db90: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
dba0: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
dbb0: 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20  _error(context, 
dbc0: 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20 76  ToUTF8(value), v
dbd0: 61 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20  alue.Length);.. 
dbe0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
dbf0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
dc00: 69 64 20 52 65 74 75 72 6e 49 6e 74 33 32 28 49  id ReturnInt32(I
dc10: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69  ntPtr context, i
dc20: 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  nt value)..    {
dc30: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
dc40: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
dc50: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63  te3_result_int(c
dc60: 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d  ontext, value);.
dc70: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
dc80: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
dc90: 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36 34  void ReturnInt64
dca0: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
dcb0: 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20   long value)..  
dcc0: 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
dcd0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
dce0: 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  ORK..      Unsaf
dcf0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
dd00: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
dd10: 74 36 34 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c  t64(context, val
dd20: 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
dd30: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
dd40: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
dd50: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
dd60: 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74  result_int64_int
dd70: 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65  erop(context, re
dd80: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  f value);..#else
dd90: 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
dda0: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
ddb0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
ddc0: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
ddd0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
dde0: 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
ddf0: 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74  Null(IntPtr cont
de00: 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ext)..    {..   
de10: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
de20: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
de30: 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65  esult_null(conte
de40: 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  xt);..    }.... 
de50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
de60: 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
de70: 54 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74  Text(IntPtr cont
de80: 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  ext, string valu
de90: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
dea0: 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54   byte[] b = ToUT
deb0: 46 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  F8(value);..    
dec0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
ded0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
dee0: 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78  sult_text(contex
def0: 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29  t, ToUTF8(value)
df00: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
df10: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
df20: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54      }....#if INT
df30: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
df40: 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  LE..    /// <sum
df50: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
df60: 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20  alls the native 
df70: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
df80: 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ary in order to 
df90: 63 72 65 61 74 65 20 61 20 64 69 73 70 6f 73 61  create a disposa
dfa0: 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 6d 6f 64  ble..    /// mod
dfb0: 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ule containing t
dfc0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
dfd0: 6e 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  n of a virtual t
dfe0: 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  able...    /// <
dff0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
e000: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
e010: 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f  module">..    //
e020: 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a  / The module obj
e030: 65 63 74 20 74 6f 20 62 65 20 75 73 65 64 20 77  ect to be used w
e040: 68 65 6e 20 63 72 65 61 74 69 6e 67 20 74 68 65  hen creating the
e050: 20 6e 61 74 69 76 65 20 64 69 73 70 6f 73 61 62   native disposab
e060: 6c 65 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20  le module...    
e070: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
e080: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
e090: 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20  e="flags">..    
e0a0: 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 66 6f  /// The flags fo
e0b0: 72 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  r the associated
e0c0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
e0d0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e  teConnection" />
e0e0: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
e0f0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
e100: 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
e110: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
e120: 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 53 51 4c  CreateModule(SQL
e130: 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65  iteModule module
e140: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
e150: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a  onFlags flags)..
e160: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
e170: 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
e180: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
e190: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
e1a0: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
e1b0: 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20  "module");....  
e1c0: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
e1d0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
e1e0: 69 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f  ionFlags.NoLogMo
e1f0: 64 75 6c 65 29 20 21 3d 20 53 51 4c 69 74 65 43  dule) != SQLiteC
e200: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e  onnectionFlags.N
e210: 6f 4c 6f 67 4d 6f 64 75 6c 65 29 0d 0a 20 20 20  oLogModule)..   
e220: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e230: 20 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 72      module.LogEr
e240: 72 6f 72 73 20 3d 20 28 28 66 6c 61 67 73 20 26  rors = ((flags &
e250: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
e260: 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65  nFlags.LogModule
e270: 45 72 72 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65  Error) == SQLite
e280: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
e290: 4c 6f 67 4d 6f 64 75 6c 65 45 72 72 6f 72 29 3b  LogModuleError);
e2a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f  ..            mo
e2b0: 64 75 6c 65 2e 4c 6f 67 45 78 63 65 70 74 69 6f  dule.LogExceptio
e2c0: 6e 73 20 3d 20 28 28 66 6c 61 67 73 20 26 20 53  ns = ((flags & S
e2d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
e2e0: 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78  lags.LogModuleEx
e2f0: 63 65 70 74 69 6f 6e 29 20 3d 3d 20 53 51 4c 69  ception) == SQLi
e300: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
e310: 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70  s.LogModuleExcep
e320: 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  tion);..        
e330: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
e340: 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (_sql == null)..
e350: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
e360: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
e370: 70 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f  ption("connectio
e380: 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  n has an invalid
e390: 20 68 61 6e 64 6c 65 22 29 3b 0d 0a 0d 0a 20 20   handle");....  
e3a0: 20 20 20 20 20 20 53 65 74 4c 6f 61 64 45 78 74        SetLoadExt
e3b0: 65 6e 73 69 6f 6e 28 74 72 75 65 29 3b 0d 0a 20  ension(true);.. 
e3c0: 20 20 20 20 20 20 20 4c 6f 61 64 45 78 74 65 6e         LoadExten
e3d0: 73 69 6f 6e 28 55 6e 73 61 66 65 4e 61 74 69 76  sion(UnsafeNativ
e3e0: 65 4d 65 74 68 6f 64 73 2e 53 51 4c 49 54 45 5f  eMethods.SQLITE_
e3f0: 44 4c 4c 2c 20 22 73 71 6c 69 74 65 33 5f 76 74  DLL, "sqlite3_vt
e400: 73 68 69 6d 5f 69 6e 69 74 22 29 3b 0d 0a 0d 0a  shim_init");....
e410: 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
e420: 6c 65 2e 43 72 65 61 74 65 44 69 73 70 6f 73 61  le.CreateDisposa
e430: 62 6c 65 4d 6f 64 75 6c 65 28 5f 73 71 6c 29 29  bleModule(_sql))
e440: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
e450: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f           if (_mo
e460: 64 75 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  dules == null)..
e470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e480: 5f 6d 6f 64 75 6c 65 73 20 3d 20 6e 65 77 20 44  _modules = new D
e490: 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67  ictionary<string
e4a0: 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 28  , SQLiteModule>(
e4b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
e4c0: 20 20 5f 6d 6f 64 75 6c 65 73 2e 41 64 64 28 6d    _modules.Add(m
e4d0: 6f 64 75 6c 65 2e 4e 61 6d 65 2c 20 6d 6f 64 75  odule.Name, modu
e4e0: 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  le);....        
e4f0: 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c      if (_usePool
e500: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e520: 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c    _usePool = fal
e530: 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f  se;....#if !NET_
e540: 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
e550: 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
e560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e570: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
e580: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43  String.Format("C
e590: 72 65 61 74 65 4d 6f 64 75 6c 65 20 28 50 6f 6f  reateModule (Poo
e5a0: 6c 29 20 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d  l) Disabled: {0}
e5b0: 22 2c 20 5f 73 71 6c 29 29 3b 0d 0a 23 65 6e 64  ", _sql));..#end
e5c0: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
e5d0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
e5e0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
e5f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e600: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
e610: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 47 65 74  iteException(Get
e620: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
e630: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
e640: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
e650: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61  ary>..    /// Ca
e660: 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53  lls the native S
e670: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
e680: 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  ry in order to c
e690: 6c 65 61 6e 75 70 20 74 68 65 20 72 65 73 6f 75  leanup the resou
e6a0: 72 63 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 61 73  rces..    /// as
e6b0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
e6c0: 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  module containin
e6d0: 67 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  g the implementa
e6e0: 74 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75 61  tion of a virtua
e6f0: 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f  l table...    //
e700: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
e710: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
e720: 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20  e="module">..   
e730: 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20   /// The module 
e740: 6f 62 6a 65 63 74 20 70 72 65 76 69 6f 75 73 6c  object previousl
e750: 79 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  y passed to the 
e760: 3c 73 65 65 20 63 72 65 66 3d 22 43 72 65 61 74  <see cref="Creat
e770: 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20  eModule" />..   
e780: 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20   /// method...  
e790: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
e7a0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
e7b0: 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20  ame="flags">..  
e7c0: 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20    /// The flags 
e7d0: 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61 74  for the associat
e7e0: 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ed <see cref="SQ
e7f0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20  LiteConnection" 
e800: 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
e810: 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ce...    /// </p
e820: 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
e830: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
e840: 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 28  d DisposeModule(
e850: 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64  SQLiteModule mod
e860: 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ule, SQLiteConne
e870: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
e880: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
e890: 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
e8a0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
e8b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
e8c0: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
e8d0: 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d  on("module");...
e8e0: 0a 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e  .        module.
e8f0: 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20  Dispose();..    
e900: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
e910: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
e920: 64 65 20 49 6e 74 50 74 72 20 41 67 67 72 65 67  de IntPtr Aggreg
e930: 61 74 65 43 6f 6e 74 65 78 74 28 49 6e 74 50 74  ateContext(IntPt
e940: 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20  r context)..    
e950: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
e960: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
e970: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72  ods.sqlite3_aggr
e980: 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f  egate_context(co
e990: 6e 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20 20  ntext, 1);..    
e9a0: 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  }....#if INTEROP
e9b0: 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a  _VIRTUAL_TABLE..
e9c0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
e9d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73  >..    /// Calls
e9e0: 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69   the native SQLi
e9f0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
ea00: 69 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c  in order to decl
ea10: 61 72 65 20 61 20 76 69 72 74 75 61 6c 20 74 61  are a virtual ta
ea20: 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20  ble..    /// in 
ea30: 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 63 61  response to a ca
ea40: 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73 65 65  ll into the <see
ea50: 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
ea60: 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61  tiveModule.xCrea
ea70: 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20  te" />..    /// 
ea80: 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  or <see cref="IS
ea90: 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
eaa0: 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76  e.xConnect" /> v
eab0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74  irtual table met
eac0: 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  hods...    /// <
ead0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
eae0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
eaf0: 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f  module">..    //
eb00: 2f 20 54 68 65 20 76 69 72 74 75 61 6c 20 74 61  / The virtual ta
eb10: 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61 74 20  ble module that 
eb20: 69 73 20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73  is to be respons
eb30: 69 62 6c 65 20 66 6f 72 20 74 68 65 20 76 69 72  ible for the vir
eb40: 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20  tual table..    
eb50: 2f 2f 2f 20 62 65 69 6e 67 20 64 65 63 6c 61 72  /// being declar
eb60: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
eb70: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
eb80: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 53  param name="strS
eb90: 71 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ql">..    /// Th
eba0: 65 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  e string contain
ebb0: 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
ebc0: 65 6d 65 6e 74 20 64 65 73 63 72 69 62 69 6e 67  ement describing
ebd0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
ebe0: 6c 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62  le to..    /// b
ebf0: 65 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20  e declared...   
ec00: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
ec10: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
ec20: 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20  me="error">..   
ec30: 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73   /// Upon succes
ec40: 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  s, the contents 
ec50: 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  of this paramete
ec60: 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e  r are undefined.
ec70: 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d    Upon failure,.
ec80: 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75  .    /// it shou
ec90: 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70  ld contain an ap
eca0: 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20  propriate error 
ecb0: 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f  message...    //
ecc0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
ecd0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
ece0: 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
ecf0: 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
ed00: 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  code...    /// <
ed10: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
ed20: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
ed30: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
ed40: 20 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c 54   DeclareVirtualT
ed50: 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 53  able(..        S
ed60: 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
ed70: 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  le,..        str
ed80: 69 6e 67 20 73 74 72 53 71 6c 2c 0d 0a 20 20 20  ing strSql,..   
ed90: 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
eda0: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29  error..        )
edb0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
edc0: 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c   if (_sql == nul
edd0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
ede0: 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
edf0: 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68   = "connection h
ee00: 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
ee10: 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  ndle";..        
ee20: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
ee30: 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
ee40: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
ee50: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
ee60: 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  Sql = IntPtr.Zer
ee70: 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  o;....        tr
ee80: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
ee90: 20 20 20 20 20 20 20 20 20 20 70 53 71 6c 20 3d            pSql =
eea0: 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74   SQLiteString.Ut
eeb0: 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
eec0: 6e 67 28 73 74 72 53 71 6c 29 3b 0d 0a 0d 0a 20  ng(strSql);.... 
eed0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
eee0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
eef0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
ef00: 64 73 2e 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  ds.sqlite3_decla
ef10: 72 65 5f 76 74 61 62 28 0d 0a 20 20 20 20 20 20  re_vtab(..      
ef20: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20            _sql, 
ef30: 70 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  pSql);....      
ef40: 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20        if ((n == 
ef50: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
ef60: 4f 6b 29 20 26 26 20 28 6d 6f 64 75 6c 65 20 21  Ok) && (module !
ef70: 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
ef80: 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
ef90: 2e 44 65 63 6c 61 72 65 64 20 3d 20 74 72 75 65  .Declared = true
efa0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
efb0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
efc0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72  ErrorCode.Ok) er
efd0: 72 6f 72 20 3d 20 47 65 74 4c 61 73 74 45 72 72  ror = GetLastErr
efe0: 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  or();....       
eff0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a       return n;..
f000: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
f010: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
f020: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f030: 20 20 20 69 66 20 28 70 53 71 6c 20 21 3d 20 49     if (pSql != I
f040: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
f050: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
f060: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
f070: 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 53  teMemory.Free(pS
f080: 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ql);..          
f090: 20 20 20 20 20 20 70 53 71 6c 20 3d 20 49 6e 74        pSql = Int
f0a0: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
f0b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
f0c0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
f0d0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
f0e0: 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74  .    /// Calls t
f0f0: 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65  he native SQLite
f100: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e   core library in
f110: 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61 72   order to declar
f120: 65 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  e a virtual tabl
f130: 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74  e..    /// funct
f140: 69 6f 6e 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  ion in response 
f150: 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74  to a call into t
f160: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
f170: 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
f180: 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20  e.xCreate" />.. 
f190: 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63     /// or <see c
f1a0: 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
f1b0: 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
f1c0: 74 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 74 61  t" /> virtual ta
f1d0: 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20  ble methods...  
f1e0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
f1f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
f200: 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d   name="module">.
f210: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69 72  .    /// The vir
f220: 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c  tual table modul
f230: 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20  e that is to be 
f240: 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20  responsible for 
f250: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
f260: 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74  e..    /// funct
f270: 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72  ion being declar
f280: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
f290: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
f2a0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75  param name="argu
f2b0: 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d 0a 20 20 20  mentCount">..   
f2c0: 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
f2d0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
f2e0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69  the function bei
f2f0: 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20  ng declared...  
f300: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
f310: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
f320: 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20  ame="name">..   
f330: 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
f340: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65   the function be
f350: 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20  ing declared... 
f360: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
f370: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
f380: 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20  name="error">.. 
f390: 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
f3a0: 65 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74  ess, the content
f3b0: 73 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65  s of this parame
f3c0: 74 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65  ter are undefine
f3d0: 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65  d.  Upon failure
f3e0: 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68  ,..    /// it sh
f3f0: 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20  ould contain an 
f400: 61 70 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f  appropriate erro
f410: 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20  r message...    
f420: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
f430: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
f440: 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64  .    /// A stand
f450: 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
f460: 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f  n code...    ///
f470: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
f480: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
f490: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
f4a0: 64 65 20 44 65 63 6c 61 72 65 56 69 72 74 75 61  de DeclareVirtua
f4b0: 6c 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  lFunction(..    
f4c0: 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65      SQLiteModule
f4d0: 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20   module,..      
f4e0: 20 20 69 6e 74 20 61 72 67 75 6d 65 6e 74 43 6f    int argumentCo
f4f0: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  unt,..        st
f500: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
f510: 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
f520: 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29 0d  rror..        ).
f530: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
f540: 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  if (_sql == null
f550: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
f560: 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
f570: 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  = "connection ha
f580: 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
f590: 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  dle";..         
f5a0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
f5b0: 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
f5c0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
f5d0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 4e         IntPtr pN
f5e0: 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ame = IntPtr.Zer
f5f0: 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  o;....        tr
f600: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
f610: 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20            pName 
f620: 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55  = SQLiteString.U
f630: 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
f640: 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  ing(name);....  
f650: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
f660: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
f670: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f680: 73 2e 73 71 6c 69 74 65 33 5f 6f 76 65 72 6c 6f  s.sqlite3_overlo
f690: 61 64 5f 66 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  ad_function(..  
f6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
f6b0: 71 6c 2c 20 70 4e 61 6d 65 2c 20 61 72 67 75 6d  ql, pName, argum
f6c0: 65 6e 74 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  entCount);....  
f6d0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
f6e0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
f6f0: 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47  de.Ok) error = G
f700: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a  etLastError();..
f710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
f720: 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20  turn n;..       
f730: 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61   }..        fina
f740: 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lly..        {..
f750: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
f760: 70 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74 72 2e  pName != IntPtr.
f770: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
f780: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
f790: 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f        SQLiteMemo
f7a0: 72 79 2e 46 72 65 65 28 70 4e 61 6d 65 29 3b 0d  ry.Free(pName);.
f7b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f7c0: 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e   pName = IntPtr.
f7d0: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
f7e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
f7f0: 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a  .    }..#endif..
f800: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
f810: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61  ry>..    /// Ena
f820: 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64  bles or disabled
f830: 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69   extension loadi
f840: 6e 67 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a 20  ng by SQLite... 
f850: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
f860: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
f870: 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e  m name="bOnOff">
f880: 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 74  ..    /// True t
f890: 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67  o enable loading
f8a0: 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20   of extensions, 
f8b0: 66 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65  false to disable
f8c0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
f8d0: 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
f8e0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
f8f0: 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  SetLoadExtension
f900: 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20  (bool bOnOff).. 
f910: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
f920: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
f930: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
f940: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 6e  thods.sqlite3_en
f950: 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  able_load_extens
f960: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
f970: 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20    _sql, (bOnOff 
f980: 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20  ? -1 : 0));.... 
f990: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
f9a0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
f9b0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
f9c0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
f9d0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
f9e0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
f9f0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
fa00: 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20 53     /// Loads a S
fa10: 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 20  QLite extension 
fa20: 6c 69 62 72 61 72 79 20 66 72 6f 6d 20 74 68 65  library from the
fa30: 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a 20 20   named file...  
fa40: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
fa50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
fa60: 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22   name="fileName"
fa70: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
fa80: 61 6d 65 20 6f 66 20 74 68 65 20 64 79 6e 61 6d  ame of the dynam
fa90: 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72 79 20  ic link library 
faa0: 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  file containing 
fab0: 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a  the extension...
fac0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
fad0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
fae0: 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d 65 22   name="procName"
faf0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
fb00: 61 6d 65 20 6f 66 20 74 68 65 20 65 78 70 6f 72  ame of the expor
fb10: 74 65 64 20 66 75 6e 63 74 69 6f 6e 20 75 73 65  ted function use
fb20: 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20  d to initialize 
fb30: 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a  the extension...
fb40: 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c 2c      /// If null,
fb50: 20 74 68 65 20 64 65 66 61 75 6c 74 20 22 73 71   the default "sq
fb60: 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f  lite3_extension_
fb70: 69 6e 69 74 22 20 77 69 6c 6c 20 62 65 20 75 73  init" will be us
fb80: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
fb90: 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
fba0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
fbb0: 64 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28  d LoadExtension(
fbc0: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
fbd0: 20 73 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d 65   string procName
fbe0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
fbf0: 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d    if (fileName =
fc00: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
fc10: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
fc20: 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
fc30: 74 69 6f 6e 28 22 66 69 6c 65 4e 61 6d 65 22 29  tion("fileName")
fc40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
fc50: 50 74 72 20 70 45 72 72 6f 72 20 3d 20 49 6e 74  Ptr pError = Int
fc60: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
fc70: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
fc80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
fc90: 20 62 79 74 65 5b 5d 20 75 74 66 38 46 69 6c 65   byte[] utf8File
fca0: 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64  Name = UTF8Encod
fcb0: 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65  ing.UTF8.GetByte
fcc0: 73 28 66 69 6c 65 4e 61 6d 65 20 2b 20 27 5c 30  s(fileName + '\0
fcd0: 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ');..           
fce0: 20 62 79 74 65 5b 5d 20 75 74 66 38 50 72 6f 63   byte[] utf8Proc
fcf0: 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  Name = null;....
fd00: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
fd10: 70 72 6f 63 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  procName != null
fd20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
fd30: 20 20 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20     utf8ProcName 
fd40: 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55  = UTF8Encoding.U
fd50: 54 46 38 2e 47 65 74 42 79 74 65 73 28 70 72 6f  TF8.GetBytes(pro
fd60: 63 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a  cName + '\0');..
fd70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
fd80: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
fd90: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
fda0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f  thods.sqlite3_lo
fdb0: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20  ad_extension(.. 
fdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
fdd0: 73 71 6c 2c 20 75 74 66 38 46 69 6c 65 4e 61 6d  sql, utf8FileNam
fde0: 65 2c 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 2c  e, utf8ProcName,
fdf0: 20 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a 0d   ref pError);...
fe00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
fe10: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
fe20: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
fe30: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
fe40: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
fe50: 74 69 6f 6e 28 6e 2c 20 55 54 46 38 54 6f 53 74  tion(n, UTF8ToSt
fe60: 72 69 6e 67 28 70 45 72 72 6f 72 2c 20 2d 31 29  ring(pError, -1)
fe70: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
fe80: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
fe90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
fea0: 20 20 20 20 20 20 20 69 66 20 28 70 45 72 72 6f         if (pErro
feb0: 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r != IntPtr.Zero
fec0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
fed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fee0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
fef0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 72  thods.sqlite3_fr
ff00: 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20  ee(pError);..   
ff10: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45 72               pEr
ff20: 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ror = IntPtr.Zer
ff30: 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
ff40: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
ff50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45    }....    /// E
ff60: 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c  nables or disabl
ff70: 65 64 20 65 78 74 65 6e 64 65 64 20 72 65 73 75  ed extended resu
ff80: 6c 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e 65  lt codes returne
ff90: 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20 20  d by SQLite..   
ffa0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
ffb0: 64 65 20 76 6f 69 64 20 53 65 74 45 78 74 65 6e  de void SetExten
ffc0: 64 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28 62  dedResultCodes(b
ffd0: 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20  ool bOnOff)..   
ffe0: 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
fff0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
10000 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10010 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64  s.sqlite3_extend
10020 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28  ed_result_codes(
10030 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c  ..          _sql
10040 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a  , (bOnOff ? -1 :
10050 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69   0));....      i
10060 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
10070 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
10080 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
10090 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
100a0 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
100b0 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74  ..    /// Gets t
100c0 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65  he last SQLite e
100d0 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69  rror code..    i
100e0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
100f0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
10100 20 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20   ResultCode().. 
10110 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
10120 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
10130 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
10140 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20  rrcode(_sql);.. 
10150 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65     }..    /// Ge
10160 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69  ts the last SQLi
10170 74 65 20 65 78 74 65 6e 64 65 64 20 65 72 72 6f  te extended erro
10180 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65  r code..    inte
10190 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
101a0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 45 78  LiteErrorCode Ex
101b0 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65  tendedResultCode
101c0 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
101d0 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
101e0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
101f0 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72  te3_extended_err
10200 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20  code(_sql);..   
10210 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64   }....    /// Ad
10220 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20  d a log message 
10230 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 73  via the SQLite s
10240 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72  qlite3_log inter
10250 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72  face...    inter
10260 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
10270 64 20 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c  d LogMessage(SQL
10280 69 74 65 45 72 72 6f 72 43 6f 64 65 20 69 45 72  iteErrorCode iEr
10290 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d  rCode, string zM
102a0 65 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a  essage)..    {..
102b0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
102c0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
102d0 33 5f 6c 6f 67 28 69 45 72 72 43 6f 64 65 2c 20  3_log(iErrCode, 
102e0 54 6f 55 54 46 38 28 7a 4d 65 73 73 61 67 65 29  ToUTF8(zMessage)
102f0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66  );..    }....#if
10300 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 0d 0a   INTEROP_CODEC..
10310 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10320 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 50 61  rride void SetPa
10330 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 70 61  ssword(byte[] pa
10340 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20  sswordBytes)..  
10350 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
10360 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
10370 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10380 64 73 2e 73 71 6c 69 74 65 33 5f 6b 65 79 28 5f  ds.sqlite3_key(_
10390 73 71 6c 2c 20 70 61 73 73 77 6f 72 64 42 79 74  sql, passwordByt
103a0 65 73 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65  es, passwordByte
103b0 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20  s.Length);..    
103c0 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
103d0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
103e0 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
103f0 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
10400 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
10410 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
10420 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
10430 64 20 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64  d ChangePassword
10440 28 62 79 74 65 5b 5d 20 6e 65 77 50 61 73 73 77  (byte[] newPassw
10450 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b  ordBytes)..    {
10460 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
10470 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
10480 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10490 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 28 5f 73  sqlite3_rekey(_s
104a0 71 6c 2c 20 6e 65 77 50 61 73 73 77 6f 72 64 42  ql, newPasswordB
104b0 79 74 65 73 2c 20 28 6e 65 77 50 61 73 73 77 6f  ytes, (newPasswo
104c0 72 64 42 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29  rdBytes == null)
104d0 20 3f 20 30 20 3a 20 6e 65 77 50 61 73 73 77 6f   ? 0 : newPasswo
104e0 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b  rdBytes.Length);
104f0 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
10500 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
10510 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
10520 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
10530 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
10540 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69  );..    }..#endi
10550 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  f....    interna
10560 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
10570 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51  SetUpdateHook(SQ
10580 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61  LiteUpdateCallba
10590 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
105a0 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
105b0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
105c0 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f  e3_update_hook(_
105d0 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
105e0 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
105f0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
10600 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
10610 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69  tCommitHook(SQLi
10620 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  teCommitCallback
10630 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
10640 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
10650 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10660 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71  _commit_hook(_sq
10670 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
10680 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
10690 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
106a0 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54  erride void SetT
106b0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c  raceCallback(SQL
106c0 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b  iteTraceCallback
106d0 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
106e0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
106f0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10700 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e  _trace(_sql, fun
10710 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
10720 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
10730 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
10740 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63   void SetRollbac
10750 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c  kHook(SQLiteRoll
10760 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e  backCallback fun
10770 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
10780 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
10790 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c  hods.sqlite3_rol
107a0 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c  lback_hook(_sql,
107b0 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
107c0 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
107d0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
107e0 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73  ..    /// Allows
107f0 20 74 68 65 20 73 65 74 74 69 6e 67 20 6f 66 20   the setting of 
10800 61 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61  a logging callba
10810 63 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20 53 51  ck invoked by SQ
10820 4c 69 74 65 20 77 68 65 6e 20 61 0d 0a 20 20 20  Lite when a..   
10830 20 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f   /// log event o
10840 63 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65  ccurs.  Only one
10850 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65   callback may be
10860 20 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69   set.  If NULL i
10870 73 20 70 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f  s passed,..    /
10880 2f 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63  // the logging c
10890 61 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72 65 67  allback is unreg
108a0 69 73 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f  istered...    //
108b0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
108c0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
108d0 65 3d 22 66 75 6e 63 22 3e 54 68 65 20 63 61 6c  e="func">The cal
108e0 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74  lback function t
108f0 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d  o invoke.</param
10900 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
10910 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65  rns>Returns a re
10920 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72  sult code</retur
10930 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
10940 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
10950 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f  eErrorCode SetLo
10960 67 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65  gCallback(SQLite
10970 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  LogCallback func
10980 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
10990 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
109a0 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
109b0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
109c0 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a  e3_config_log(..
109d0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
109e0 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e  teConfigOpsEnum.
109f0 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f  SQLITE_CONFIG_LO
10a00 47 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  G, func, IntPtr.
10a10 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Zero);....      
10a20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20    return rc;..  
10a30 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
10a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
10aa0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
10ab0 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73  .    /// Creates
10ac0 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20 62 61   a new SQLite ba
10ad0 63 6b 75 70 20 6f 62 6a 65 63 74 20 62 61 73 65  ckup object base
10ae0 64 20 6f 6e 20 74 68 65 20 70 72 6f 76 69 64 65  d on the provide
10af0 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20  d destination.. 
10b00 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20     /// database 
10b10 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
10b20 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
10b30 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74   connection is t
10b40 68 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20  he one..    /// 
10b50 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
10b60 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68  this object.  Th
10b70 65 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73  e source and des
10b80 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73  tination databas
10b90 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65  e..    /// conne
10ba0 63 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65  ctions cannot be
10bb0 20 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20   the same...    
10bc0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
10bd0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
10be0 61 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68  ame="destCnn">Th
10bf0 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61  e destination da
10c00 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
10c10 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
10c20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
10c30 22 64 65 73 74 4e 61 6d 65 22 3e 54 68 65 20 64  "destName">The d
10c40 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62  estination datab
10c50 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d  ase name.</param
10c60 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
10c70 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61  m name="sourceNa
10c80 6d 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64  me">The source d
10c90 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70  atabase name.</p
10ca0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
10cb0 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c  returns>The newl
10cc0 79 20 63 72 65 61 74 65 64 20 62 61 63 6b 75 70  y created backup
10cd0 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e   object.</return
10ce0 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
10cf0 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
10d00 42 61 63 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a  Backup Initializ
10d10 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  eBackup(..      
10d20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
10d30 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20  on destCnn,..   
10d40 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 74       string dest
10d50 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73  Name,..        s
10d60 74 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65  tring sourceName
10d70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
10d80 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
10d90 64 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29  destCnn == null)
10da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
10db0 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
10dc0 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64  NullException("d
10dd0 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20  estCnn");....   
10de0 20 20 20 20 20 69 66 20 28 64 65 73 74 4e 61 6d       if (destNam
10df0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
10e00 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
10e10 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
10e20 63 65 70 74 69 6f 6e 28 22 64 65 73 74 4e 61 6d  ception("destNam
10e30 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
10e40 69 66 20 28 73 6f 75 72 63 65 4e 61 6d 65 20 3d  if (sourceName =
10e50 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
10e60 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
10e70 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
10e80 74 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d 65  tion("sourceName
10e90 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
10ea0 51 4c 69 74 65 33 20 64 65 73 74 53 71 6c 69 74  QLite3 destSqlit
10eb0 65 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73 71  e3 = destCnn._sq
10ec0 6c 20 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d  l as SQLite3;...
10ed0 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73  .        if (des
10ee0 74 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c  tSqlite3 == null
10ef0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
10f00 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
10f10 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  tException(..   
10f20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
10f30 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63  stination connec
10f40 74 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61 70  tion has no wrap
10f50 70 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  per.",..        
10f60 20 20 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e          "destCnn
10f70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
10f80 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
10f90 61 6e 64 6c 65 20 64 65 73 74 48 61 6e 64 6c 65  andle destHandle
10fa0 20 3d 20 64 65 73 74 53 71 6c 69 74 65 33 2e 5f   = destSqlite3._
10fb0 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  sql;....        
10fc0 69 66 20 28 64 65 73 74 48 61 6e 64 6c 65 20 3d  if (destHandle =
10fd0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
10fe0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
10ff0 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e  rgumentException
11000 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11010 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20     "Destination 
11020 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61  connection has a
11030 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
11040 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
11050 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b       "destCnn");
11060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
11070 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64  teConnectionHand
11080 6c 65 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 20  le sourceHandle 
11090 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = _sql;....     
110a0 20 20 20 69 66 20 28 73 6f 75 72 63 65 48 61 6e     if (sourceHan
110b0 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
110c0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
110d0 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
110e0 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
110f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11100 22 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74 69  "Source connecti
11110 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  on has an invali
11120 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a  d handle.");....
11130 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a          byte[] z
11140 44 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54 46  DestName = ToUTF
11150 38 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20 20  8(destName);..  
11160 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 53 6f        byte[] zSo
11170 75 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54 46  urceName = ToUTF
11180 38 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a  8(sourceName);..
11190 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
111a0 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 62 61 63  BackupHandle bac
111b0 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c  kupHandle = null
111c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79  ;....        try
111d0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
111e0 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
111f0 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
11200 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61   }..        fina
11210 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72  lly /* NOTE: Thr
11220 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74  ead.Abort() prot
11230 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20  ection. */..    
11240 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11250 20 20 20 49 6e 74 50 74 72 20 62 61 63 6b 75 70     IntPtr backup
11260 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
11270 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
11280 61 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20 20  ackup_init(..   
11290 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
112a0 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61  tHandle, zDestNa
112b0 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65  me, sourceHandle
112c0 2c 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d  , zSourceName);.
112d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
112e0 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74  f (backup == Int
112f0 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
11300 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11310 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
11320 45 72 72 6f 72 43 6f 64 65 20 72 65 73 75 6c 74  ErrorCode result
11330 43 6f 64 65 20 3d 20 52 65 73 75 6c 74 43 6f 64  Code = ResultCod
11340 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
11350 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
11360 6c 74 43 6f 64 65 20 21 3d 20 53 51 4c 69 74 65  ltCode != SQLite
11370 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
11380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11390 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
113a0 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 65 73  iteException(res
113b0 75 6c 74 43 6f 64 65 2c 20 47 65 74 4c 61 73 74  ultCode, GetLast
113c0 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
113d0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
113e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
113f0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
11400 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
11410 66 61 69 6c 65 64 20 74 6f 20 69 6e 69 74 69 61  failed to initia
11420 6c 69 7a 65 20 62 61 63 6b 75 70 22 29 3b 0d 0a  lize backup");..
11430 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
11440 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61 63  .            bac
11450 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20  kupHandle = new 
11460 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
11470 6c 65 28 64 65 73 74 48 61 6e 64 6c 65 2c 20 62  le(destHandle, b
11480 61 63 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20 20  ackup);..       
11490 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
114a0 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 42  turn new SQLiteB
114b0 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
114c0 20 20 20 20 74 68 69 73 2c 20 62 61 63 6b 75 70      this, backup
114d0 48 61 6e 64 6c 65 2c 20 64 65 73 74 48 61 6e 64  Handle, destHand
114e0 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73  le, zDestName, s
114f0 6f 75 72 63 65 48 61 6e 64 6c 65 2c 0d 0a 20 20  ourceHandle,..  
11500 20 20 20 20 20 20 20 20 20 20 7a 53 6f 75 72 63            zSourc
11510 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  eName);..    }..
11520 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
11530 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 70  ry>..    /// Cop
11540 69 65 73 20 75 70 20 74 6f 20 4e 20 70 61 67 65  ies up to N page
11550 73 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63  s from the sourc
11560 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  e database to th
11570 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20  e destination.. 
11580 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20     /// database 
11590 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
115a0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 62 61  the specified ba
115b0 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20  ckup object...  
115c0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
115d0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
115e0 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54   name="backup">T
115f0 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
11600 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e   to use.</param>
11610 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
11620 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22 3e 0d 0a   name="nPage">..
11630 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
11640 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 63  er of pages to c
11650 6f 70 79 2c 20 6e 65 67 61 74 69 76 65 20 74 6f  opy, negative to
11660 20 63 6f 70 79 20 61 6c 6c 20 72 65 6d 61 69 6e   copy all remain
11670 69 6e 67 20 70 61 67 65 73 2e 0d 0a 20 20 20 20  ing pages...    
11680 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
11690 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
116a0 65 3d 22 72 65 74 72 79 22 3e 0d 0a 20 20 20 20  e="retry">..    
116b0 2f 2f 2f 20 53 65 74 20 74 6f 20 74 72 75 65 20  /// Set to true 
116c0 69 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  if the operation
116d0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 74   needs to be ret
116e0 72 69 65 64 20 64 75 65 20 74 6f 20 64 61 74 61  ried due to data
116f0 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f  base..    /// lo
11700 63 6b 69 6e 67 20 69 73 73 75 65 73 3b 20 6f 74  cking issues; ot
11710 68 65 72 77 69 73 65 2c 20 73 65 74 20 74 6f 20  herwise, set to 
11720 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  false...    /// 
11730 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
11740 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
11750 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 74 68 65   /// True if the
11760 72 65 20 61 72 65 20 6d 6f 72 65 20 70 61 67 65  re are more page
11770 73 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2c 20  s to be copied, 
11780 66 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e  false otherwise.
11790 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
117a0 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
117b0 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
117c0 20 53 74 65 70 42 61 63 6b 75 70 28 0d 0a 20 20   StepBackup(..  
117d0 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
117e0 75 70 20 62 61 63 6b 75 70 2c 0d 0a 20 20 20 20  up backup,..    
117f0 20 20 20 20 69 6e 74 20 6e 50 61 67 65 2c 0d 0a      int nPage,..
11800 20 20 20 20 20 20 20 20 6f 75 74 20 62 6f 6f 6c          out bool
11810 20 72 65 74 72 79 0d 0a 20 20 20 20 20 20 20 20   retry..        
11820 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
11830 20 20 72 65 74 72 79 20 3d 20 66 61 6c 73 65 3b    retry = false;
11840 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
11850 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d  backup == null).
11860 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
11870 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
11880 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61  ullException("ba
11890 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ckup");....     
118a0 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48     SQLiteBackupH
118b0 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62  andle handle = b
118c0 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61  ackup._sqlite_ba
118d0 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ckup;....       
118e0 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e   if (handle == n
118f0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
11900 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
11910 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
11920 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
11930 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
11940 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
11950 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b  valid handle.");
11960 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
11970 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68  tr handlePtr = h
11980 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
11990 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20    if (handlePtr 
119a0 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
119b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
119c0 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
119d0 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
119e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
119f0 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
11a00 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
11a10 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e   handle pointer.
11a20 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
11a30 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
11a40 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
11a50 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
11a60 61 63 6b 75 70 5f 73 74 65 70 28 68 61 6e 64 6c  ackup_step(handl
11a70 65 50 74 72 2c 20 6e 50 61 67 65 29 3b 0d 0a 20  ePtr, nPage);.. 
11a80 20 20 20 20 20 20 20 62 61 63 6b 75 70 2e 5f 73         backup._s
11a90 74 65 70 52 65 73 75 6c 74 20 3d 20 6e 3b 20 2f  tepResult = n; /
11aa0 2a 20 4e 4f 54 45 3a 20 53 61 76 65 20 66 6f 72  * NOTE: Save for
11ab0 20 75 73 65 20 62 79 20 46 69 6e 69 73 68 42 61   use by FinishBa
11ac0 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20  ckup. */....    
11ad0 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
11ae0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
11af0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
11b00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11b10 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
11b20 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69  ..        else i
11b30 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
11b40 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20  rorCode.Busy).. 
11b50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11b60 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74 72        retry = tr
11b70 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
11b80 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
11b90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
11ba0 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
11bb0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
11bc0 4c 6f 63 6b 65 64 29 0d 0a 20 20 20 20 20 20 20  Locked)..       
11bd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11be0 72 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20  retry = true;.. 
11bf0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11c00 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
11c10 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
11c20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
11c30 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 0d  ErrorCode.Done).
11c40 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
11c50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
11c60 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  alse;..        }
11c70 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a  ..        else..
11c80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11c90 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
11ca0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
11cb0 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
11cc0 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ());..        }.
11cd0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
11ce0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
11cf0 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
11d00 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
11d10 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65   remaining to be
11d20 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65   copied from the
11d30 20 73 6f 75 72 63 65 0d 0a 20 20 20 20 2f 2f 2f   source..    ///
11d40 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
11d50 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
11d60 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
11d70 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
11d80 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 61 63  ied..    /// bac
11d90 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20  kup object...   
11da0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
11db0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
11dc0 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68  name="backup">Th
11dd0 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
11de0 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d  to check.</param
11df0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
11e00 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f  rns>The number o
11e10 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e  f pages remainin
11e20 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2e 3c  g to be copied.<
11e30 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
11e40 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
11e50 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e 67 42 61   int RemainingBa
11e60 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53  ckup(..        S
11e70 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b  QLiteBackup back
11e80 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  up..        ).. 
11e90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
11ea0 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c   (backup == null
11eb0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
11ec0 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
11ed0 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
11ee0 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20  backup");....   
11ef0 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
11f00 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  pHandle handle =
11f10 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f   backup._sqlite_
11f20 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20  backup;....     
11f30 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d     if (handle ==
11f40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
11f50 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
11f60 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
11f70 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
11f80 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
11f90 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
11fa0 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
11fb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
11fc0 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d  tPtr handlePtr =
11fd0 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
11fe0 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74      if (handlePt
11ff0 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r == IntPtr.Zero
12000 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
12010 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
12020 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
12030 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
12040 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
12050 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
12060 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65  id handle pointe
12070 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r.");....       
12080 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
12090 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
120a0 74 65 33 5f 62 61 63 6b 75 70 5f 72 65 6d 61 69  te3_backup_remai
120b0 6e 69 6e 67 28 68 61 6e 64 6c 65 50 74 72 29 3b  ning(handlePtr);
120c0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
120d0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
120e0 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
120f0 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
12100 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73  f pages in the s
12110 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20 61  ource database a
12120 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 2f  ssociated..    /
12130 2f 2f 20 77 69 74 68 20 74 68 65 20 73 70 65 63  // with the spec
12140 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a  ified backup obj
12150 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ect...    /// </
12160 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
12170 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
12180 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75  ackup">The backu
12190 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63  p object to chec
121a0 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  k.</param>..    
121b0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
121c0 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
121d0 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f   pages in the so
121e0 75 72 63 65 20 64 61 74 61 62 61 73 65 2e 3c 2f  urce database.</
121f0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
12200 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
12210 69 6e 74 20 50 61 67 65 43 6f 75 6e 74 42 61 63  int PageCountBac
12220 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51  kup(..        SQ
12230 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75  LiteBackup backu
12240 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  p..        )..  
12250 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
12260 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29  (backup == null)
12270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
12280 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
12290 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62  NullException("b
122a0 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20  ackup");....    
122b0 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
122c0 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
122d0 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62  backup._sqlite_b
122e0 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20  ackup;....      
122f0 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20    if (handle == 
12300 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
12310 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
12320 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
12330 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
12340 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
12350 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
12360 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29  nvalid handle.")
12370 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
12380 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20  Ptr handlePtr = 
12390 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
123a0 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72     if (handlePtr
123b0 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
123c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
123d0 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
123e0 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
123f0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
12400 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
12410 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
12420 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72  d handle pointer
12430 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
12440 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
12450 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
12460 65 33 5f 62 61 63 6b 75 70 5f 70 61 67 65 63 6f  e3_backup_pageco
12470 75 6e 74 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d  unt(handlePtr);.
12480 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
12490 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
124a0 20 2f 2f 2f 20 44 65 73 74 72 6f 79 73 20 74 68   /// Destroys th
124b0 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2c  e backup object,
124c0 20 72 6f 6c 6c 69 6e 67 20 62 61 63 6b 20 61 6e   rolling back an
124d0 79 20 62 61 63 6b 75 70 20 74 68 61 74 20 6d 61  y backup that ma
124e0 79 20 62 65 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f  y be in..    ///
124f0 20 70 72 6f 67 65 73 73 2e 0d 0a 20 20 20 20 2f   progess...    /
12500 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
12510 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
12520 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
12530 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
12540 20 64 65 73 74 72 6f 79 2e 3c 2f 70 61 72 61 6d   destroy.</param
12550 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
12560 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 46 69  override void Fi
12570 6e 69 73 68 42 61 63 6b 75 70 28 0d 0a 20 20 20  nishBackup(..   
12580 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
12590 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20  p backup..      
125a0 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
125b0 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
125c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
125d0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
125e0 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
125f0 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
12600 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
12610 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
12620 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
12630 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
12640 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
12650 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
12660 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
12670 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
12680 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
12690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126a0 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
126b0 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
126c0 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
126d0 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
126e0 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
126f0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
12700 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
12710 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
12720 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
12730 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
12740 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
12750 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
12760 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
12770 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
12780 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 23  pointer.");....#
12790 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
127a0 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ARD..        SQL
127b0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
127c0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
127d0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
127e0 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65 72  kup_finish_inter
127f0 6f 70 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a  op(handlePtr);..
12800 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 53  #else..        S
12810 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
12820 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
12830 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
12840 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 68 61 6e  ackup_finish(han
12850 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6e 64 69 66  dlePtr);..#endif
12860 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65  ..        handle
12870 2e 53 65 74 48 61 6e 64 6c 65 41 73 49 6e 76 61  .SetHandleAsInva
12880 6c 69 64 28 29 3b 0d 0a 0d 0a 23 69 66 20 43 4f  lid();....#if CO
12890 55 4e 54 5f 48 41 4e 44 4c 45 0d 0a 20 20 20 20  UNT_HANDLE..    
128a0 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51      if ((n == SQ
128b0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
128c0 29 20 7c 7c 20 28 6e 20 3d 3d 20 62 61 63 6b 75  ) || (n == backu
128d0 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29 20  p._stepResult)) 
128e0 68 61 6e 64 6c 65 2e 57 61 73 52 65 6c 65 61 73  handle.WasReleas
128f0 65 64 4f 6b 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  edOk();..#endif.
12900 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
12910 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
12920 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6e 20 21  Code.Ok) && (n !
12930 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65  = backup._stepRe
12940 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20  sult))..        
12950 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
12960 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
12970 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
12980 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
12990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
129a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
129b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
129c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
129d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
129e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
129f0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
12a00 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65  ary>..    /// De
12a10 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20  termines if the 
12a20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
12a30 61 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69  ary has been ini
12a40 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65  tialized for the
12a50 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e  ..    /// curren
12a60 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
12a70 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
12a80 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
12a90 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f  >..    /// A boo
12aa0 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20  lean indicating 
12ab0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
12ac0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
12ad0 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d  ibrary has been.
12ae0 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c  .    /// initial
12af0 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75 72  ized for the cur
12b00 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process... 
12b10 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
12b20 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
12b30 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
12b40 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20  Initialized().. 
12b50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
12b60 74 75 72 6e 20 53 74 61 74 69 63 49 73 49 6e 69  turn StaticIsIni
12b70 74 69 61 6c 69 7a 65 64 28 29 3b 0d 0a 20 20 20  tialized();..   
12b80 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
12b90 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
12ba0 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74   Determines if t
12bb0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
12bc0 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 20  ibrary has been 
12bd0 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
12be0 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72  the..    /// cur
12bf0 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process... 
12c00 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
12c10 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
12c20 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20  rns>..    /// A 
12c30 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69  boolean indicati
12c40 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
12c50 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  t the SQLite cor
12c60 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
12c70 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74  en..    /// init
12c80 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 20  ialized for the 
12c90 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
12ca0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
12cb0 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
12cc0 61 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 53  al static bool S
12cd0 74 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69 7a  taticIsInitializ
12ce0 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
12cf0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
12d00 20 2f 2f 20 42 55 47 46 49 58 3a 20 50 72 65 76   // BUGFIX: Prev
12d10 65 6e 74 20 72 61 63 65 73 20 77 69 74 68 20 6f  ent races with o
12d20 74 68 65 72 20 74 68 72 65 61 64 73 20 66 6f 72  ther threads for
12d30 20 74 68 69 73 20 65 6e 74 69 72 65 20 62 6c 6f   this entire blo
12d40 63 6b 2c 20 64 75 65 0d 0a 20 20 20 20 20 20 20  ck, due..       
12d50 20 2f 2f 20 20 20 20 20 20 20 20 20 74 6f 20 74   //         to t
12d60 68 65 20 74 72 79 2f 66 69 6e 61 6c 6c 79 20 73  he try/finally s
12d70 65 6d 61 6e 74 69 63 73 2e 20 20 53 65 65 20 74  emantics.  See t
12d80 69 63 6b 65 74 20 5b 37 32 39 30 35 63 39 61 37  icket [72905c9a7
12d90 37 5d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  7]...        //.
12da0 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73  .        lock (s
12db0 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20  yncRoot)..      
12dc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12dd0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
12de0 20 2f 2f 20 4e 4f 54 45 3a 20 53 61 76 65 20 74   // NOTE: Save t
12df0 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
12e00 6c 6f 67 67 69 6e 67 20 63 6c 61 73 73 20 61 6e  logging class an
12e10 64 20 74 68 65 6e 20 72 65 73 74 6f 72 65 20 69  d then restore i
12e20 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  t..            /
12e30 2f 20 20 20 20 20 20 20 61 66 74 65 72 20 77 65  /       after we
12e40 20 61 72 65 20 64 6f 6e 65 20 74 6f 20 61 76 6f   are done to avo
12e50 69 64 20 6c 6f 67 67 69 6e 67 20 74 6f 6f 20 6d  id logging too m
12e60 61 6e 79 20 66 61 6c 73 65 20 65 72 72 6f 72 73  any false errors
12e70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
12e80 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  /..            b
12e90 6f 6f 6c 20 73 61 76 65 64 45 6e 61 62 6c 65 64  ool savedEnabled
12ea0 20 3d 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61   = SQLiteLog.Ena
12eb0 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  bled;..         
12ec0 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61     SQLiteLog.Ena
12ed0 62 6c 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  bled = false;...
12ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
12ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
12f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12f10 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
12f20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
12f30 69 73 20 6d 65 74 68 6f 64 20 5b 61 62 5d 75 73  is method [ab]us
12f40 65 73 20 74 68 65 20 66 61 63 74 20 74 68 61 74  es the fact that
12f50 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77   SQLite will alw
12f60 61 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ays..           
12f70 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65       //       re
12f80 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
12f90 52 20 66 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f 77  R for any unknow
12fa0 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  n configuration 
12fb0 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  option..        
12fc0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
12fd0 20 2a 75 6e 6c 65 73 73 2a 20 74 68 65 20 53 51   *unless* the SQ
12fe0 4c 69 74 65 20 6c 69 62 72 61 72 79 20 68 61 73  Lite library has
12ff0 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e   already been in
13000 69 74 69 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20  itialized...    
13010 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
13020 20 20 20 20 20 49 6e 20 74 68 61 74 20 63 61 73       In that cas
13030 65 20 69 74 20 77 69 6c 6c 20 61 6c 77 61 79 73  e it will always
13040 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
13050 49 53 55 53 45 2e 0d 0a 20 20 20 20 20 20 20 20  ISUSE...        
13060 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
13070 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
13080 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
13090 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
130a0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
130b0 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20 20 20 20 20  fig_none(..     
130c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
130d0 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e  QLiteConfigOpsEn
130e0 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  um.SQLITE_CONFIG
130f0 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20 20 20 20 20  _NONE);....     
13100 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
13110 6e 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  n (rc == SQLiteE
13120 72 72 6f 72 43 6f 64 65 2e 4d 69 73 75 73 65 29  rrorCode.Misuse)
13130 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
13140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69  ..            fi
13150 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
13160 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13170 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
13180 45 6e 61 62 6c 65 64 20 3d 20 73 61 76 65 64 45  Enabled = savedE
13190 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20  nabled;..       
131a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
131b0 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
131c0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
131d0 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20 66 75     /// Helper fu
131e0 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74 72 69 65  nction to retrie
131f0 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 64  ve a column of d
13200 61 74 61 20 66 72 6f 6d 20 61 6e 20 61 63 74 69  ata from an acti
13210 76 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20  ve statement... 
13220 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
13230 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
13240 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68  m name="stmt">Th
13250 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  e statement bein
13260 67 20 73 74 65 70 28 29 27 64 20 74 68 72 6f 75  g step()'d throu
13270 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  gh</param>..    
13280 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
13290 22 66 6c 61 67 73 22 3e 54 68 65 20 66 6c 61 67  "flags">The flag
132a0 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
132b0 68 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  h the connection
132c0 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
132d0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
132e0 69 6e 64 65 78 22 3e 54 68 65 20 63 6f 6c 75 6d  index">The colum
132f0 6e 20 69 6e 64 65 78 20 74 6f 20 72 65 74 72 69  n index to retri
13300 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eve</param>..   
13310 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
13320 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
13330 6f 66 20 64 61 74 61 20 63 6f 6e 74 61 69 6e 65  of data containe
13340 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  d in the column.
13350 20 20 49 66 20 55 6e 69 6e 69 74 69 61 6c 69 7a    If Uninitializ
13360 65 64 2c 20 74 68 69 73 20 66 75 6e 63 74 69 6f  ed, this functio
13370 6e 20 77 69 6c 6c 20 72 65 74 72 69 65 76 65 20  n will retrieve 
13380 74 68 65 20 64 61 74 61 74 79 70 65 20 69 6e 66  the datatype inf
13390 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d  ormation.</param
133a0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
133b0 72 6e 73 3e 52 65 74 75 72 6e 73 20 74 68 65 20  rns>Returns the 
133c0 64 61 74 61 20 69 6e 20 74 68 65 20 63 6f 6c 75  data in the colu
133d0 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  mn</returns>..  
133e0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
133f0 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56 61  ide object GetVa
13400 6c 75 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  lue(SQLiteStatem
13410 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
13420 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
13430 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
13440 2c 20 53 51 4c 69 74 65 54 79 70 65 20 74 79 70  , SQLiteType typ
13450 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
13460 69 66 20 28 49 73 4e 75 6c 6c 28 73 74 6d 74 2c  if (IsNull(stmt,
13470 20 69 6e 64 65 78 29 29 20 72 65 74 75 72 6e 20   index)) return 
13480 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20  DBNull.Value;.. 
13490 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
134a0 79 20 61 66 66 20 3d 20 74 79 70 2e 41 66 66 69  y aff = typ.Affi
134b0 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 54 79 70  nity;..      Typ
134c0 65 20 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  e t = null;.... 
134d0 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70       if (typ.Typ
134e0 65 20 21 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65  e != DbType.Obje
134f0 63 74 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ct)..      {..  
13500 20 20 20 20 20 20 74 20 3d 20 53 51 4c 69 74 65        t = SQLite
13510 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65 54 79  Convert.SQLiteTy
13520 70 65 54 6f 54 79 70 65 28 74 79 70 29 3b 0d 0a  peToType(typ);..
13530 20 20 20 20 20 20 20 20 61 66 66 20 3d 20 54 79          aff = Ty
13540 70 65 54 6f 41 66 66 69 6e 69 74 79 28 74 29 3b  peToAffinity(t);
13550 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
13560 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
13570 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
13580 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73 54 65  Flags.GetAllAsTe
13590 78 74 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  xt) == SQLiteCon
135a0 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74  nectionFlags.Get
135b0 41 6c 6c 41 73 54 65 78 74 29 0d 0a 20 20 20 20  AllAsText)..    
135c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
135d0 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
135e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74  );....      swit
135f0 63 68 20 28 61 66 66 29 0d 0a 20 20 20 20 20 20  ch (aff)..      
13600 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  {..        case 
13610 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f  TypeAffinity.Blo
13620 62 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  b:..          if
13630 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62   (typ.Type == Db
13640 54 79 70 65 2e 47 75 69 64 20 26 26 20 74 79 70  Type.Guid && typ
13650 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70  .Affinity == Typ
13660 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74 29 0d  eAffinity.Text).
13670 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
13680 75 72 6e 20 6e 65 77 20 47 75 69 64 28 47 65 74  urn new Guid(Get
13690 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
136a0 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
136b0 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29 47 65   int n = (int)Ge
136c0 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64  tBytes(stmt, ind
136d0 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20  ex, 0, null, 0, 
136e0 30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  0);..          b
136f0 79 74 65 5b 5d 20 62 20 3d 20 6e 65 77 20 62 79  yte[] b = new by
13700 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20  te[n];..        
13710 20 20 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c    GetBytes(stmt,
13720 20 69 6e 64 65 78 2c 20 30 2c 20 62 2c 20 30 2c   index, 0, b, 0,
13730 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   n);....        
13740 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d    if (typ.Type =
13750 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26  = DbType.Guid &&
13760 20 6e 20 3d 3d 20 31 36 29 0d 0a 20 20 20 20 20   n == 16)..     
13770 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
13780 77 20 47 75 69 64 28 62 29 3b 0d 0a 0d 0a 20 20  w Guid(b);....  
13790 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62          return b
137a0 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
137b0 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74  TypeAffinity.Dat
137c0 65 54 69 6d 65 3a 0d 0a 20 20 20 20 20 20 20 20  eTime:..        
137d0 20 20 72 65 74 75 72 6e 20 47 65 74 44 61 74 65    return GetDate
137e0 54 69 6d 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  Time(stmt, index
137f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  );..        case
13800 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f   TypeAffinity.Do
13810 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20  uble:..         
13820 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20   if (t == null) 
13830 72 65 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65  return GetDouble
13840 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
13850 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
13860 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54   Convert.ChangeT
13870 79 70 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74  ype(GetDouble(st
13880 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e  mt, index), t, n
13890 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 63  ull);..        c
138a0 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
138b0 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20  .Int64:..       
138c0 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c     if (t == null
138d0 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36  ) return GetInt6
138e0 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  4(stmt, index);.
138f0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
13900 20 3d 3d 20 74 79 70 65 6f 66 28 53 42 79 74 65   == typeof(SByte
13910 29 29 20 72 65 74 75 72 6e 20 47 65 74 53 42 79  )) return GetSBy
13920 74 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te(stmt, index);
13930 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
13940 74 20 3d 3d 20 74 79 70 65 6f 66 28 42 79 74 65  t == typeof(Byte
13950 29 29 20 72 65 74 75 72 6e 20 47 65 74 42 79 74  )) return GetByt
13960 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e(stmt, index);.
13970 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
13980 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74 31 36   == typeof(Int16
13990 29 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74  )) return GetInt
139a0 31 36 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  16(stmt, index);
139b0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
139c0 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74  t == typeof(UInt
139d0 31 36 29 29 20 72 65 74 75 72 6e 20 47 65 74 55  16)) return GetU
139e0 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e 64 65  Int16(stmt, inde
139f0 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
13a00 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49  f (t == typeof(I
13a10 6e 74 33 32 29 29 20 72 65 74 75 72 6e 20 47 65  nt32)) return Ge
13a20 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64  tInt32(stmt, ind
13a30 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
13a40 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
13a50 55 49 6e 74 33 32 29 29 20 72 65 74 75 72 6e 20  UInt32)) return 
13a60 47 65 74 55 49 6e 74 33 32 28 73 74 6d 74 2c 20  GetUInt32(stmt, 
13a70 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
13a80 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
13a90 6f 66 28 55 49 6e 74 36 34 29 29 20 72 65 74 75  of(UInt64)) retu
13aa0 72 6e 20 47 65 74 55 49 6e 74 36 34 28 73 74 6d  rn GetUInt64(stm
13ab0 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
13ac0 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e        return Con
13ad0 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28  vert.ChangeType(
13ae0 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
13af0 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b  ndex), t, null);
13b00 0d 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 6c  ..        defaul
13b10 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  t:..          re
13b20 74 75 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d  turn GetText(stm
13b30 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
13b40 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
13b50 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
13b60 69 64 65 20 69 6e 74 20 47 65 74 43 75 72 73 6f  ide int GetCurso
13b70 72 46 6f 72 54 61 62 6c 65 28 53 51 4c 69 74 65  rForTable(SQLite
13b80 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
13b90 69 6e 74 20 64 62 2c 20 69 6e 74 20 72 6f 6f 74  int db, int root
13ba0 50 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  Page)..    {..#i
13bb0 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
13bc0 52 44 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  RD..      return
13bd0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13be0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62  hods.sqlite3_tab
13bf0 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65 72 6f  le_cursor_intero
13c00 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
13c10 74 6d 74 2c 20 64 62 2c 20 72 6f 6f 74 50 61 67  tmt, db, rootPag
13c20 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
13c30 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 23 65    return -1;..#e
13c40 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
13c50 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
13c60 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 52 6f 77  ride long GetRow
13c70 49 64 46 6f 72 43 75 72 73 6f 72 28 53 51 4c 69  IdForCursor(SQLi
13c80 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
13c90 2c 20 69 6e 74 20 63 75 72 73 6f 72 29 0d 0a 20  , int cursor).. 
13ca0 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
13cb0 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
13cc0 20 20 6c 6f 6e 67 20 72 6f 77 69 64 3b 0d 0a 20    long rowid;.. 
13cd0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
13ce0 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
13cf0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
13d00 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f 77  lite3_cursor_row
13d10 69 64 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  id_interop(stmt.
13d20 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 63 75  _sqlite_stmt, cu
13d30 72 73 6f 72 2c 20 6f 75 74 20 72 6f 77 69 64 29  rsor, out rowid)
13d40 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63 20  ;..      if (rc 
13d50 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
13d60 64 65 2e 4f 6b 29 20 72 65 74 75 72 6e 20 72 6f  de.Ok) return ro
13d70 77 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  wid;....      re
13d80 74 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a  turn 0;..#else..
13d90 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d        return 0;.
13da0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
13db0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
13dc0 76 65 72 72 69 64 65 20 76 6f 69 64 20 47 65 74  verride void Get
13dd0 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e  IndexColumnExten
13de0 64 65 64 49 6e 66 6f 28 73 74 72 69 6e 67 20 64  dedInfo(string d
13df0 61 74 61 62 61 73 65 2c 20 73 74 72 69 6e 67 20  atabase, string 
13e00 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 63 6f  index, string co
13e10 6c 75 6d 6e 2c 20 6f 75 74 20 69 6e 74 20 73 6f  lumn, out int so
13e20 72 74 4d 6f 64 65 2c 20 6f 75 74 20 69 6e 74 20  rtMode, out int 
13e30 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20 73 74 72  onError, out str
13e40 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71  ing collationSeq
13e50 75 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d 0a 23  uence)..    {..#
13e60 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
13e70 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ARD..      IntPt
13e80 72 20 63 6f 6c 6c 3b 0d 0a 20 20 20 20 20 20 69  r coll;..      i
13e90 6e 74 20 63 6f 6c 6c 6c 65 6e 3b 0d 0a 20 20 20  nt colllen;..   
13ea0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
13eb0 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20  de rc;....      
13ec0 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
13ed0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
13ee0 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e  _index_column_in
13ef0 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c  fo_interop(_sql,
13f00 20 54 6f 55 54 46 38 28 64 61 74 61 62 61 73 65   ToUTF8(database
13f10 29 2c 20 54 6f 55 54 46 38 28 69 6e 64 65 78 29  ), ToUTF8(index)
13f20 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29  , ToUTF8(column)
13f30 2c 20 6f 75 74 20 73 6f 72 74 4d 6f 64 65 2c 20  , out sortMode, 
13f40 6f 75 74 20 6f 6e 45 72 72 6f 72 2c 20 6f 75 74  out onError, out
13f50 20 63 6f 6c 6c 2c 20 6f 75 74 20 63 6f 6c 6c 6c   coll, out colll
13f60 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  en);..      if (
13f70 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc != SQLiteErro
13f80 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
13f90 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
13fa0 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29 3b 0d 0a  ion(rc, null);..
13fb0 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f  ..      collatio
13fc0 6e 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46 38  nSequence = UTF8
13fd0 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 2c 20 63  ToString(coll, c
13fe0 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  olllen);..#else.
13ff0 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f 64 65 20  .      sortMode 
14000 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f 6e 45 72  = 0;..      onEr
14010 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20 20 20 20  ror = 2;..      
14020 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  collationSequenc
14030 65 20 3d 20 22 42 49 4e 41 52 59 22 3b 0d 0a 23  e = "BINARY";..#
14040 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
14050 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
14060 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
14070 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e 74 72 6f  rCode FileContro
14080 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e 61 6d 65  l(string zDbName
14090 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74 50 74 72  , int op, IntPtr
140a0 20 70 41 72 67 29 0d 0a 20 20 20 20 7b 0d 0a 20   pArg)..    {.. 
140b0 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
140c0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
140d0 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
140e0 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44 62 4e  trol(_sql, (zDbN
140f0 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54  ame != null) ? T
14100 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65 29 20 3a  oUTF8(zDbName) :
14110 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41 72 67 29   null, op, pArg)
14120 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d  ;..    }..  }..}
14130 0d 0a                                            ..