System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact b983520d99cd04a1408f5112b50ff883ebbf7915:


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 39 2e 30  sion = "1.0.89.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 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
9ef0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9f00: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
9f10: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74  _name_interop(st
9f20: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
9f30: 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29   index, out len)
9f40: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
9f50: 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66  IntPtr p = Unsaf
9f60: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9f70: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
9f80: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
9f90: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23  stmt, index);..#
9fa0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20  endif..      if 
9fb0: 28 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  (p == IntPtr.Zer
9fc0: 6f 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  o)..        thro
9fd0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
9fe0: 70 74 69 6f 6e 28 53 51 4c 69 74 65 45 72 72 6f  ption(SQLiteErro
9ff0: 72 43 6f 64 65 2e 4e 6f 4d 65 6d 2c 20 47 65 74  rCode.NoMem, Get
a000: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23  LastError());..#
a010: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
a020: 41 52 44 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ARD..      retur
a030: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  n UTF8ToString(p
a040: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
a050: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
a060: 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 2d 31 29  8ToString(p, -1)
a070: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
a080: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
a090: 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41 66   override TypeAf
a0a0: 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66 66  finity ColumnAff
a0b0: 69 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61 74  inity(SQLiteStat
a0c0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
a0d0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
a0e0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
a0f0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a100: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
a110: 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ype(stmt._sqlite
a120: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
a130: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
a140: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
a150: 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70 65  tring ColumnType
a160: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
a170: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
a180: 2c 20 6f 75 74 20 54 79 70 65 41 66 66 69 6e 69  , out TypeAffini
a190: 74 79 20 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20  ty nAffinity).. 
a1a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
a1b0: 6c 65 6e 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54  len;..#if !SQLIT
a1c0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
a1d0: 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73    IntPtr p = Uns
a1e0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
a1f0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
a200: 64 65 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f 70  decltype_interop
a210: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
a220: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c  mt, index, out l
a230: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
a240: 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20     len = -1;..  
a250: 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55      IntPtr p = U
a260: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
a270: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
a280: 6e 5f 64 65 63 6c 74 79 70 65 28 73 74 6d 74 2e  n_decltype(stmt.
a290: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
a2a0: 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  dex);..#endif.. 
a2b0: 20 20 20 20 20 6e 41 66 66 69 6e 69 74 79 20 3d       nAffinity =
a2c0: 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28   ColumnAffinity(
a2d0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d  stmt, index);...
a2e0: 0a 20 20 20 20 20 20 69 66 20 28 70 20 21 3d 20  .      if (p != 
a2f0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74  IntPtr.Zero) ret
a300: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
a310: 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20  (p, len);..     
a320: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a   else..      {..
a330: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
a340: 20 61 72 20 3d 20 73 74 6d 74 2e 54 79 70 65 44   ar = stmt.TypeD
a350: 65 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a 20 20 20  efinitions;..   
a360: 20 20 20 20 20 69 66 20 28 61 72 20 21 3d 20 6e       if (ar != n
a370: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ull)..        {.
a380: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69  .          if (i
a390: 6e 64 65 78 20 3c 20 61 72 2e 4c 65 6e 67 74 68  ndex < ar.Length
a3a0: 20 26 26 20 61 72 5b 69 6e 64 65 78 5d 20 21 3d   && ar[index] !=
a3b0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
a3c0: 20 20 20 20 72 65 74 75 72 6e 20 61 72 5b 69 6e      return ar[in
a3d0: 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d  dex];..        }
a3e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
a3f0: 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a   String.Empty;..
a400: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 73 77 69 74  ..        //swit
a410: 63 68 20 28 6e 41 66 66 69 6e 69 74 79 29 0d 0a  ch (nAffinity)..
a420: 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20          //{..   
a430: 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79       //  case Ty
a440: 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
a450: 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  :..        //   
a460: 20 72 65 74 75 72 6e 20 22 42 49 47 49 4e 54 22   return "BIGINT"
a470: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63  ;..        //  c
a480: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
a490: 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20  .Double:..      
a4a0: 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22    //    return "
a4b0: 44 4f 55 42 4c 45 22 3b 0d 0a 20 20 20 20 20 20  DOUBLE";..      
a4c0: 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41    //  case TypeA
a4d0: 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20  ffinity.Blob:.. 
a4e0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74         //    ret
a4f0: 75 72 6e 20 22 42 4c 4f 42 22 3b 0d 0a 20 20 20  urn "BLOB";..   
a500: 20 20 20 20 20 2f 2f 20 20 64 65 66 61 75 6c 74       //  default
a510: 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  :..        //   
a520: 20 72 65 74 75 72 6e 20 22 54 45 58 54 22 3b 0d   return "TEXT";.
a530: 0a 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 20 20  .        //}..  
a540: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
a550: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
a560: 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e  rride int Column
a570: 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61 74  Index(SQLiteStat
a580: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72 69  ement stmt, stri
a590: 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 0d 0a  ng columnName)..
a5a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
a5b0: 20 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74   x = ColumnCount
a5c0: 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (stmt);....     
a5d0: 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b   for (int n = 0;
a5e0: 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d 0a 20 20   n < x; n++)..  
a5f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
a600: 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  f (String.Compar
a610: 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 43 6f  e(columnName, Co
a620: 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d 74 2c 20 6e  lumnName(stmt, n
a630: 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  ), StringCompari
a640: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
a650: 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20  eCase) == 0)..  
a660: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
a670: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
a680: 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20    return -1;..  
a690: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
a6a0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
a6b0: 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e  ing ColumnOrigin
a6c0: 61 6c 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61  alName(SQLiteSta
a6d0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
a6e0: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
a6f0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
a700: 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
a710: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  len;..      retu
a720: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
a730: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a740: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
a750: 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69  mn_origin_name_i
a760: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
a770: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
a780: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
a790: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
a7a0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
a7b0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
a7c0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
a7d0: 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
a7e0: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
a7f0: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  tmt, index), -1)
a800: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
a810: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
a820: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
a830: 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e   ColumnDatabaseN
a840: 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
a850: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
a860: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
a870: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
a880: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
a890: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
a8a0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
a8b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
a8c0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
a8d0: 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69 6e  database_name_in
a8e0: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
a8f0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
a900: 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  out len), len);.
a910: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
a920: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
a930: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
a940: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
a950: 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
a960: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
a970: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
a980: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
a990: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
a9a0: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
a9b0: 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d  g ColumnTableNam
a9c0: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
a9d0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
a9e0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
a9f0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
aa00: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
aa10: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
aa20: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
aa30: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
aa40: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61  qlite3_column_ta
aa50: 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  ble_name_interop
aa60: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
aa70: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c  mt, index, out l
aa80: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
aa90: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
aaa0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
aab0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
aac0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
aad0: 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74 2e  table_name(stmt.
aae0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
aaf0: 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
ab00: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
ab10: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
ab20: 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d 65  de void ColumnMe
ab30: 74 61 44 61 74 61 28 73 74 72 69 6e 67 20 64 61  taData(string da
ab40: 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20 74  taBase, string t
ab50: 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f 6c  able, string col
ab60: 75 6d 6e 2c 20 6f 75 74 20 73 74 72 69 6e 67 20  umn, out string 
ab70: 64 61 74 61 54 79 70 65 2c 20 6f 75 74 20 73 74  dataType, out st
ab80: 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71 75  ring collateSequ
ab90: 65 6e 63 65 2c 20 6f 75 74 20 62 6f 6f 6c 20 6e  ence, out bool n
aba0: 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 62 6f 6f 6c  otNull, out bool
abb0: 20 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74   primaryKey, out
abc0: 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65 6d   bool autoIncrem
abd0: 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ent)..    {..   
abe0: 20 20 20 49 6e 74 50 74 72 20 64 61 74 61 54 79     IntPtr dataTy
abf0: 70 65 50 74 72 3b 0d 0a 20 20 20 20 20 20 49 6e  pePtr;..      In
ac00: 74 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72 3b  tPtr collSeqPtr;
ac10: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6e 6f 74  ..      int nnot
ac20: 4e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e 74  Null;..      int
ac30: 20 6e 70 72 69 6d 61 72 79 4b 65 79 3b 0d 0a 20   nprimaryKey;.. 
ac40: 20 20 20 20 20 69 6e 74 20 6e 61 75 74 6f 49 6e       int nautoIn
ac50: 63 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  c;..      SQLite
ac60: 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20  ErrorCode n;..  
ac70: 20 20 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d 0a      int dtLen;..
ac80: 20 20 20 20 20 20 69 6e 74 20 63 73 4c 65 6e 3b        int csLen;
ac90: 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
aca0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
acb0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
acc0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
acd0: 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74  table_column_met
ace0: 61 64 61 74 61 5f 69 6e 74 65 72 6f 70 28 5f 73  adata_interop(_s
acf0: 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42  ql, ToUTF8(dataB
ad00: 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62  ase), ToUTF8(tab
ad10: 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75  le), ToUTF8(colu
ad20: 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79 70  mn), out dataTyp
ad30: 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65  ePtr, out collSe
ad40: 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75  qPtr, out nnotNu
ad50: 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72 79  ll, out nprimary
ad60: 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e  Key, out nautoIn
ad70: 63 2c 20 6f 75 74 20 64 74 4c 65 6e 2c 20 6f 75  c, out dtLen, ou
ad80: 74 20 63 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73 65  t csLen);..#else
ad90: 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d 20  ..      dtLen = 
ada0: 2d 31 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e  -1;..      csLen
adb0: 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20   = -1;....      
adc0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
add0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
ade0: 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74  table_column_met
adf0: 61 64 61 74 61 28 5f 73 71 6c 2c 20 54 6f 55 54  adata(_sql, ToUT
ae00: 46 38 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f  F8(dataBase), To
ae10: 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55  UTF8(table), ToU
ae20: 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74  TF8(column), out
ae30: 20 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f 75   dataTypePtr, ou
ae40: 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75  t collSeqPtr, ou
ae50: 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20  t nnotNull, out 
ae60: 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74  nprimaryKey, out
ae70: 20 6e 61 75 74 6f 49 6e 63 29 3b 0d 0a 23 65 6e   nautoInc);..#en
ae80: 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  dif..      if (n
ae90: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
aea0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
aeb0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
aec0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
aed0: 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 64  r());....      d
aee0: 61 74 61 54 79 70 65 20 3d 20 55 54 46 38 54 6f  ataType = UTF8To
aef0: 53 74 72 69 6e 67 28 64 61 74 61 54 79 70 65 50  String(dataTypeP
af00: 74 72 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20 20 20  tr, dtLen);..   
af10: 20 20 20 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e     collateSequen
af20: 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  ce = UTF8ToStrin
af30: 67 28 63 6f 6c 6c 53 65 71 50 74 72 2c 20 63 73  g(collSeqPtr, cs
af40: 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e  Len);....      n
af50: 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75  otNull = (nnotNu
af60: 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20  ll == 1);..     
af70: 20 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 28 6e   primaryKey = (n
af80: 70 72 69 6d 61 72 79 4b 65 79 20 3d 3d 20 31 29  primaryKey == 1)
af90: 3b 0d 0a 20 20 20 20 20 20 61 75 74 6f 49 6e 63  ;..      autoInc
afa0: 72 65 6d 65 6e 74 20 3d 20 28 6e 61 75 74 6f 49  rement = (nautoI
afb0: 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 7d  nc == 1);..    }
afc0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
afd0: 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65   override double
afe0: 20 47 65 74 44 6f 75 62 6c 65 28 53 51 4c 69 74   GetDouble(SQLit
aff0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
b000: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
b010: 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65   {..      double
b020: 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c   value;..#if !PL
b030: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
b040: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76  AMEWORK..      v
b050: 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74  alue = UnsafeNat
b060: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b070: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  e3_column_double
b080: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
b090: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c  mt, index);..#el
b0a0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
b0b0: 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  ARD..      Unsaf
b0c0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b0d0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
b0e0: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  uble_interop(stm
b0f0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
b100: 69 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c 75 65  index, out value
b110: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
b120: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
b130: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
b140: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
b150: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
b160: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
b170: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b180: 64 65 20 73 62 79 74 65 20 47 65 74 53 42 79 74  de sbyte GetSByt
b190: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
b1a0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
b1b0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
b1c0: 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65   return unchecke
b1d0: 64 28 28 73 62 79 74 65 29 28 47 65 74 49 6e 74  d((sbyte)(GetInt
b1e0: 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  32(stmt, index) 
b1f0: 26 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65 29  & byte.MaxValue)
b200: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
b210: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b220: 64 65 20 62 79 74 65 20 47 65 74 42 79 74 65 28  de byte GetByte(
b230: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
b240: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
b250: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
b260: 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28  eturn unchecked(
b270: 28 62 79 74 65 29 28 47 65 74 49 6e 74 33 32 28  (byte)(GetInt32(
b280: 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 62  stmt, index) & b
b290: 79 74 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d  yte.MaxValue));.
b2a0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
b2b0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
b2c0: 73 68 6f 72 74 20 47 65 74 49 6e 74 31 36 28 53  short GetInt16(S
b2d0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
b2e0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
b2f0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
b300: 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28  turn unchecked((
b310: 73 68 6f 72 74 29 28 47 65 74 49 6e 74 33 32 28  short)(GetInt32(
b320: 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 75  stmt, index) & u
b330: 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29 29  short.MaxValue))
b340: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
b350: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
b360: 65 20 75 73 68 6f 72 74 20 47 65 74 55 49 6e 74  e ushort GetUInt
b370: 31 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  16(SQLiteStateme
b380: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
b390: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
b3a0: 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
b3b0: 65 64 28 28 75 73 68 6f 72 74 29 28 47 65 74 49  ed((ushort)(GetI
b3c0: 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
b3d0: 29 20 26 20 75 73 68 6f 72 74 2e 4d 61 78 56 61  ) & ushort.MaxVa
b3e0: 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  lue));..    }...
b3f0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b400: 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 49 6e  erride int GetIn
b410: 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t32(SQLiteStatem
b420: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
b430: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
b440: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
b450: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b460: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
b470: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
b480: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
b490: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
b4a0: 61 6c 20 6f 76 65 72 72 69 64 65 20 75 69 6e 74  al override uint
b4b0: 20 47 65 74 55 49 6e 74 33 32 28 53 51 4c 69 74   GetUInt32(SQLit
b4c0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
b4d0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
b4e0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
b4f0: 20 75 6e 63 68 65 63 6b 65 64 28 28 75 69 6e 74   unchecked((uint
b500: 29 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20  )GetInt32(stmt, 
b510: 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d  index));..    }.
b520: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
b530: 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
b540: 74 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61  tInt64(SQLiteSta
b550: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
b560: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
b570: 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65        long value
b580: 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ;..#if !PLATFORM
b590: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
b5a0: 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d  K..      value =
b5b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
b5c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
b5d0: 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e 5f  umn_int64(stmt._
b5e0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
b5f0: 65 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ex);..#elif !SQL
b600: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
b610: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
b620: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b630: 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74  column_int64_int
b640: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
b650: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
b660: 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ut value);..#els
b670: 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
b680: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
b690: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
b6a0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74  endif..      ret
b6b0: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
b6c0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
b6d0: 6c 20 6f 76 65 72 72 69 64 65 20 75 6c 6f 6e 67  l override ulong
b6e0: 20 47 65 74 55 49 6e 74 36 34 28 53 51 4c 69 74   GetUInt64(SQLit
b6f0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
b700: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
b710: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
b720: 20 75 6e 63 68 65 63 6b 65 64 28 28 75 6c 6f 6e   unchecked((ulon
b730: 67 29 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c  g)GetInt64(stmt,
b740: 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d   index));..    }
b750: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
b760: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
b770: 20 47 65 74 54 65 78 74 28 53 51 4c 69 74 65 53   GetText(SQLiteS
b780: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
b790: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
b7a0: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
b7b0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e  ANDARD..      in
b7c0: 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65  t len;..      re
b7d0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
b7e0: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
b7f0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
b800: 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f  lumn_text_intero
b810: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
b820: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
b830: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
b840: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
b850: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
b860: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
b870: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
b880: 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69  _text(stmt._sqli
b890: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
b8a0: 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65  ..        Unsafe
b8b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b8c0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
b8d0: 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  es(stmt._sqlite_
b8e0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
b8f0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
b900: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b910: 65 72 72 69 64 65 20 44 61 74 65 54 69 6d 65 20  erride DateTime 
b920: 47 65 74 44 61 74 65 54 69 6d 65 28 53 51 4c 69  GetDateTime(SQLi
b930: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
b940: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
b950: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f    {..      if (_
b960: 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d  datetimeFormat =
b970: 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  = SQLiteDateForm
b980: 61 74 73 2e 54 69 63 6b 73 29 0d 0a 20 20 20 20  ats.Ticks)..    
b990: 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74      return ToDat
b9a0: 65 54 69 6d 65 28 47 65 74 49 6e 74 36 34 28 73  eTime(GetInt64(s
b9b0: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61  tmt, index), _da
b9c0: 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20  tetimeKind);..  
b9d0: 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64 61      else if (_da
b9e0: 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20  tetimeFormat == 
b9f0: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
ba00: 73 2e 4a 75 6c 69 61 6e 44 61 79 29 0d 0a 20 20  s.JulianDay)..  
ba10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44        return ToD
ba20: 61 74 65 54 69 6d 65 28 47 65 74 44 6f 75 62 6c  ateTime(GetDoubl
ba30: 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e(stmt, index), 
ba40: 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d  _datetimeKind);.
ba50: 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28  .      else if (
ba60: 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20  _datetimeFormat 
ba70: 3d 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  == SQLiteDateFor
ba80: 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 29 0d  mats.UnixEpoch).
ba90: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
baa0: 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74 49 6e  ToDateTime(GetIn
bab0: 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
bac0: 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29  , _datetimeKind)
bad0: 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
bae0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
baf0: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
bb00: 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69   return ToDateTi
bb10: 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  me(UnsafeNativeM
bb20: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
bb30: 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72  olumn_text_inter
bb40: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
bb50: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74  stmt, index, out
bb60: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
bb70: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
bb80: 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73  n ToDateTime(Uns
bb90: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
bba0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
bbb0: 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  text(stmt._sqlit
bbc0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 0d  e_stmt, index),.
bbd0: 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e  .        UnsafeN
bbe0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
bbf0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
bc00: 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  s(stmt._sqlite_s
bc10: 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 23  tmt, index));..#
bc20: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
bc30: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
bc40: 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79  rride long GetBy
bc50: 74 65 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d  tes(SQLiteStatem
bc60: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
bc70: 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66  dex, int nDataOf
bc80: 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65  fset, byte[] bDe
bc90: 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20  st, int nStart, 
bca0: 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20  int nLength)..  
bcb0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
bcc0: 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  len = UnsafeNati
bcd0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
bce0: 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73  3_column_bytes(s
bcf0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
bd00: 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
bd10: 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74     // If no dest
bd20: 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20  ination buffer, 
bd30: 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20  return the size 
bd40: 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69  needed...      i
bd50: 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c  f (bDest == null
bd60: 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a  ) return nlen;..
bd70: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70  ..      int nCop
bd80: 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a  ied = nLength;..
bd90: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
bda0: 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62  ied + nStart > b
bdb0: 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f  Dest.Length) nCo
bdc0: 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e  pied = bDest.Len
bdd0: 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20  gth - nStart;.. 
bde0: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
bdf0: 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e   + nDataOffset >
be00: 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d   nlen) nCopied =
be10: 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66   nlen - nDataOff
be20: 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  set;....      if
be30: 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a   (nCopied > 0)..
be40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
be50: 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e   IntPtr ptr = Un
be60: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
be70: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
be80: 5f 62 6c 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69  _blob(stmt._sqli
be90: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
bea0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73  ....        Mars
beb0: 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72  hal.Copy((IntPtr
bec0: 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20  )(ptr.ToInt64() 
bed0: 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20  + nDataOffset), 
bee0: 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e  bDest, nStart, n
bef0: 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20  Copied);..      
bf00: 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  }..      else.. 
bf10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
bf20: 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20  nCopied = 0;..  
bf30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
bf40: 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a  eturn nCopied;..
bf50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
bf60: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
bf70: 6f 6e 67 20 47 65 74 43 68 61 72 73 28 53 51 4c  ong GetChars(SQL
bf80: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
bf90: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e  t, int index, in
bfa0: 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 63  t nDataOffset, c
bfb0: 68 61 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74  har[] bDest, int
bfc0: 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65   nStart, int nLe
bfd0: 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ngth)..    {..  
bfe0: 20 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20      int nlen;.. 
bff0: 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64       int nCopied
c000: 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20   = nLength;.... 
c010: 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 20       string str 
c020: 3d 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20  = GetText(stmt, 
c030: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e  index);..      n
c040: 6c 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68  len = str.Length
c050: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 62  ;....      if (b
c060: 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  Dest == null) re
c070: 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20  turn nlen;....  
c080: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
c090: 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74  + nStart > bDest
c0a0: 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64  .Length) nCopied
c0b0: 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20   = bDest.Length 
c0c0: 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20  - nStart;..     
c0d0: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
c0e0: 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65  DataOffset > nle
c0f0: 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65  n) nCopied = nle
c100: 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b  n - nDataOffset;
c110: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
c120: 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20  opied > 0)..    
c130: 20 20 20 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e      str.CopyTo(n
c140: 44 61 74 61 4f 66 66 73 65 74 2c 20 62 44 65 73  DataOffset, bDes
c150: 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69  t, nStart, nCopi
c160: 65 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65  ed);..      else
c170: 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d   nCopied = 0;...
c180: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43  .      return nC
c190: 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  opied;..    }...
c1a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
c1b0: 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75  erride bool IsNu
c1c0: 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ll(SQLiteStateme
c1d0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
c1e0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
c1f0: 20 20 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e    return (Column
c200: 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69  Affinity(stmt, i
c210: 6e 64 65 78 29 20 3d 3d 20 54 79 70 65 41 66 66  ndex) == TypeAff
c220: 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20  inity.Null);..  
c230: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
c240: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
c250: 20 41 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28   AggregateCount(
c260: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
c270: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
c280: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
c290: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c2a0: 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74  _aggregate_count
c2b0: 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20  (context);..    
c2c0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
c2d0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
c2e0: 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e 28 73  CreateFunction(s
c2f0: 74 72 69 6e 67 20 73 74 72 46 75 6e 63 74 69 6f  tring strFunctio
c300: 6e 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f  n, int nArgs, bo
c310: 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20  ol needCollSeq, 
c320: 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66  SQLiteCallback f
c330: 75 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62  unc, SQLiteCallb
c340: 61 63 6b 20 66 75 6e 63 73 74 65 70 2c 20 53 51  ack funcstep, SQ
c350: 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63  LiteFinalCallbac
c360: 6b 20 66 75 6e 63 66 69 6e 61 6c 29 0d 0a 20 20  k funcfinal)..  
c370: 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
c380: 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d  eErrorCode n;...
c390: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
c3a0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d  NDARD..      n =
c3b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
c3c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
c3d0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74  ate_function_int
c3e0: 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46  erop(_sql, ToUTF
c3f0: 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
c400: 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72  nArgs, 4, IntPtr
c410: 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
c420: 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
c430: 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d  , (needCollSeq =
c440: 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29  = true) ? 1 : 0)
c450: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d  ;..      if (n =
c460: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
c470: 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65  e.Ok) n = Unsafe
c480: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c490: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
c4a0: 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73  ction_interop(_s
c4b0: 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75  ql, ToUTF8(strFu
c4c0: 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20  nction), nArgs, 
c4d0: 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  1, IntPtr.Zero, 
c4e0: 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20  func, funcstep, 
c4f0: 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64  funcfinal, (need
c500: 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29  CollSeq == true)
c510: 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c 73   ? 1 : 0);..#els
c520: 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  e..      n = Uns
c530: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c540: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
c550: 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54  function(_sql, T
c560: 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f  oUTF8(strFunctio
c570: 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e  n), nArgs, 4, In
c580: 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c  tPtr.Zero, func,
c590: 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66   funcstep, funcf
c5a0: 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69 66  inal);..      if
c5b0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
c5c0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55  orCode.Ok) n = U
c5d0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
c5e0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
c5f0: 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c  e_function(_sql,
c600: 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74   ToUTF8(strFunct
c610: 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20  ion), nArgs, 1, 
c620: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
c630: 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e  c, funcstep, fun
c640: 63 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69 66  cfinal);..#endif
c650: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
c660: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
c670: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
c680: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
c690: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
c6a0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
c6b0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c6c0: 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 43 6f  de void CreateCo
c6d0: 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67 20 73  llation(string s
c6e0: 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c  trCollation, SQL
c6f0: 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e  iteCollation fun
c700: 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69  c, SQLiteCollati
c710: 6f 6e 20 66 75 6e 63 31 36 29 0d 0a 20 20 20 20  on func16)..    
c720: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
c730: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
c740: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c750: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
c760: 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20  collation(_sql, 
c770: 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74  ToUTF8(strCollat
c780: 69 6f 6e 29 2c 20 32 2c 20 49 6e 74 50 74 72 2e  ion), 2, IntPtr.
c790: 5a 65 72 6f 2c 20 66 75 6e 63 31 36 29 3b 0d 0a  Zero, func16);..
c7a0: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
c7b0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
c7c0: 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  k) n = UnsafeNat
c7d0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
c7e0: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
c7f0: 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  ion(_sql, ToUTF8
c800: 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20  (strCollation), 
c810: 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  1, IntPtr.Zero, 
c820: 66 75 6e 63 29 3b 0d 0a 20 20 20 20 20 20 69 66  func);..      if
c830: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
c840: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
c850: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
c860: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
c870: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
c880: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
c890: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e  override int Con
c8a0: 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61  textCollateCompa
c8b0: 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  re(CollationEnco
c8c0: 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e  dingEnum enc, In
c8d0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74  tPtr context, st
c8e0: 72 69 6e 67 20 73 31 2c 20 73 74 72 69 6e 67 20  ring s1, string 
c8f0: 73 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  s2)..    {..#if 
c900: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
c910: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
c920: 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  1;..      byte[]
c930: 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74   b2;..      Syst
c940: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
c950: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c   converter = nul
c960: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74  l;....      swit
c970: 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20  ch (enc)..      
c980: 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  {..        case 
c990: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
c9a0: 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20  gEnum.UTF8:..   
c9b0: 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72         converter
c9c0: 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45   = System.Text.E
c9d0: 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20  ncoding.UTF8;.. 
c9e0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
c9f0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
ca00: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
ca10: 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20  num.UTF16LE:..  
ca20: 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
ca30: 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
ca40: 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65  Encoding.Unicode
ca50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
ca60: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
ca70: 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
ca80: 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a  ingEnum.UTF16BE:
ca90: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
caa0: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
cab0: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67  ext.Encoding.Big
cac0: 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a  EndianUnicode;..
cad0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
cae0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
caf0: 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65     b1 = converte
cb00: 72 2e 47 65 74 42 79 74 65 73 28 73 31 29 3b 0d  r.GetBytes(s1);.
cb10: 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76  .      b2 = conv
cb20: 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 73  erter.GetBytes(s
cb30: 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  2);....      ret
cb40: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
cb50: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
cb60: 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70  context_collcomp
cb70: 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  are_interop(cont
cb80: 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67  ext, b1, b1.Leng
cb90: 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74  th, b2, b2.Lengt
cba0: 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  h);..#else..    
cbb0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
cbc0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
cbd0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
cbe0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
cbf0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
cc00: 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74  nt ContextCollat
cc10: 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69  eCompare(Collati
cc20: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65  onEncodingEnum e
cc30: 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65  nc, IntPtr conte
cc40: 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20 63  xt, char[] c1, c
cc50: 68 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b  har[] c2)..    {
cc60: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
cc70: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79  ANDARD..      by
cc80: 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20  te[] b1;..      
cc90: 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20  byte[] b2;..    
cca0: 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e    System.Text.En
ccb0: 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72  coding converter
ccc0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
ccd0: 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a    switch (enc)..
cce0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ccf0: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
cd00: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38  ncodingEnum.UTF8
cd10: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
cd20: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
cd30: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54  Text.Encoding.UT
cd40: 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  F8;..          b
cd50: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
cd60: 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
cd70: 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c  odingEnum.UTF16L
cd80: 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
cd90: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
cda0: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
cdb0: 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20  nicode;..       
cdc0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
cdd0: 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
cde0: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
cdf0: 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16BE:..        
ce00: 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
ce10: 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
ce20: 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63  ng.BigEndianUnic
ce30: 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ode;..          
ce40: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d  break;..      }.
ce50: 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f  ...      b1 = co
ce60: 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
ce70: 28 63 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20  (c1);..      b2 
ce80: 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
ce90: 79 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20  ytes(c2);....   
cea0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
ceb0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
cec0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f  lite3_context_co
ced0: 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f  llcompare_intero
cee0: 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62  p(context, b1, b
cef0: 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32  1.Length, b2, b2
cf00: 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65  .Length);..#else
cf10: 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
cf20: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
cf30: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
cf40: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
cf50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
cf60: 72 69 64 65 20 43 6f 6c 6c 61 74 69 6f 6e 53 65  ride CollationSe
cf70: 71 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c 61 74  quence GetCollat
cf80: 69 6f 6e 53 65 71 75 65 6e 63 65 28 53 51 4c 69  ionSequence(SQLi
cf90: 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 2c  teFunction func,
cfa0: 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29   IntPtr context)
cfb0: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
cfc0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
cfd0: 20 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e 53 65       CollationSe
cfe0: 71 75 65 6e 63 65 20 73 65 71 20 3d 20 6e 65 77  quence seq = new
cff0: 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   CollationSequen
d000: 63 65 28 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74  ce();..      int
d010: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74   len;..      int
d020: 20 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 69 6e   type;..      in
d030: 74 20 65 6e 63 3b 0d 0a 20 20 20 20 20 20 49 6e  t enc;..      In
d040: 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
d050: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d060: 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c  ite3_context_col
d070: 6c 73 65 71 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  lseq_interop(con
d080: 74 65 78 74 2c 20 6f 75 74 20 74 79 70 65 2c 20  text, out type, 
d090: 6f 75 74 20 65 6e 63 2c 20 6f 75 74 20 6c 65 6e  out enc, out len
d0a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
d0b0: 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e  p != null) seq.N
d0c0: 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ame = UTF8ToStri
d0d0: 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20  ng(p, len);..   
d0e0: 20 20 20 73 65 71 2e 54 79 70 65 20 3d 20 28 43     seq.Type = (C
d0f0: 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d  ollationTypeEnum
d100: 29 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 73 65  )type;..      se
d110: 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d  q._func = func;.
d120: 0a 20 20 20 20 20 20 73 65 71 2e 45 6e 63 6f 64  .      seq.Encod
d130: 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e  ing = (Collation
d140: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63  EncodingEnum)enc
d150: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
d160: 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20  n seq;..#else.. 
d170: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
d180: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
d190: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
d1a0: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
d1b0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
d1c0: 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56  e long GetParamV
d1d0: 61 6c 75 65 42 79 74 65 73 28 49 6e 74 50 74 72  alueBytes(IntPtr
d1e0: 20 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66   p, int nDataOff
d1f0: 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73  set, byte[] bDes
d200: 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69  t, int nStart, i
d210: 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20  nt nLength)..   
d220: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c   {..      int nl
d230: 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  en = UnsafeNativ
d240: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
d250: 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 29 3b  _value_bytes(p);
d260: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20  ....      // If 
d270: 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62  no destination b
d280: 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68  uffer, return th
d290: 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a  e size needed...
d2a0: 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20        if (bDest 
d2b0: 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
d2c0: 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  nlen;....      i
d2d0: 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65  nt nCopied = nLe
d2e0: 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ngth;....      i
d2f0: 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74  f (nCopied + nSt
d300: 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67  art > bDest.Leng
d310: 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44  th) nCopied = bD
d320: 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74  est.Length - nSt
d330: 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  art;..      if (
d340: 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f  nCopied + nDataO
d350: 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43  ffset > nlen) nC
d360: 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e  opied = nlen - n
d370: 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20  DataOffset;.... 
d380: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
d390: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   > 0)..      {..
d3a0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
d3b0: 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  tr = UnsafeNativ
d3c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
d3d0: 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b 0d  _value_blob(p);.
d3e0: 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68  ...        Marsh
d3f0: 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29  al.Copy((IntPtr)
d400: 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b  (ptr.ToInt64() +
d410: 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62   nDataOffset), b
d420: 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43  Dest, nStart, nC
d430: 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d  opied);..      }
d440: 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20  ..      else..  
d450: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e      {..        n
d460: 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20  Copied = 0;..   
d470: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
d480: 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20  turn nCopied;.. 
d490: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d4a0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f  rnal override do
d4b0: 75 62 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c  uble GetParamVal
d4c0: 75 65 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20  ueDouble(IntPtr 
d4d0: 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
d4e0: 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b     double value;
d4f0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
d500: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
d510: 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
d520: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d530: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
d540: 65 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a  e_double(ptr);..
d550: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
d560: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e  ANDARD..      Un
d570: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d580: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
d590: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70  double_interop(p
d5a0: 74 72 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d  tr, out value);.
d5b0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
d5c0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
d5d0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
d5e0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
d5f0: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
d600: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
d610: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
d620: 69 6e 74 20 47 65 74 50 61 72 61 6d 56 61 6c 75  int GetParamValu
d630: 65 49 6e 74 33 32 28 49 6e 74 50 74 72 20 70 74  eInt32(IntPtr pt
d640: 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  r)..    {..     
d650: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
d660: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d670: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 70 74  te3_value_int(pt
d680: 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  r);..    }....  
d690: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
d6a0: 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61  ide long GetPara
d6b0: 6d 56 61 6c 75 65 49 6e 74 36 34 28 49 6e 74 50  mValueInt64(IntP
d6c0: 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a  tr ptr)..    {..
d6d0: 20 20 20 20 20 20 49 6e 74 36 34 20 76 61 6c 75        Int64 valu
d6e0: 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  e;..#if !PLATFOR
d6f0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
d700: 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20  RK..      value 
d710: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
d720: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
d730: 6c 75 65 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d  lue_int64(ptr);.
d740: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
d750: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55  TANDARD..      U
d760: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
d770: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
d780: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 70  _int64_interop(p
d790: 74 72 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d  tr, out value);.
d7a0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
d7b0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
d7c0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
d7d0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
d7e0: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
d7f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
d800: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
d810: 73 74 72 69 6e 67 20 47 65 74 50 61 72 61 6d 56  string GetParamV
d820: 61 6c 75 65 54 65 78 74 28 49 6e 74 50 74 72 20  alueText(IntPtr 
d830: 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  ptr)..    {..#if
d840: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
d850: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
d860: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
d870: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
d880: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d890: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  .sqlite3_value_t
d8a0: 65 78 74 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c  ext_interop(ptr,
d8b0: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
d8c0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
d8d0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
d8e0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
d8f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
d900: 61 6c 75 65 5f 74 65 78 74 28 70 74 72 29 2c 0d  alue_text(ptr),.
d910: 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e  .        UnsafeN
d920: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d930: 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73  ite3_value_bytes
d940: 28 70 74 72 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  (ptr));..#endif.
d950: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
d960: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
d970: 54 79 70 65 41 66 66 69 6e 69 74 79 20 47 65 74  TypeAffinity Get
d980: 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28 49  ParamValueType(I
d990: 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
d9a0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
d9b0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d9c0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
d9d0: 65 5f 74 79 70 65 28 70 74 72 29 3b 0d 0a 20 20  e_type(ptr);..  
d9e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
d9f0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
da00: 64 20 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e 74  d ReturnBlob(Int
da10: 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 62 79 74  Ptr context, byt
da20: 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  e[] value)..    
da30: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
da40: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
da50: 69 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62  ite3_result_blob
da60: 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 2c  (context, value,
da70: 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20 28   value.Length, (
da80: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
da90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
daa0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
dab0: 69 64 20 52 65 74 75 72 6e 44 6f 75 62 6c 65 28  id ReturnDouble(
dac0: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
dad0: 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20  double value).. 
dae0: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
daf0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
db00: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61  WORK..      Unsa
db10: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
db20: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64  sqlite3_result_d
db30: 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 76  ouble(context, v
db40: 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53  alue);..#elif !S
db50: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
db60: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
db70: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
db80: 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f  3_result_double_
db90: 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c  interop(context,
dba0: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
dbb0: 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
dbc0: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
dbd0: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
dbe0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
dbf0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
dc00: 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
dc10: 75 72 6e 45 72 72 6f 72 28 49 6e 74 50 74 72 20  urnError(IntPtr 
dc20: 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20  context, string 
dc30: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
dc40: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
dc50: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
dc60: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f  _result_error(co
dc70: 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61  ntext, ToUTF8(va
dc80: 6c 75 65 29 2c 20 76 61 6c 75 65 2e 4c 65 6e 67  lue), value.Leng
dc90: 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  th);..    }.... 
dca0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
dcb0: 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
dcc0: 49 6e 74 33 32 28 49 6e 74 50 74 72 20 63 6f 6e  Int32(IntPtr con
dcd0: 74 65 78 74 2c 20 69 6e 74 20 76 61 6c 75 65 29  text, int value)
dce0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
dcf0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
dd00: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
dd10: 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 76  t_int(context, v
dd20: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  alue);..    }...
dd30: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
dd40: 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
dd50: 72 6e 49 6e 74 36 34 28 49 6e 74 50 74 72 20 63  rnInt64(IntPtr c
dd60: 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67 20 76 61 6c  ontext, long val
dd70: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ue)..    {..#if 
dd80: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
dd90: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
dda0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
ddb0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
ddc0: 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65  sult_int64(conte
ddd0: 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  xt, value);..#el
dde0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
ddf0: 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  ARD..      Unsaf
de00: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
de10: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
de20: 74 36 34 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  t64_interop(cont
de30: 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  ext, ref value);
de40: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
de50: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
de60: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
de70: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
de80: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
de90: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
dea0: 20 52 65 74 75 72 6e 4e 75 6c 6c 28 49 6e 74 50   ReturnNull(IntP
deb0: 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20  tr context)..   
dec0: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
ded0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
dee0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c  lite3_result_nul
def0: 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20  l(context);..   
df00: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
df10: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
df20: 20 52 65 74 75 72 6e 54 65 78 74 28 49 6e 74 50   ReturnText(IntP
df30: 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69  tr context, stri
df40: 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
df50: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
df60: 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29   = ToUTF8(value)
df70: 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  ;..      UnsafeN
df80: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
df90: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
dfa0: 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38  (context, ToUTF8
dfb0: 28 76 61 6c 75 65 29 2c 20 62 2e 4c 65 6e 67 74  (value), b.Lengt
dfc0: 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28  h - 1, (IntPtr)(
dfd0: 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  -1));..    }....
dfe0: 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54  #if INTEROP_VIRT
dff0: 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f  UAL_TABLE..    /
e000: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
e010: 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20    /// Calls the 
e020: 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f  native SQLite co
e030: 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72  re library in or
e040: 64 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20  der to create a 
e050: 64 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20  disposable..    
e060: 2f 2f 2f 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61  /// module conta
e070: 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d  ining the implem
e080: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76 69  entation of a vi
e090: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
e0a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
e0b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
e0c0: 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d   name="module">.
e0d0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64  .    /// The mod
e0e0: 75 6c 65 20 6f 62 6a 65 63 74 20 74 6f 20 62 65  ule object to be
e0f0: 20 75 73 65 64 20 77 68 65 6e 20 63 72 65 61 74   used when creat
e100: 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 64  ing the native d
e110: 69 73 70 6f 73 61 62 6c 65 20 6d 6f 64 75 6c 65  isposable module
e120: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
e130: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
e140: 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22  ram name="flags"
e150: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
e160: 6c 61 67 73 20 66 6f 72 20 74 68 65 20 61 73 73  lags for the ass
e170: 6f 63 69 61 74 65 64 20 3c 73 65 65 20 63 72 65  ociated <see cre
e180: 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  f="SQLiteConnect
e190: 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ion" /> object i
e1a0: 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f  nstance...    //
e1b0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
e1c0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
e1d0: 65 20 76 6f 69 64 20 43 72 65 61 74 65 4d 6f 64  e void CreateMod
e1e0: 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ule(SQLiteModule
e1f0: 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74 65 43   module, SQLiteC
e200: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
e210: 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  lags)..    {..  
e220: 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
e230: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
e240: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
e250: 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
e260: 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29  eption("module")
e270: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
e280: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
e290: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
e2a0: 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 29 20 21 3d 20  NoLogModule) != 
e2b0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
e2c0: 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c  Flags.NoLogModul
e2d0: 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  e)..        {.. 
e2e0: 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
e2f0: 65 2e 4c 6f 67 45 72 72 6f 72 73 20 3d 20 28 28  e.LogErrors = ((
e300: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
e310: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
e320: 67 4d 6f 64 75 6c 65 45 72 72 6f 72 29 20 3d 3d  gModuleError) ==
e330: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
e340: 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65  nFlags.LogModule
e350: 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  Error);..       
e360: 20 20 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45       module.LogE
e370: 78 63 65 70 74 69 6f 6e 73 20 3d 20 28 28 66 6c  xceptions = ((fl
e380: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
e390: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d  ectionFlags.LogM
e3a0: 6f 64 75 6c 65 45 78 63 65 70 74 69 6f 6e 29 20  oduleException) 
e3b0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
e3c0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75  ionFlags.LogModu
e3d0: 6c 65 45 78 63 65 70 74 69 6f 6e 29 3b 0d 0a 20  leException);.. 
e3e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e3f0: 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20      if (_sql == 
e400: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
e410: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
e420: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 63 6f  iteException("co
e430: 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
e440: 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 29  invalid handle")
e450: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 65 74  ;....        Set
e460: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 74 72  LoadExtension(tr
e470: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 4c 6f  ue);..        Lo
e480: 61 64 45 78 74 65 6e 73 69 6f 6e 28 55 6e 73 61  adExtension(Unsa
e490: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e4a0: 53 51 4c 49 54 45 5f 44 4c 4c 2c 20 22 73 71 6c  SQLITE_DLL, "sql
e4b0: 69 74 65 33 5f 76 74 73 68 69 6d 5f 69 6e 69 74  ite3_vtshim_init
e4c0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
e4d0: 66 20 28 6d 6f 64 75 6c 65 2e 43 72 65 61 74 65  f (module.Create
e4e0: 44 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65  DisposableModule
e4f0: 28 5f 73 71 6c 29 29 0d 0a 20 20 20 20 20 20 20  (_sql))..       
e500: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e510: 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20 3d 3d 20  if (_modules == 
e520: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
e530: 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73 20         _modules 
e540: 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79  = new Dictionary
e550: 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d  <string, SQLiteM
e560: 6f 64 75 6c 65 3e 28 29 3b 0d 0a 0d 0a 20 20 20  odule>();....   
e570: 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65           _module
e580: 73 2e 41 64 64 28 6d 6f 64 75 6c 65 2e 4e 61 6d  s.Add(module.Nam
e590: 65 2c 20 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20  e, module);.... 
e5a0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
e5b0: 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20  usePool)..      
e5c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e5d0: 20 20 20 20 20 20 20 20 20 5f 75 73 65 50 6f 6f           _usePoo
e5e0: 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69  l = false;....#i
e5f0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
e600: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
e610: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
e620: 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
e630: 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f  teLine(String.Fo
e640: 72 6d 61 74 28 22 43 72 65 61 74 65 4d 6f 64 75  rmat("CreateModu
e650: 6c 65 20 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c  le (Pool) Disabl
e660: 65 64 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29 29  ed: {0}", _sql))
e670: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
e680: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
e690: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
e6a0: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
e6b0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
e6c0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
e6d0: 69 6f 6e 28 47 65 74 4c 61 73 74 45 72 72 6f 72  ion(GetLastError
e6e0: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ());..        }.
e6f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
e700: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
e710: 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e   /// Calls the n
e720: 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72  ative SQLite cor
e730: 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64  e library in ord
e740: 65 72 20 74 6f 20 63 6c 65 61 6e 75 70 20 74 68  er to cleanup th
e750: 65 20 72 65 73 6f 75 72 63 65 73 0d 0a 20 20 20  e resources..   
e760: 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20   /// associated 
e770: 77 69 74 68 20 61 20 6d 6f 64 75 6c 65 20 63 6f  with a module co
e780: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 69 6d 70  ntaining the imp
e790: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
e7a0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
e7b0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
e7c0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
e7d0: 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65  ram name="module
e7e0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
e7f0: 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 70 72  module object pr
e800: 65 76 69 6f 75 73 6c 79 20 70 61 73 73 65 64 20  eviously passed 
e810: 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  to the <see cref
e820: 3d 22 43 72 65 61 74 65 4d 6f 64 75 6c 65 22 20  ="CreateModule" 
e830: 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6d 65 74 68  />..    /// meth
e840: 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  od...    /// </p
e850: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
e860: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67  param name="flag
e870: 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  s">..    /// The
e880: 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 61   flags for the a
e890: 73 73 6f 63 69 61 74 65 64 20 3c 73 65 65 20 63  ssociated <see c
e8a0: 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65  ref="SQLiteConne
e8b0: 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74  ction" /> object
e8c0: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
e8d0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
e8e0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
e8f0: 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65  ide void Dispose
e900: 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64  Module(SQLiteMod
e910: 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69  ule module, SQLi
e920: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
e930: 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d  s flags)..    {.
e940: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64  .        if (mod
e950: 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
e960: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
e970: 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
e980: 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c  Exception("modul
e990: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
e9a0: 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65 28 29  module.Dispose()
e9b0: 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66  ;..    }..#endif
e9c0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
e9d0: 20 6f 76 65 72 72 69 64 65 20 49 6e 74 50 74 72   override IntPtr
e9e0: 20 41 67 67 72 65 67 61 74 65 43 6f 6e 74 65 78   AggregateContex
e9f0: 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  t(IntPtr context
ea00: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
ea10: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
ea20: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
ea30: 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e  e3_aggregate_con
ea40: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 31 29  text(context, 1)
ea50: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20  ;..    }....#if 
ea60: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
ea70: 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c  TABLE..    /// <
ea80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
ea90: 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69  / Calls the nati
eaa0: 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  ve SQLite core l
eab0: 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20  ibrary in order 
eac0: 74 6f 20 64 65 63 6c 61 72 65 20 61 20 76 69 72  to declare a vir
ead0: 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20  tual table..    
eae0: 2f 2f 2f 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  /// in response 
eaf0: 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74  to a call into t
eb00: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
eb10: 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
eb20: 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20  e.xCreate" />.. 
eb30: 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63     /// or <see c
eb40: 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
eb50: 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
eb60: 74 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 74 61  t" /> virtual ta
eb70: 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20  ble methods...  
eb80: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
eb90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
eba0: 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d   name="module">.
ebb0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69 72  .    /// The vir
ebc0: 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c  tual table modul
ebd0: 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20  e that is to be 
ebe0: 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20  responsible for 
ebf0: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
ec00: 65 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 69 6e 67  e..    /// being
ec10: 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20   declared...    
ec20: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
ec30: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
ec40: 65 3d 22 73 74 72 53 71 6c 22 3e 0d 0a 20 20 20  e="strSql">..   
ec50: 20 2f 2f 2f 20 54 68 65 20 73 74 72 69 6e 67 20   /// The string 
ec60: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
ec70: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 64 65 73  QL statement des
ec80: 63 72 69 62 69 6e 67 20 74 68 65 20 76 69 72 74  cribing the virt
ec90: 75 61 6c 20 74 61 62 6c 65 20 74 6f 0d 0a 20 20  ual table to..  
eca0: 20 20 2f 2f 2f 20 62 65 20 64 65 63 6c 61 72 65    /// be declare
ecb0: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
ecc0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
ecd0: 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72  aram name="error
ece0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e  ">..    /// Upon
ecf0: 20 73 75 63 63 65 73 73 2c 20 74 68 65 20 63 6f   success, the co
ed00: 6e 74 65 6e 74 73 20 6f 66 20 74 68 69 73 20 70  ntents of this p
ed10: 61 72 61 6d 65 74 65 72 20 61 72 65 20 75 6e 64  arameter are und
ed20: 65 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61  efined.  Upon fa
ed30: 69 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20  ilure,..    /// 
ed40: 69 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69  it should contai
ed50: 6e 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65  n an appropriate
ed60: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d   error message..
ed70: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
ed80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
ed90: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20  rns>..    /// A 
eda0: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
edb0: 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
edc0: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
edd0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ede0: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
edf0: 72 6f 72 43 6f 64 65 20 44 65 63 6c 61 72 65 56  rorCode DeclareV
ee00: 69 72 74 75 61 6c 54 61 62 6c 65 28 0d 0a 20 20  irtualTable(..  
ee10: 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75        SQLiteModu
ee20: 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20  le module,..    
ee30: 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 53 71      string strSq
ee40: 6c 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  l,..        ref 
ee50: 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
ee60: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
ee70: 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c          if (_sql
ee80: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
ee90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
eea0: 20 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65    error = "conne
eeb0: 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76  ction has an inv
eec0: 61 6c 69 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20  alid handle";.. 
eed0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
eee0: 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
eef0: 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20  e.Error;..      
ef00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49    }....        I
ef10: 6e 74 50 74 72 20 70 53 71 6c 20 3d 20 49 6e 74  ntPtr pSql = Int
ef20: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
ef30: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
ef40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ef50: 20 70 53 71 6c 20 3d 20 53 51 4c 69 74 65 53 74   pSql = SQLiteSt
ef60: 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46  ring.Utf8IntPtrF
ef70: 72 6f 6d 53 74 72 69 6e 67 28 73 74 72 53 71 6c  romString(strSql
ef80: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
ef90: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
efa0: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
efb0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
efc0: 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 0d  3_declare_vtab(.
efd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
efe0: 20 5f 73 71 6c 2c 20 70 53 71 6c 29 3b 0d 0a 0d   _sql, pSql);...
eff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
f000: 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
f010: 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6d  orCode.Ok) && (m
f020: 6f 64 75 6c 65 20 21 3d 20 6e 75 6c 6c 29 29 0d  odule != null)).
f030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f040: 20 6d 6f 64 75 6c 65 2e 44 65 63 6c 61 72 65 64   module.Declared
f050: 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20   = true;....    
f060: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
f070: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
f080: 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47 65 74  .Ok) error = Get
f090: 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a  LastError();....
f0a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
f0b0: 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rn n;..        }
f0c0: 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
f0d0: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
f0e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 53            if (pS
f0f0: 71 6c 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ql != IntPtr.Zer
f100: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
f110: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
f120: 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e     SQLiteMemory.
f130: 46 72 65 65 28 70 53 71 6c 29 3b 0d 0a 20 20 20  Free(pSql);..   
f140: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 53 71               pSq
f150: 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  l = IntPtr.Zero;
f160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
f170: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
f180: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
f190: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
f1a0: 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65  Calls the native
f1b0: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
f1c0: 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f  rary in order to
f1d0: 20 64 65 63 6c 61 72 65 20 61 20 76 69 72 74 75   declare a virtu
f1e0: 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f  al table..    //
f1f0: 2f 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 72 65  / function in re
f200: 73 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c  sponse to a call
f210: 20 69 6e 74 6f 20 74 68 65 20 3c 73 65 65 20 63   into the <see c
f220: 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
f230: 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
f240: 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72  " />..    /// or
f250: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
f260: 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
f270: 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72  xConnect" /> vir
f280: 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f  tual table metho
f290: 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ds...    /// </s
f2a0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
f2b0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f   <param name="mo
f2c0: 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  dule">..    /// 
f2d0: 54 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  The virtual tabl
f2e0: 65 20 6d 6f 64 75 6c 65 20 74 68 61 74 20 69 73  e module that is
f2f0: 20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73 69 62   to be responsib
f300: 6c 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75  le for the virtu
f310: 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f  al table..    //
f320: 2f 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67  / function being
f330: 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20   declared...    
f340: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
f350: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
f360: 65 3d 22 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74  e="argumentCount
f370: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
f380: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
f390: 6e 74 73 20 74 6f 20 74 68 65 20 66 75 6e 63 74  nts to the funct
f3a0: 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72  ion being declar
f3b0: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
f3c0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
f3d0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65  param name="name
f3e0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
f3f0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
f400: 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61  tion being decla
f410: 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  red...    /// </
f420: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
f430: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72  <param name="err
f440: 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70  or">..    /// Up
f450: 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 65 20  on success, the 
f460: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 69 73  contents of this
f470: 20 70 61 72 61 6d 65 74 65 72 20 61 72 65 20 75   parameter are u
f480: 6e 64 65 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20  ndefined.  Upon 
f490: 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f  failure,..    //
f4a0: 2f 20 69 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74  / it should cont
f4b0: 61 69 6e 20 61 6e 20 61 70 70 72 6f 70 72 69 61  ain an appropria
f4c0: 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  te error message
f4d0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
f4e0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
f4f0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
f500: 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
f510: 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
f520: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
f530: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
f540: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
f550: 45 72 72 6f 72 43 6f 64 65 20 44 65 63 6c 61 72  ErrorCode Declar
f560: 65 56 69 72 74 75 61 6c 46 75 6e 63 74 69 6f 6e  eVirtualFunction
f570: 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
f580: 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d  eModule module,.
f590: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67  .        int arg
f5a0: 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20  umentCount,..   
f5b0: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
f5c0: 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73  ,..        ref s
f5d0: 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
f5e0: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
f5f0: 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20         if (_sql 
f600: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
f610: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f620: 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63   error = "connec
f630: 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61  tion has an inva
f640: 6c 69 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20  lid handle";..  
f650: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
f660: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
f670: 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20  .Error;..       
f680: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e   }....        In
f690: 74 50 74 72 20 70 4e 61 6d 65 20 3d 20 49 6e 74  tPtr pName = Int
f6a0: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
f6b0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
f6c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f6d0: 20 70 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53   pName = SQLiteS
f6e0: 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72  tring.Utf8IntPtr
f6f0: 46 72 6f 6d 53 74 72 69 6e 67 28 6e 61 6d 65 29  FromString(name)
f700: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f710: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
f720: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
f730: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
f740: 5f 6f 76 65 72 6c 6f 61 64 5f 66 75 6e 63 74 69  _overload_functi
f750: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
f760: 20 20 20 20 20 5f 73 71 6c 2c 20 70 4e 61 6d 65       _sql, pName
f770: 2c 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 29  , argumentCount)
f780: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f790: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
f7a0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72  ErrorCode.Ok) er
f7b0: 72 6f 72 20 3d 20 47 65 74 4c 61 73 74 45 72 72  ror = GetLastErr
f7c0: 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  or();....       
f7d0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a       return n;..
f7e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
f7f0: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
f800: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f810: 20 20 20 69 66 20 28 70 4e 61 6d 65 20 21 3d 20     if (pName != 
f820: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
f830: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f840: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
f850: 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70  iteMemory.Free(p
f860: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
f870: 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d 20          pName = 
f880: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
f890: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
f8a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23       }..    }..#
f8b0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  endif....    ///
f8c0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
f8d0: 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64  /// Enables or d
f8e0: 69 73 61 62 6c 65 64 20 65 78 74 65 6e 73 69 6f  isabled extensio
f8f0: 6e 20 6c 6f 61 64 69 6e 67 20 62 79 20 53 51 4c  n loading by SQL
f900: 69 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ite...    /// </
f910: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
f920: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
f930: 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f  OnOff">..    ///
f940: 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
f950: 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78 74 65 6e  loading of exten
f960: 73 69 6f 6e 73 2c 20 66 61 6c 73 65 20 74 6f 20  sions, false to 
f970: 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f  disable...    //
f980: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
f990: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
f9a0: 65 20 76 6f 69 64 20 53 65 74 4c 6f 61 64 45 78  e void SetLoadEx
f9b0: 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20 62 4f 6e  tension(bool bOn
f9c0: 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  Off)..    {..   
f9d0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
f9e0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
f9f0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
fa00: 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64  ite3_enable_load
fa10: 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20  _extension(..   
fa20: 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 28           _sql, (
fa30: 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29  bOnOff ? -1 : 0)
fa40: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
fa50: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
fa60: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
fa70: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
fa80: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
fa90: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
faa0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
fab0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f  ary>..    /// Lo
fac0: 61 64 73 20 61 20 53 51 4c 69 74 65 20 65 78 74  ads a SQLite ext
fad0: 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72 79 20 66  ension library f
fae0: 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 66 69  rom the named fi
faf0: 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  le...    /// </s
fb00: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
fb10: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69   <param name="fi
fb20: 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f  leName">..    //
fb30: 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  / The name of th
fb40: 65 20 64 79 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c  e dynamic link l
fb50: 69 62 72 61 72 79 20 66 69 6c 65 20 63 6f 6e 74  ibrary file cont
fb60: 61 69 6e 69 6e 67 20 74 68 65 20 65 78 74 65 6e  aining the exten
fb70: 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sion...    /// <
fb80: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
fb90: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 72   <param name="pr
fba0: 6f 63 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f  ocName">..    //
fbb0: 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  / The name of th
fbc0: 65 20 65 78 70 6f 72 74 65 64 20 66 75 6e 63 74  e exported funct
fbd0: 69 6f 6e 20 75 73 65 64 20 74 6f 20 69 6e 69 74  ion used to init
fbe0: 69 61 6c 69 7a 65 20 74 68 65 20 65 78 74 65 6e  ialize the exten
fbf0: 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49  sion...    /// I
fc00: 66 20 6e 75 6c 6c 2c 20 74 68 65 20 64 65 66 61  f null, the defa
fc10: 75 6c 74 20 22 73 71 6c 69 74 65 33 5f 65 78 74  ult "sqlite3_ext
fc20: 65 6e 73 69 6f 6e 5f 69 6e 69 74 22 20 77 69 6c  ension_init" wil
fc30: 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20  l be used...    
fc40: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
fc50: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
fc60: 69 64 65 20 76 6f 69 64 20 4c 6f 61 64 45 78 74  ide void LoadExt
fc70: 65 6e 73 69 6f 6e 28 73 74 72 69 6e 67 20 66 69  ension(string fi
fc80: 6c 65 4e 61 6d 65 2c 20 73 74 72 69 6e 67 20 70  leName, string p
fc90: 72 6f 63 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d  rocName)..    {.
fca0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 66 69 6c  .        if (fil
fcb0: 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  eName == null)..
fcc0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
fcd0: 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
fce0: 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 66 69 6c  llException("fil
fcf0: 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  eName");....    
fd00: 20 20 20 20 49 6e 74 50 74 72 20 70 45 72 72 6f      IntPtr pErro
fd10: 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
fd20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
fd30: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
fd40: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 75          byte[] u
fd50: 74 66 38 46 69 6c 65 4e 61 6d 65 20 3d 20 55 54  tf8FileName = UT
fd60: 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e  F8Encoding.UTF8.
fd70: 47 65 74 42 79 74 65 73 28 66 69 6c 65 4e 61 6d  GetBytes(fileNam
fd80: 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 20 20 20 20  e + '\0');..    
fd90: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 75          byte[] u
fda0: 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20 6e 75  tf8ProcName = nu
fdb0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
fdc0: 20 20 20 69 66 20 28 70 72 6f 63 4e 61 6d 65 20     if (procName 
fdd0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
fde0: 20 20 20 20 20 20 20 20 20 20 75 74 66 38 50 72            utf8Pr
fdf0: 6f 63 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63  ocName = UTF8Enc
fe00: 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79  oding.UTF8.GetBy
fe10: 74 65 73 28 70 72 6f 63 4e 61 6d 65 20 2b 20 27  tes(procName + '
fe20: 5c 30 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  \0');....       
fe30: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
fe40: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
fe50: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
fe60: 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  ite3_load_extens
fe70: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
fe80: 20 20 20 20 20 20 5f 73 71 6c 2c 20 75 74 66 38        _sql, utf8
fe90: 46 69 6c 65 4e 61 6d 65 2c 20 75 74 66 38 50 72  FileName, utf8Pr
fea0: 6f 63 4e 61 6d 65 2c 20 72 65 66 20 70 45 72 72  ocName, ref pErr
feb0: 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
fec0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
fed0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
fee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fef0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
ff00: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 55  teException(n, U
ff10: 54 46 38 54 6f 53 74 72 69 6e 67 28 70 45 72 72  TF8ToString(pErr
ff20: 6f 72 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20  or, -1));..     
ff30: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
ff40: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b  nally..        {
ff50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
ff60: 20 28 70 45 72 72 6f 72 20 21 3d 20 49 6e 74 50   (pError != IntP
ff70: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
ff80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ff90: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
ffa0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
ffb0: 69 74 65 33 5f 66 72 65 65 28 70 45 72 72 6f 72  ite3_free(pError
ffc0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
ffd0: 20 20 20 20 70 45 72 72 6f 72 20 3d 20 49 6e 74      pError = Int
ffe0: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
fff0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10000 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
10010 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72    /// Enables or
10020 20 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e 64   disabled extend
10030 65 64 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20  ed result codes 
10040 72 65 74 75 72 6e 65 64 20 62 79 20 53 51 4c 69  returned by SQLi
10050 74 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  te..    internal
10060 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
10070 65 74 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74  etExtendedResult
10080 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66  Codes(bool bOnOf
10090 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  f)..    {..     
100a0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
100b0 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
100c0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
100d0 5f 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74  _extended_result
100e0 5f 63 6f 64 65 73 28 0d 0a 20 20 20 20 20 20 20  _codes(..       
100f0 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66     _sql, (bOnOff
10100 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a   ? -1 : 0));....
10110 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
10120 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
10130 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
10140 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
10150 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
10160 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f  ..    }..    ///
10170 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20 53   Gets the last S
10180 51 4c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65  QLite error code
10190 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
101a0 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
101b0 72 6f 72 43 6f 64 65 20 52 65 73 75 6c 74 43 6f  rorCode ResultCo
101c0 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  de()..    {..   
101d0 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
101e0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
101f0 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 5f 73  lite3_errcode(_s
10200 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  ql);..    }..   
10210 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61   /// Gets the la
10220 73 74 20 53 51 4c 69 74 65 20 65 78 74 65 6e 64  st SQLite extend
10230 65 64 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20  ed error code.. 
10240 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
10250 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
10260 43 6f 64 65 20 45 78 74 65 6e 64 65 64 52 65 73  Code ExtendedRes
10270 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b  ultCode()..    {
10280 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
10290 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
102a0 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e  ds.sqlite3_exten
102b0 64 65 64 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c  ded_errcode(_sql
102c0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
102d0 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d   /// Add a log m
102e0 65 73 73 61 67 65 20 76 69 61 20 74 68 65 20 53  essage via the S
102f0 51 4c 69 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f  QLite sqlite3_lo
10300 67 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20  g interface...  
10310 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
10320 69 64 65 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73  ide void LogMess
10330 61 67 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43  age(SQLiteErrorC
10340 6f 64 65 20 69 45 72 72 43 6f 64 65 2c 20 73 74  ode iErrCode, st
10350 72 69 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a  ring zMessage)..
10360 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
10370 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10380 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72  .sqlite3_log(iEr
10390 72 43 6f 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d  rCode, ToUTF8(zM
103a0 65 73 73 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d  essage));..    }
103b0 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f  ....#if INTEROP_
103c0 43 4f 44 45 43 0d 0a 20 20 20 20 69 6e 74 65 72  CODEC..    inter
103d0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
103e0 64 20 53 65 74 50 61 73 73 77 6f 72 64 28 62 79  d SetPassword(by
103f0 74 65 5b 5d 20 70 61 73 73 77 6f 72 64 42 79 74  te[] passwordByt
10400 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  es)..    {..    
10410 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
10420 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
10430 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10440 33 5f 6b 65 79 28 5f 73 71 6c 2c 20 70 61 73 73  3_key(_sql, pass
10450 77 6f 72 64 42 79 74 65 73 2c 20 70 61 73 73 77  wordBytes, passw
10460 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29  ordBytes.Length)
10470 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ;..      if (n !
10480 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
10490 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
104a0 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
104b0 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
104c0 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
104d0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
104e0 69 64 65 20 76 6f 69 64 20 43 68 61 6e 67 65 50  ide void ChangeP
104f0 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e  assword(byte[] n
10500 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 29  ewPasswordBytes)
10510 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
10520 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
10530 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
10540 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
10550 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65 77 50 61  ekey(_sql, newPa
10560 73 73 77 6f 72 64 42 79 74 65 73 2c 20 28 6e 65  sswordBytes, (ne
10570 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 20 3d  wPasswordBytes =
10580 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a 20 6e 65  = null) ? 0 : ne
10590 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c  wPasswordBytes.L
105a0 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69  ength);..      i
105b0 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
105c0 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
105d0 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
105e0 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
105f0 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
10600 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
10610 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
10620 65 20 76 6f 69 64 20 53 65 74 55 70 64 61 74 65  e void SetUpdate
10630 48 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64 61 74  Hook(SQLiteUpdat
10640 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  eCallback func).
10650 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
10660 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10670 73 2e 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65  s.sqlite3_update
10680 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63  _hook(_sql, func
10690 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
106a0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
106b0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
106c0 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69 74 48 6f  void SetCommitHo
106d0 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d 69 74 43  ok(SQLiteCommitC
106e0 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
106f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
10700 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10710 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 68  sqlite3_commit_h
10720 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20  ook(_sql, func, 
10730 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20  IntPtr.Zero);.. 
10740 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
10750 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
10760 69 64 20 53 65 74 54 72 61 63 65 43 61 6c 6c 62  id SetTraceCallb
10770 61 63 6b 28 53 51 4c 69 74 65 54 72 61 63 65 43  ack(SQLiteTraceC
10780 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
10790 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
107a0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
107b0 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 5f 73  sqlite3_trace(_s
107c0 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
107d0 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
107e0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
107f0 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
10800 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c  RollbackHook(SQL
10810 69 74 65 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  iteRollbackCallb
10820 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
10830 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
10840 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10850 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f  te3_rollback_hoo
10860 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e  k(_sql, func, In
10870 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
10880 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
10890 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
108a0 20 41 6c 6c 6f 77 73 20 74 68 65 20 73 65 74 74   Allows the sett
108b0 69 6e 67 20 6f 66 20 61 20 6c 6f 67 67 69 6e 67  ing of a logging
108c0 20 63 61 6c 6c 62 61 63 6b 20 69 6e 76 6f 6b 65   callback invoke
108d0 64 20 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e  d by SQLite when
108e0 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 67 20   a..    /// log 
108f0 65 76 65 6e 74 20 6f 63 63 75 72 73 2e 20 20 4f  event occurs.  O
10900 6e 6c 79 20 6f 6e 65 20 63 61 6c 6c 62 61 63 6b  nly one callback
10910 20 6d 61 79 20 62 65 20 73 65 74 2e 20 20 49 66   may be set.  If
10920 20 4e 55 4c 4c 20 69 73 20 70 61 73 73 65 64 2c   NULL is passed,
10930 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6c 6f  ..    /// the lo
10940 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69  gging callback i
10950 73 20 75 6e 72 65 67 69 73 74 65 72 65 64 2e 0d  s unregistered..
10960 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
10970 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
10980 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 22 3e  ram name="func">
10990 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  The callback fun
109a0 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e  ction to invoke.
109b0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
109c0 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72  / <returns>Retur
109d0 6e 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64 65  ns a result code
109e0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
109f0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
10a00 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
10a10 65 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b  e SetLogCallback
10a20 28 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61  (SQLiteLogCallba
10a30 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
10a40 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
10a50 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e  rrorCode rc = Un
10a60 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10a70 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  s.sqlite3_config
10a80 5f 6c 6f 67 28 0d 0a 20 20 20 20 20 20 20 20 20  _log(..         
10a90 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f     SQLiteConfigO
10aa0 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f  psEnum.SQLITE_CO
10ab0 4e 46 49 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20  NFIG_LOG, func, 
10ac0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d  IntPtr.Zero);...
10ad0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
10ae0 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  rc;..    }....  
10af0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
10b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b50 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  /....    /// <su
10b60 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
10b70 43 72 65 61 74 65 73 20 61 20 6e 65 77 20 53 51  Creates a new SQ
10b80 4c 69 74 65 20 62 61 63 6b 75 70 20 6f 62 6a 65  Lite backup obje
10b90 63 74 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  ct based on the 
10ba0 70 72 6f 76 69 64 65 64 20 64 65 73 74 69 6e 61  provided destina
10bb0 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61  tion..    /// da
10bc0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
10bd0 6e 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20 64  n.  The source d
10be0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
10bf0 6f 6e 20 69 73 20 74 68 65 20 6f 6e 65 0d 0a 20  on is the one.. 
10c00 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65     /// associate
10c10 64 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65  d with this obje
10c20 63 74 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20  ct.  The source 
10c30 61 6e 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  and destination 
10c40 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f  database..    //
10c50 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 63 61  / connections ca
10c60 6e 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d 65  nnot be the same
10c70 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
10c80 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
10c90 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74  param name="dest
10ca0 43 6e 6e 22 3e 54 68 65 20 64 65 73 74 69 6e 61  Cnn">The destina
10cb0 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 63 6f  tion database co
10cc0 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d  nnection.</param
10cd0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
10ce0 6d 20 6e 61 6d 65 3d 22 64 65 73 74 4e 61 6d 65  m name="destName
10cf0 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f  ">The destinatio
10d00 6e 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e  n database name.
10d10 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
10d20 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
10d30 6f 75 72 63 65 4e 61 6d 65 22 3e 54 68 65 20 73  ourceName">The s
10d40 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20 6e  ource database n
10d50 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ame.</param>..  
10d60 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
10d70 68 65 20 6e 65 77 6c 79 20 63 72 65 61 74 65 64  he newly created
10d80 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 3c   backup object.<
10d90 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
10da0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
10db0 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 49 6e   SQLiteBackup In
10dc0 69 74 69 61 6c 69 7a 65 42 61 63 6b 75 70 28 0d  itializeBackup(.
10dd0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43  .        SQLiteC
10de0 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74 43 6e  onnection destCn
10df0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  n,..        stri
10e00 6e 67 20 64 65 73 74 4e 61 6d 65 2c 0d 0a 20 20  ng destName,..  
10e10 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 6f 75        string sou
10e20 72 63 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  rceName..       
10e30 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
10e40 20 20 20 69 66 20 28 64 65 73 74 43 6e 6e 20 3d     if (destCnn =
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 64 65 73 74 43 6e 6e 22 29 3b  tion("destCnn");
10e90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
10ea0 64 65 73 74 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  destName == null
10eb0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
10ec0 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
10ed0 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
10ee0 64 65 73 74 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20  destName");.... 
10ef0 20 20 20 20 20 20 20 69 66 20 28 73 6f 75 72 63         if (sourc
10f00 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  eName == null)..
10f10 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
10f20 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
10f30 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 73 6f 75  llException("sou
10f40 72 63 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20  rceName");....  
10f50 20 20 20 20 20 20 53 51 4c 69 74 65 33 20 64 65        SQLite3 de
10f60 73 74 53 71 6c 69 74 65 33 20 3d 20 64 65 73 74  stSqlite3 = dest
10f70 43 6e 6e 2e 5f 73 71 6c 20 61 73 20 53 51 4c 69  Cnn._sql as SQLi
10f80 74 65 33 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te3;....        
10f90 69 66 20 28 64 65 73 74 53 71 6c 69 74 65 33 20  if (destSqlite3 
10fa0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
10fb0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
10fc0 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f  ArgumentExceptio
10fd0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
10fe0 20 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e      "Destination
10ff0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20   connection has 
11000 6e 6f 20 77 72 61 70 70 65 72 2e 22 2c 0d 0a 20  no wrapper.",.. 
11010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
11020 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20  destCnn");....  
11030 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
11040 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 64 65 73  ectionHandle des
11050 74 48 61 6e 64 6c 65 20 3d 20 64 65 73 74 53 71  tHandle = destSq
11060 6c 69 74 65 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20  lite3._sql;.... 
11070 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74 48         if (destH
11080 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
11090 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
110a0 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78  w new ArgumentEx
110b0 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
110c0 20 20 20 20 20 20 20 20 20 20 22 44 65 73 74 69            "Desti
110d0 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  nation connectio
110e0 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  n has an invalid
110f0 20 68 61 6e 64 6c 65 2e 22 2c 0d 0a 20 20 20 20   handle.",..    
11100 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65 73              "des
11110 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tCnn");....     
11120 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
11130 69 6f 6e 48 61 6e 64 6c 65 20 73 6f 75 72 63 65  ionHandle source
11140 48 61 6e 64 6c 65 20 3d 20 5f 73 71 6c 3b 0d 0a  Handle = _sql;..
11150 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 6f  ..        if (so
11160 75 72 63 65 48 61 6e 64 6c 65 20 3d 3d 20 6e 75  urceHandle == nu
11170 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
11180 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
11190 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
111a0 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
111b0 20 20 20 20 20 20 20 22 53 6f 75 72 63 65 20 63         "Source c
111c0 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e  onnection has an
111d0 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
111e0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62  ");....        b
111f0 79 74 65 5b 5d 20 7a 44 65 73 74 4e 61 6d 65 20  yte[] zDestName 
11200 3d 20 54 6f 55 54 46 38 28 64 65 73 74 4e 61 6d  = ToUTF8(destNam
11210 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 79 74  e);..        byt
11220 65 5b 5d 20 7a 53 6f 75 72 63 65 4e 61 6d 65 20  e[] zSourceName 
11230 3d 20 54 6f 55 54 46 38 28 73 6f 75 72 63 65 4e  = ToUTF8(sourceN
11240 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
11250 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
11260 64 6c 65 20 62 61 63 6b 75 70 48 61 6e 64 6c 65  dle backupHandle
11270 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
11280 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
11290 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
112a0 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
112b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
112c0 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f     finally /* NO
112d0 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74  TE: Thread.Abort
112e0 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a  () protection. *
112f0 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  /..        {..  
11300 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
11310 20 62 61 63 6b 75 70 20 3d 20 55 6e 73 61 66 65   backup = Unsafe
11320 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
11330 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69  lite3_backup_ini
11340 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
11350 20 20 20 20 64 65 73 74 48 61 6e 64 6c 65 2c 20      destHandle, 
11360 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63  zDestName, sourc
11370 65 48 61 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65  eHandle, zSource
11380 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
11390 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70        if (backup
113a0 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
113b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
113c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
113d0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
113e0 20 72 65 73 75 6c 74 43 6f 64 65 20 3d 20 52 65   resultCode = Re
113f0 73 75 6c 74 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20  sultCode();.... 
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11410 66 20 28 72 65 73 75 6c 74 43 6f 64 65 20 21 3d  f (resultCode !=
11420 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
11430 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
11440 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
11450 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
11460 69 6f 6e 28 72 65 73 75 6c 74 43 6f 64 65 2c 20  ion(resultCode, 
11470 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
11480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11490 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
114a0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
114b0 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
114c0 70 74 69 6f 6e 28 22 66 61 69 6c 65 64 20 74 6f  ption("failed to
114d0 20 69 6e 69 74 69 61 6c 69 7a 65 20 62 61 63 6b   initialize back
114e0 75 70 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  up");..         
114f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
11500 20 20 20 20 62 61 63 6b 75 70 48 61 6e 64 6c 65      backupHandle
11510 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63   = new SQLiteBac
11520 6b 75 70 48 61 6e 64 6c 65 28 64 65 73 74 48 61  kupHandle(destHa
11530 6e 64 6c 65 2c 20 62 61 63 6b 75 70 29 3b 0d 0a  ndle, backup);..
11540 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
11550 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
11560 53 51 4c 69 74 65 42 61 63 6b 75 70 28 0d 0a 20  SQLiteBackup(.. 
11570 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2c             this,
11580 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64   backupHandle, d
11590 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74  estHandle, zDest
115a0 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64  Name, sourceHand
115b0 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
115c0 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a   zSourceName);..
115d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
115e0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
115f0 2f 2f 2f 20 43 6f 70 69 65 73 20 75 70 20 74 6f  /// Copies up to
11600 20 4e 20 70 61 67 65 73 20 66 72 6f 6d 20 74 68   N pages from th
11610 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
11620 65 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61  e to the destina
11630 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61  tion..    /// da
11640 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65  tabase associate
11650 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  d with the speci
11660 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65  fied backup obje
11670 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ct...    /// </s
11680 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
11690 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61   <param name="ba
116a0 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70  ckup">The backup
116b0 20 6f 62 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c   object to use.<
116c0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
116d0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50   <param name="nP
116e0 61 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  age">..    /// T
116f0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
11700 65 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61  es to copy, nega
11710 74 69 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c  tive to copy all
11720 20 72 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73   remaining pages
11730 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
11740 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
11750 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22  ram name="retry"
11760 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74  >..    /// Set t
11770 6f 20 74 72 75 65 20 69 66 20 74 68 65 20 6f 70  o true if the op
11780 65 72 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f  eration needs to
11790 20 62 65 20 72 65 74 72 69 65 64 20 64 75 65 20   be retried due 
117a0 74 6f 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  to database..   
117b0 20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73   /// locking iss
117c0 75 65 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ues; otherwise, 
117d0 73 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20  set to false... 
117e0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
117f0 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
11800 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65  s>..    /// True
11810 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6d 6f   if there are mo
11820 72 65 20 70 61 67 65 73 20 74 6f 20 62 65 20 63  re pages to be c
11830 6f 70 69 65 64 2c 20 66 61 6c 73 65 20 6f 74 68  opied, false oth
11840 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f  erwise...    ///
11850 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
11860 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
11870 64 65 20 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b  de bool StepBack
11880 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  up(..        SQL
11890 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70  iteBackup backup
118a0 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  ,..        int n
118b0 50 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 6f  Page,..        o
118c0 75 74 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20  ut bool retry.. 
118d0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
118e0 0a 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d  .        retry =
118f0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
11900 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
11910 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
11920 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
11930 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
11940 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
11950 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
11960 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
11970 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
11980 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
11990 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
119a0 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
119b0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
119c0 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
119d0 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
119e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
119f0 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
11a00 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
11a10 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
11a20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
11a30 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
11a40 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
11a50 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72  dlePtr == IntPtr
11a60 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
11a70 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
11a80 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
11a90 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
11aa0 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
11ab0 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
11ac0 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
11ad0 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20  ointer.");....  
11ae0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
11af0 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
11b00 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
11b10 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65  lite3_backup_ste
11b20 70 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61  p(handlePtr, nPa
11b30 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 61  ge);..        ba
11b40 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74  ckup._stepResult
11b50 20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53   = n; /* NOTE: S
11b60 61 76 65 20 66 6f 72 20 75 73 65 20 62 79 20 46  ave for use by F
11b70 69 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d  inishBackup. */.
11b80 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
11b90 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
11ba0 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
11bb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11bc0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
11bd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11be0 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
11bf0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42  QLiteErrorCode.B
11c00 75 73 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  usy)..        {.
11c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
11c20 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ry = true;..    
11c30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
11c40 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
11c50 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66  .        else if
11c60 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
11c70 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a  orCode.Locked)..
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 72 65 74 72 79 20 3d 20 74         retry = t
11ca0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
11cb0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
11cc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11cd0 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
11ce0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
11cf0 2e 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20 20  .Done)..        
11d00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
11d10 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
11d20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11d30 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b   else..        {
11d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
11d50 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
11d60 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
11d70 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
11d80 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
11d90 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
11da0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
11db0 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
11dc0 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e  f pages remainin
11dd0 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64 20 66  g to be copied f
11de0 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 0d 0a  rom the source..
11df0 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
11e00 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74   to the destinat
11e10 69 6f 6e 20 64 61 74 61 62 61 73 65 20 61 73 73  ion database ass
11e20 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
11e30 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20   specified..    
11e40 2f 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  /// backup objec
11e50 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
11e60 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
11e70 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
11e80 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
11e90 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e  object to check.
11ea0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
11eb0 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e  / <returns>The n
11ec0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72  umber of pages r
11ed0 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63  emaining to be c
11ee0 6f 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e  opied.</returns>
11ef0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11f00 76 65 72 72 69 64 65 20 69 6e 74 20 52 65 6d 61  verride int Rema
11f10 69 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20  iningBackup(..  
11f20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
11f30 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20  up backup..     
11f40 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
11f50 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
11f60 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
11f70 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
11f80 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
11f90 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b  ption("backup");
11fa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
11fb0 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68  teBackupHandle h
11fc0 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f  andle = backup._
11fd0 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a  sqlite_backup;..
11fe0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
11ff0 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
12000 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
12010 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
12020 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
12030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12040 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
12050 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
12060 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20  andle.");....   
12070 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
12080 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  lePtr = handle;.
12090 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
120a0 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50  andlePtr == IntP
120b0 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
120c0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
120d0 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
120e0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
120f0 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
12100 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
12110 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
12120 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a   pointer.");....
12130 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
12140 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12150 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  ds.sqlite3_backu
12160 70 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64  p_remaining(hand
12170 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a  lePtr);..    }..
12180 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
12190 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
121a0 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  urns the total n
121b0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
121c0 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74  n the source dat
121d0 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
121e0 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74  ..    /// with t
121f0 68 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63  he specified bac
12200 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20  kup object...   
12210 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
12220 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
12230 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68  name="backup">Th
12240 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
12250 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d  to check.</param
12260 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
12270 72 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75  rns>The total nu
12280 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
12290 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   the source data
122a0 62 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  base.</returns>.
122b0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
122c0 65 72 72 69 64 65 20 69 6e 74 20 50 61 67 65 43  erride int PageC
122d0 6f 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20 20  ountBackup(..   
122e0 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
122f0 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20  p backup..      
12300 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
12310 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
12320 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
12330 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
12340 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
12350 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
12360 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
12370 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
12380 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
12390 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
123a0 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
123b0 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
123c0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
123d0 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
123e0 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
123f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12400 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
12410 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
12420 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
12430 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
12440 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
12450 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
12460 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
12470 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
12480 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
12490 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
124a0 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
124b0 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
124c0 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
124d0 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
124e0 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20  pointer.");.... 
124f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
12500 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12510 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
12520 5f 70 61 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c  _pagecount(handl
12530 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ePtr);..    }...
12540 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
12550 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74  y>..    /// Dest
12560 72 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70 20  roys the backup 
12570 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20  object, rolling 
12580 62 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20  back any backup 
12590 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a  that may be in..
125a0 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e      /// progess.
125b0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
125c0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
125d0 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75  aram name="backu
125e0 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62  p">The backup ob
125f0 6a 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e  ject to destroy.
12600 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
12610 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
12620 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75  void FinishBacku
12630 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
12640 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d  teBackup backup.
12650 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
12660 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62  {..        if (b
12670 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ackup == null)..
12680 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
12690 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
126a0 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63  llException("bac
126b0 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  kup");....      
126c0 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61    SQLiteBackupHa
126d0 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61  ndle handle = ba
126e0 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63  ckup._sqlite_bac
126f0 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  kup;....        
12700 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75  if (handle == nu
12710 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
12720 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
12730 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
12740 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
12750 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
12760 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
12770 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
12780 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
12790 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61  r handlePtr = ha
127a0 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
127b0 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d   if (handlePtr =
127c0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
127d0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
127e0 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
127f0 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
12800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12810 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
12820 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
12830 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22  handle pointer."
12840 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  );....#if !SQLIT
12850 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
12860 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
12870 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
12880 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
12890 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73  te3_backup_finis
128a0 68 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  h_interop(handle
128b0 50 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  Ptr);..#else..  
128c0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
128d0 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
128e0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
128f0 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e  lite3_backup_fin
12900 69 73 68 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d  ish(handlePtr);.
12910 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
12920 20 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c   handle.SetHandl
12930 65 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d  eAsInvalid();...
12940 0a 23 69 66 20 43 4f 55 4e 54 5f 48 41 4e 44 4c  .#if COUNT_HANDL
12950 45 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  E..        if ((
12960 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
12970 43 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d  Code.Ok) || (n =
12980 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65  = backup._stepRe
12990 73 75 6c 74 29 29 20 68 61 6e 64 6c 65 2e 57 61  sult)) handle.Wa
129a0 73 52 65 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a  sReleasedOk();..
129b0 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
129c0 20 20 69 66 20 28 28 6e 20 21 3d 20 53 51 4c 69    if ((n != SQLi
129d0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
129e0 26 26 20 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e  && (n != backup.
129f0 5f 73 74 65 70 52 65 73 75 6c 74 29 29 0d 0a 20  _stepResult)).. 
12a00 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
12a10 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
12a20 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
12a30 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
12a40 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
12a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12aa0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
12ab0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
12ac0 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20   /// Determines 
12ad0 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  if the SQLite co
12ae0 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
12af0 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  een initialized 
12b00 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  for the..    ///
12b10 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
12b20 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
12b30 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
12b40 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
12b50 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69  / A boolean indi
12b60 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
12b70 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65  r not the SQLite
12b80 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
12b90 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20  s been..    /// 
12ba0 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
12bb0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
12bc0 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
12bd0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
12be0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
12bf0 62 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a  bool IsInitializ
12c00 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
12c10 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74       return Stat
12c20 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  icIsInitialized(
12c30 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
12c40 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
12c50 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e      /// Determin
12c60 65 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  es if the SQLite
12c70 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
12c80 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  s been initializ
12c90 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  ed for the..    
12ca0 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63  /// current proc
12cb0 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
12cc0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
12cd0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
12ce0 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69   /// A boolean i
12cf0 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
12d00 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c  r or not the SQL
12d10 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
12d20 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f   has been..    /
12d30 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  // initialized f
12d40 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  or the current p
12d50 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
12d60 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
12d70 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
12d80 20 62 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e   bool StaticIsIn
12d90 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20  itialized()..   
12da0 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a   {..        //..
12db0 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49          // BUGFI
12dc0 58 3a 20 50 72 65 76 65 6e 74 20 72 61 63 65 73  X: Prevent races
12dd0 20 77 69 74 68 20 6f 74 68 65 72 20 74 68 72 65   with other thre
12de0 61 64 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74  ads for this ent
12df0 69 72 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a  ire block, due..
12e00 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
12e10 20 20 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69     to the try/fi
12e20 6e 61 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e  nally semantics.
12e30 20 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32    See ticket [72
12e40 39 30 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20  905c9a77]...    
12e50 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
12e60 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d  lock (syncRoot).
12e70 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
12e80 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
12e90 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
12ea0 20 53 61 76 65 20 74 68 65 20 73 74 61 74 65 20   Save the state 
12eb0 6f 66 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63  of the logging c
12ec0 6c 61 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65  lass and then re
12ed0 73 74 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20  store it..      
12ee0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
12ef0 66 74 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65  fter we are done
12f00 20 74 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e   to avoid loggin
12f10 67 20 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65  g too many false
12f20 20 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20   errors...      
12f30 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
12f40 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64        bool saved
12f50 45 6e 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65  Enabled = SQLite
12f60 4c 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20  Log.Enabled;..  
12f70 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
12f80 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61  Log.Enabled = fa
12f90 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
12fa0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
12fb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12fc0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
12fd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
12fe0 4f 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64  OTE: This method
12ff0 20 5b 61 62 5d 75 73 65 73 20 74 68 65 20 66 61   [ab]uses the fa
13000 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 77  ct that SQLite w
13010 69 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20  ill always..    
13020 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
13030 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
13040 54 45 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79  TE_ERROR for any
13050 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75   unknown configu
13060 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20  ration option.. 
13070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13080 2f 20 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a  /       *unless*
13090 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
130a0 61 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20  ary has already 
130b0 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
130c0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
130d0 20 20 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74     //       In t
130e0 68 61 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c  hat case it will
130f0 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53   always return S
13100 51 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20  QLITE_MISUSE... 
13110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13120 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
13130 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
13140 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
13150 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13160 74 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28  te3_config_none(
13170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13180 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66        SQLiteConf
13190 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  igOpsEnum.SQLITE
131a0 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a  _CONFIG_NONE);..
131b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
131c0 20 20 72 65 74 75 72 6e 20 28 72 63 20 3d 3d 20    return (rc == 
131d0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
131e0 4d 69 73 75 73 65 29 3b 0d 0a 20 20 20 20 20 20  Misuse);..      
131f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
13200 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
13210 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
13220 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
13230 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d  iteLog.Enabled =
13240 20 73 61 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a   savedEnabled;..
13250 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
13260 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
13270 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
13280 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65  ary>..    /// He
13290 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f  lper function to
132a0 20 72 65 74 72 69 65 76 65 20 61 20 63 6f 6c 75   retrieve a colu
132b0 6d 6e 20 6f 66 20 64 61 74 61 20 66 72 6f 6d 20  mn of data from 
132c0 61 6e 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  an active statem
132d0 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ent...    /// </
132e0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
132f0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
13300 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65  tmt">The stateme
13310 6e 74 20 62 65 69 6e 67 20 73 74 65 70 28 29 27  nt being step()'
13320 64 20 74 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d  d through</param
13330 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
13340 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54  m name="flags">T
13350 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61  he flags associa
13360 74 65 64 20 77 69 74 68 20 74 68 65 20 63 6f 6e  ted with the con
13370 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e  nection.</param>
13380 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
13390 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68   name="index">Th
133a0 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74  e column index t
133b0 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
133c0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
133d0 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68  am name="typ">Th
133e0 65 20 74 79 70 65 20 6f 66 20 64 61 74 61 20 63  e type of data c
133f0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
13400 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e  column.  If Unin
13410 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 69 73 20  itialized, this 
13420 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65  function will re
13430 74 72 69 65 76 65 20 74 68 65 20 64 61 74 61 74  trieve the datat
13440 79 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ype information.
13450 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
13460 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72  / <returns>Retur
13470 6e 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 74  ns the data in t
13480 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72  he column</retur
13490 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
134a0 6c 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63  l override objec
134b0 74 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74  t GetValue(SQLit
134c0 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
134d0 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
134e0 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
134f0 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54  t index, SQLiteT
13500 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d  ype typ)..    {.
13510 0a 20 20 20 20 20 20 69 66 20 28 49 73 4e 75 6c  .      if (IsNul
13520 6c 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 20  l(stmt, index)) 
13530 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61  return DBNull.Va
13540 6c 75 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65  lue;..      Type
13550 41 66 66 69 6e 69 74 79 20 61 66 66 20 3d 20 74  Affinity aff = t
13560 79 70 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20  yp.Affinity;..  
13570 20 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c      Type t = nul
13580 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  l;....      if (
13590 74 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79  typ.Type != DbTy
135a0 70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20  pe.Object)..    
135b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d    {..        t =
135c0 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53   SQLiteConvert.S
135d0 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28  QLiteTypeToType(
135e0 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61  typ);..        a
135f0 66 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e  ff = TypeToAffin
13600 69 74 79 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d  ity(t);..      }
13610 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 28 66  ....      if ((f
13620 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
13630 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74  nectionFlags.Get
13640 41 6c 6c 41 73 54 65 78 74 29 20 3d 3d 20 53 51  AllAsText) == SQ
13650 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
13660 61 67 73 2e 47 65 74 41 6c 6c 41 73 54 65 78 74  ags.GetAllAsText
13670 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  )..          ret
13680 75 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74  urn GetText(stmt
13690 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
136a0 20 20 20 73 77 69 74 63 68 20 28 61 66 66 29 0d     switch (aff).
136b0 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
136c0 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
136d0 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20  ity.Blob:..     
136e0 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70       if (typ.Typ
136f0 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64  e == DbType.Guid
13700 20 26 26 20 74 79 70 2e 41 66 66 69 6e 69 74 79   && typ.Affinity
13710 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79   == TypeAffinity
13720 2e 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20  .Text)..        
13730 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47      return new G
13740 75 69 64 28 47 65 74 54 65 78 74 28 73 74 6d 74  uid(GetText(stmt
13750 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20  , index));....  
13760 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20          int n = 
13770 28 69 6e 74 29 47 65 74 42 79 74 65 73 28 73 74  (int)GetBytes(st
13780 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75  mt, index, 0, nu
13790 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20  ll, 0, 0);..    
137a0 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d        byte[] b =
137b0 20 6e 65 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20   new byte[n];.. 
137c0 20 20 20 20 20 20 20 20 20 47 65 74 42 79 74 65           GetByte
137d0 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30  s(stmt, index, 0
137e0 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20  , b, 0, n);.... 
137f0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
13800 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e  .Type == DbType.
13810 47 75 69 64 20 26 26 20 6e 20 3d 3d 20 31 36 29  Guid && n == 16)
13820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
13830 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28 62 29  turn new Guid(b)
13840 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  ;....          r
13850 65 74 75 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20  eturn b;..      
13860 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
13870 69 74 79 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20  ity.DateTime:.. 
13880 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
13890 47 65 74 44 61 74 65 54 69 6d 65 28 73 74 6d 74  GetDateTime(stmt
138a0 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
138b0 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
138c0 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20  nity.Double:..  
138d0 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
138e0 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65   null) return Ge
138f0 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e  tDouble(stmt, in
13900 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
13910 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
13920 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 44 6f  ChangeType(GetDo
13930 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  uble(stmt, index
13940 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20  ), t, null);..  
13950 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
13960 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a  ffinity.Int64:..
13970 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
13980 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
13990 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
139a0 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
139b0 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
139c0 66 28 53 42 79 74 65 29 29 20 72 65 74 75 72 6e  f(SByte)) return
139d0 20 47 65 74 53 42 79 74 65 28 73 74 6d 74 2c 20   GetSByte(stmt, 
139e0 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
139f0 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
13a00 6f 66 28 42 79 74 65 29 29 20 72 65 74 75 72 6e  of(Byte)) return
13a10 20 47 65 74 42 79 74 65 28 73 74 6d 74 2c 20 69   GetByte(stmt, i
13a20 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
13a30 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
13a40 66 28 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e  f(Int16)) return
13a50 20 47 65 74 49 6e 74 31 36 28 73 74 6d 74 2c 20   GetInt16(stmt, 
13a60 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
13a70 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
13a80 6f 66 28 55 49 6e 74 31 36 29 29 20 72 65 74 75  of(UInt16)) retu
13a90 72 6e 20 47 65 74 55 49 6e 74 31 36 28 73 74 6d  rn GetUInt16(stm
13aa0 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
13ab0 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
13ac0 79 70 65 6f 66 28 49 6e 74 33 32 29 29 20 72 65  ypeof(Int32)) re
13ad0 74 75 72 6e 20 47 65 74 49 6e 74 33 32 28 73 74  turn GetInt32(st
13ae0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
13af0 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
13b00 74 79 70 65 6f 66 28 55 49 6e 74 33 32 29 29 20  typeof(UInt32)) 
13b10 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 33 32  return GetUInt32
13b20 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
13b30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
13b40 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 36 34  == typeof(UInt64
13b50 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e  )) return GetUIn
13b60 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
13b70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ;..          ret
13b80 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e  urn Convert.Chan
13b90 67 65 54 79 70 65 28 47 65 74 49 6e 74 36 34 28  geType(GetInt64(
13ba0 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c  stmt, index), t,
13bb0 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
13bc0 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
13bd0 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 54       return GetT
13be0 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ext(stmt, index)
13bf0 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
13c00 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
13c10 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47  l override int G
13c20 65 74 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65  etCursorForTable
13c30 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
13c40 20 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69   stmt, int db, i
13c50 6e 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20  nt rootPage)..  
13c60 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
13c70 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
13c80 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
13c90 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13ca0 74 65 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72  te3_table_cursor
13cb0 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
13cc0 71 6c 69 74 65 5f 73 74 6d 74 2c 20 64 62 2c 20  qlite_stmt, db, 
13cd0 72 6f 6f 74 50 61 67 65 29 3b 0d 0a 23 65 6c 73  rootPage);..#els
13ce0 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
13cf0 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  -1;..#endif..   
13d00 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
13d10 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
13d20 20 47 65 74 52 6f 77 49 64 46 6f 72 43 75 72 73   GetRowIdForCurs
13d30 6f 72 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  or(SQLiteStateme
13d40 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 63 75 72  nt stmt, int cur
13d50 73 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  sor)..    {..#if
13d60 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
13d70 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f  D..      long ro
13d80 77 69 64 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  wid;..      SQLi
13d90 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
13da0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13db0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 75 72  hods.sqlite3_cur
13dc0 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f  sor_rowid_intero
13dd0 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
13de0 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20 6f 75 74  tmt, cursor, out
13df0 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20 20   rowid);..      
13e00 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  if (rc == SQLite
13e10 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 72 65  ErrorCode.Ok) re
13e20 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20  turn rowid;.... 
13e30 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
13e40 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
13e50 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a  urn 0;..#endif..
13e60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
13e70 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
13e80 6f 69 64 20 47 65 74 49 6e 64 65 78 43 6f 6c 75  oid GetIndexColu
13e90 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f 28 73  mnExtendedInfo(s
13ea0 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 2c 20  tring database, 
13eb0 73 74 72 69 6e 67 20 69 6e 64 65 78 2c 20 73 74  string index, st
13ec0 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74  ring column, out
13ed0 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f   int sortMode, o
13ee0 75 74 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c 20  ut int onError, 
13ef0 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61  out string colla
13f00 74 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a 20  tionSequence).. 
13f10 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
13f20 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
13f30 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 3b 0d 0a    IntPtr coll;..
13f40 20 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65        int collle
13f50 6e 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  n;..      SQLite
13f60 45 72 72 6f 72 43 6f 64 65 20 72 63 3b 0d 0a 0d  ErrorCode rc;...
13f70 0a 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61  .      rc = Unsa
13f80 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13f90 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f  sqlite3_index_co
13fa0 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f  lumn_info_intero
13fb0 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64  p(_sql, ToUTF8(d
13fc0 61 74 61 62 61 73 65 29 2c 20 54 6f 55 54 46 38  atabase), ToUTF8
13fd0 28 69 6e 64 65 78 29 2c 20 54 6f 55 54 46 38 28  (index), ToUTF8(
13fe0 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 73 6f 72  column), out sor
13ff0 74 4d 6f 64 65 2c 20 6f 75 74 20 6f 6e 45 72 72  tMode, out onErr
14000 6f 72 2c 20 6f 75 74 20 63 6f 6c 6c 2c 20 6f 75  or, out coll, ou
14010 74 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20  t colllen);..   
14020 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c     if (rc != SQL
14030 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
14040 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
14050 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 6e  eException(rc, n
14060 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 63  ull);....      c
14070 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
14080 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
14090 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d  coll, colllen);.
140a0 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 73 6f  .#else..      so
140b0 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20 20 20  rtMode = 0;..   
140c0 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20 32 3b 0d     onError = 2;.
140d0 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e  .      collation
140e0 53 65 71 75 65 6e 63 65 20 3d 20 22 42 49 4e 41  Sequence = "BINA
140f0 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  RY";..#endif..  
14100 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
14110 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
14120 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69 6c  iteErrorCode Fil
14130 65 43 6f 6e 74 72 6f 6c 28 73 74 72 69 6e 67 20  eControl(string 
14140 7a 44 62 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c  zDbName, int op,
14150 20 49 6e 74 50 74 72 20 70 41 72 67 29 0d 0a 20   IntPtr pArg).. 
14160 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
14170 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
14180 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66  ethods.sqlite3_f
14190 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c  ile_control(_sql
141a0 2c 20 28 7a 44 62 4e 61 6d 65 20 21 3d 20 6e 75  , (zDbName != nu
141b0 6c 6c 29 20 3f 20 54 6f 55 54 46 38 28 7a 44 62  ll) ? ToUTF8(zDb
141c0 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70  Name) : null, op
141d0 2c 20 70 41 72 67 29 3b 0d 0a 20 20 20 20 7d 0d  , pArg);..    }.
141e0 0a 20 20 7d 0d 0a 7d 0d 0a                       .  }..}..