System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 5aec51d984e6e893efa01db9c5fac6ce183de838:


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 37 2e 30  sion = "1.0.87.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 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  d SQLiteFunction
0b00: 5b 5d 20 5f 66 75 6e 63 74 69 6f 6e 73 41 72 72  [] _functionsArr
0b10: 61 79 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52  ay;....#if INTER
0b20: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
0b30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0b40: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
0b50: 20 6d 6f 64 75 6c 65 73 20 63 72 65 61 74 65 64   modules created
0b60: 20 75 73 69 6e 67 20 74 68 69 73 20 63 6f 6e 6e   using this conn
0b70: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
0b80: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0b90: 20 70 72 6f 74 65 63 74 65 64 20 44 69 63 74 69   protected Dicti
0ba0: 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51  onary<string, SQ
0bb0: 4c 69 74 65 4d 6f 64 75 6c 65 3e 20 5f 6d 6f 64  LiteModule> _mod
0bc0: 75 6c 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ules;..#endif...
0bd0: 0a 20 20 20 20 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 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
0c40: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0c50: 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 74 68  // Constructs th
0c60: 65 20 6f 62 6a 65 63 74 20 75 73 65 64 20 74 6f  e object used to
0c70: 20 69 6e 74 65 72 61 63 74 20 77 69 74 68 20 74   interact with t
0c80: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
0c90: 69 62 72 61 72 79 0d 0a 20 20 20 20 2f 2f 2f 20  ibrary..    /// 
0ca0: 75 73 69 6e 67 20 74 68 65 20 55 54 46 2d 38 20  using the UTF-8 
0cb0: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 0d 0a  text encoding...
0cc0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0cd0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
0ce0: 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e 0d 0a  am name="fmt">..
0cf0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 44 61 74 65      /// The Date
0d00: 54 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20 62  Time format to b
0d10: 65 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6e 76  e used when conv
0d20: 65 72 74 69 6e 67 20 73 74 72 69 6e 67 20 76 61  erting string va
0d30: 6c 75 65 73 20 74 6f 20 61 0d 0a 20 20 20 20 2f  lues to a..    /
0d40: 2f 2f 20 44 61 74 65 54 69 6d 65 20 61 6e 64 20  // DateTime and 
0d50: 62 69 6e 64 69 6e 67 20 44 61 74 65 54 69 6d 65  binding DateTime
0d60: 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20   parameters...  
0d70: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
0d80: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
0d90: 61 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20 20 20  ame="kind">..   
0da0: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
0db0: 65 66 3d 22 44 61 74 65 54 69 6d 65 4b 69 6e 64  ef="DateTimeKind
0dc0: 22 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64 20  " /> to be used 
0dd0: 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 44 61  when creating Da
0de0: 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20  teTime..    /// 
0df0: 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f  values...    ///
0e00: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
0e10: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0e20: 66 6d 74 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20  fmtString">..   
0e30: 20 2f 2f 2f 20 54 68 65 20 66 6f 72 6d 61 74 20   /// The format 
0e40: 73 74 72 69 6e 67 20 74 6f 20 62 65 20 75 73 65  string to be use
0e50: 64 20 77 68 65 6e 20 70 61 72 73 69 6e 67 20 61  d when parsing a
0e60: 6e 64 20 66 6f 72 6d 61 74 74 69 6e 67 20 44 61  nd formatting Da
0e70: 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20  teTime..    /// 
0e80: 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f  values...    ///
0e90: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
0ea0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0eb0: 64 62 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  db">..    /// Th
0ec0: 65 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20  e native handle 
0ed0: 74 6f 20 62 65 20 61 73 73 6f 63 69 61 74 65 64  to be associated
0ee0: 20 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61   with the databa
0ef0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  se connection...
0f00: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
0f10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0f20: 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22   name="fileName"
0f30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
0f40: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66  ully qualified f
0f50: 69 6c 65 20 6e 61 6d 65 20 61 73 73 6f 63 69 61  ile name associa
0f60: 74 65 64 20 77 69 74 68 20 3c 70 61 72 61 6d 72  ted with <paramr
0f70: 65 66 20 6e 61 6d 65 3d 22 64 62 20 22 2f 3e 2e  ef name="db "/>.
0f80: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
0f90: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
0fa0: 61 6d 20 6e 61 6d 65 3d 22 6f 77 6e 48 61 6e 64  am name="ownHand
0fb0: 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  le">..    /// No
0fc0: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 65  n-zero if the ne
0fd0: 77 6c 79 20 63 72 65 61 74 65 64 20 6f 62 6a 65  wly created obje
0fe0: 63 74 20 69 6e 73 74 61 6e 63 65 20 77 69 6c 6c  ct instance will
0ff0: 20 6e 65 65 64 20 74 6f 20 64 69 73 70 6f 73 65   need to dispose
1000: 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 3c 70 61  ..    /// of <pa
1010: 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 64 62 22  ramref name="db"
1020: 20 2f 3e 20 77 68 65 6e 20 69 74 20 69 73 20 6e   /> when it is n
1030: 6f 20 6c 6f 6e 67 65 72 20 6e 65 65 64 65 64 2e  o longer needed.
1040: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
1050: 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
1060: 20 53 51 4c 69 74 65 33 28 0d 0a 20 20 20 20 20   SQLite3(..     
1070: 20 20 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72     SQLiteDateFor
1080: 6d 61 74 73 20 66 6d 74 2c 0d 0a 20 20 20 20 20  mats fmt,..     
1090: 20 20 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20     DateTimeKind 
10a0: 6b 69 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 73  kind,..        s
10b0: 74 72 69 6e 67 20 66 6d 74 53 74 72 69 6e 67 2c  tring fmtString,
10c0: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
10d0: 20 64 62 2c 0d 0a 20 20 20 20 20 20 20 20 73 74   db,..        st
10e0: 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
10f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f 77 6e          bool own
1100: 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20  Handle..        
1110: 29 0d 0a 20 20 20 20 20 20 3a 20 62 61 73 65 28  )..      : base(
1120: 66 6d 74 2c 20 6b 69 6e 64 2c 20 66 6d 74 53 74  fmt, kind, fmtSt
1130: 72 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ring)..    {..  
1140: 20 20 20 20 20 20 69 66 20 28 64 62 20 21 3d 20        if (db != 
1150: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
1160: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1170: 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20       _sql = new 
1180: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1190: 48 61 6e 64 6c 65 28 64 62 2c 20 6f 77 6e 48 61  Handle(db, ownHa
11a0: 6e 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndle);..        
11b0: 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20      _fileName = 
11c0: 66 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  fileName;..     
11d0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
11e0: 20 20 20 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 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
1250: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50  n IDisposable "P
1260: 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d  attern" Members.
1270: 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f  .    private boo
1280: 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20  l disposed;..   
1290: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
12a0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a  eckDisposed() /*
12b0: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b   throw */..    {
12c0: 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44  ..#if THROW_ON_D
12d0: 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20  ISPOSED..       
12e0: 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a   if (disposed)..
12f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1300: 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70  w new ObjectDisp
1310: 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74 79  osedException(ty
1320: 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2e 4e 61  peof(SQLite3).Na
1330: 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  me);..#endif..  
1340: 20 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 0d 0a 0d 0a 20 20  //////////....  
13b0: 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72    protected over
13c0: 72 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73  ride void Dispos
13d0: 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67  e(bool disposing
13e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
13f0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
1400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1410: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
1420: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1430: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69               //i
1440: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
1450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1460: 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  /{..            
1470: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f      //    //////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b0: 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65  //    // dispose
14c0: 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
14d0: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
14e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
14f0: 20 20 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 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
1520: 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20          //}.... 
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1570: 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73         // releas
1580: 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f  e unmanaged reso
1590: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54  /////....#if INT
15e0: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
15f0: 4c 45 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  LE..            
1600: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1610: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1620: 20 49 66 20 61 6e 79 20 6d 6f 64 75 6c 65 73 20   If any modules 
1630: 77 65 72 65 20 63 72 65 61 74 65 64 2c 20 61 74  were created, at
1640: 74 65 6d 70 74 20 74 6f 20 64 69 73 70 6f 73 65  tempt to dispose
1650: 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20   of..           
1660: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
1670: 65 6d 20 6e 6f 77 2e 20 20 54 68 69 73 20 63 6f  em now.  This co
1680: 64 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74  de is designed t
1690: 6f 20 61 76 6f 69 64 20 74 68 72 6f 77 69 6e 67  o avoid throwing
16a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16b0: 20 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70    //       excep
16c0: 74 69 6f 6e 73 20 75 6e 6c 65 73 73 20 74 68 65  tions unless the
16d0: 20 44 69 73 70 6f 73 65 20 6d 65 74 68 6f 64 20   Dispose method 
16e0: 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 0d 0a 20  of the module.. 
16f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1700: 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 74  /       itself t
1710: 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74 69  hrows an excepti
1720: 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on...           
1730: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1740: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f           if (_mo
1750: 64 75 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a  dules != null)..
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1770: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1780: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
1790: 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74 72  KeyValuePair<str
17a0: 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c  ing, SQLiteModul
17b0: 65 3e 20 70 61 69 72 20 69 6e 20 5f 6d 6f 64 75  e> pair in _modu
17c0: 6c 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  les)..          
17d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f0: 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
1800: 65 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69 72 2e  e module = pair.
1810: 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  Value;....      
1820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1830: 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
1840: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1860: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1880: 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44          module.D
1890: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18c0: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
18e0: 6c 6f 73 65 28 66 61 6c 73 65 29 3b 20 2f 2a 20  lose(false); /* 
18f0: 44 69 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e 6f  Disposing, canno
1900: 74 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a 0d 0a 20  t throw. */.... 
1910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1920: 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d  isposed = true;.
1930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1940: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1950: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
1960: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1970: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
1980: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 20 20 20  disposing);..   
1990: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
19a0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
19b0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
19c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a10: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49  ////....    // I
1a20: 74 20 69 73 6e 27 74 20 6e 65 63 65 73 73 61 72  t isn't necessar
1a30: 79 20 74 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79  y to cleanup any
1a40: 20 66 75 6e 63 74 69 6f 6e 73 20 77 65 27 76 65   functions we've
1a50: 20 72 65 67 69 73 74 65 72 65 64 2e 20 20 49 66   registered.  If
1a60: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d   the connection.
1a70: 0a 20 20 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20  .    // goes to 
1a80: 74 68 65 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20  the pool and is 
1a90: 72 65 73 75 72 72 65 63 74 65 64 20 6c 61 74 65  resurrected late
1aa0: 72 2c 20 72 65 2d 72 65 67 69 73 74 65 72 65 64  r, re-registered
1ab0: 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20   functions will 
1ac0: 6f 76 65 72 77 72 69 74 65 20 74 68 65 0d 0a 20  overwrite the.. 
1ad0: 20 20 20 2f 2f 20 70 72 65 76 69 6f 75 73 20 66     // previous f
1ae0: 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 53  unctions.  The S
1af0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f  QLiteFunctionCoo
1b00: 6b 69 65 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74  kieHandle will t
1b10: 61 6b 65 20 63 61 72 65 20 6f 66 20 66 72 65 65  ake care of free
1b20: 69 6e 67 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20  ing unmanaged.. 
1b30: 20 20 20 2f 2f 20 72 65 73 6f 75 72 63 65 73 20     // resources 
1b40: 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65  belonging to the
1b50: 20 70 72 65 76 69 6f 75 73 6c 79 2d 72 65 67 69   previously-regi
1b60: 73 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73  stered functions
1b70: 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1b80: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c  override void Cl
1b90: 6f 73 65 28 62 6f 6f 6c 20 63 61 6e 54 68 72 6f  ose(bool canThro
1ba0: 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  w)..    {..     
1bb0: 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c   if (_sql != nul
1bc0: 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
1bd0: 20 20 20 20 20 20 20 69 66 20 28 21 5f 73 71 6c         if (!_sql
1be0: 2e 4f 77 6e 48 61 6e 64 6c 65 29 0d 0a 20 20 20  .OwnHandle)..   
1bf0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c00: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
1c10: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
1c20: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20      return;..   
1c30: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1c40: 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f        if (_usePo
1c50: 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ol)..          {
1c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c70: 69 66 20 28 53 51 4c 69 74 65 42 61 73 65 2e 52  if (SQLiteBase.R
1c80: 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f  esetConnection(_
1c90: 73 71 6c 2c 20 5f 73 71 6c 2c 20 63 61 6e 54 68  sql, _sql, canTh
1ca0: 72 6f 77 29 29 0d 0a 20 20 20 20 20 20 20 20 20  row))..         
1cb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1cc0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1cd0: 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41  ConnectionPool.A
1ce0: 64 64 28 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 73  dd(_fileName, _s
1cf0: 71 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e  ql, _poolVersion
1d00: 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  );....#if !NET_C
1d10: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
1d20: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d40: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
1d50: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
1d60: 43 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 53 75 63  Close (Pool) Suc
1d70: 63 65 73 73 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c  cess: {0}", _sql
1d80: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
1d90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69             }..#i
1da0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
1db0: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
1dc0: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
1dd0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
1de0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1e00: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74  ace.WriteLine(St
1e10: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43 6c 6f  ring.Format("Clo
1e20: 73 65 20 28 50 6f 6f 6c 29 20 46 61 69 6c 75 72  se (Pool) Failur
1e30: 65 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29 29 3b  e: {0}", _sql));
1e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e50: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
1e60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1e70: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1e80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e90: 20 20 20 5f 73 71 6c 2e 44 69 73 70 6f 73 65 28     _sql.Dispose(
1ea0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
1eb0: 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20  .          _sql 
1ec0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d  = null;..      }
1ed0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1f40: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1f50: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 61 6e  verride void Can
1f60: 63 65 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  cel()..    {..  
1f70: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
1f80: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
1f90: 69 6e 74 65 72 72 75 70 74 28 5f 73 71 6c 29 3b  interrupt(_sql);
1fa0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1fb0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1fc0: 20 73 74 72 69 6e 67 20 56 65 72 73 69 6f 6e 0d   string Version.
1fd0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
1fe0: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
1ff0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
2000: 65 33 2e 53 51 4c 69 74 65 56 65 72 73 69 6f 6e  e3.SQLiteVersion
2010: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
2020: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
2030: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56  l override int V
2040: 65 72 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20  ersionNumber..  
2050: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
2060: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2070: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 33 2e   return SQLite3.
2080: 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d  SQLiteVersionNum
2090: 62 65 72 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ber;..      }.. 
20a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
20b0: 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69  rnal static stri
20c0: 6e 67 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e  ng DefineConstan
20d0: 74 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ts..    {..     
20e0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
20f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
2100: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73  tringBuilder res
2110: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
2120: 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20  Builder();..    
2130: 20 20 20 20 20 20 20 20 49 4c 69 73 74 3c 73 74          IList<st
2140: 72 69 6e 67 3e 20 6c 69 73 74 20 3d 20 53 51 4c  ring> list = SQL
2150: 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e  iteDefineConstan
2160: 74 73 2e 4f 70 74 69 6f 6e 4c 69 73 74 3b 0d 0a  ts.OptionList;..
2170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2180: 20 28 6c 69 73 74 20 21 3d 20 6e 75 6c 6c 29 0d   (list != null).
2190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
21a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b0: 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67 20  foreach (string 
21c0: 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 73 74 29  element in list)
21d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6c 65           if (ele
2200: 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ment == null).. 
2210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2220: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
2230: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2240: 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
2250: 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  lt.Length > 0)..
2260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2270: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
2280: 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a 20  ppend(' ');.... 
2290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a0: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
22b0: 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20  (element);..    
22c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
22d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
22e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
22f0: 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69  rn result.ToStri
2300: 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ng();..        }
2310: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
2320: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73  nternal static s
2330: 74 72 69 6e 67 20 53 51 4c 69 74 65 56 65 72 73  tring SQLiteVers
2340: 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ion..    {..    
2350: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
2360: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
2370: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
2380: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2390: 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
23a0: 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a 20 20 20 20  on(), -1);..    
23b0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
23c0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
23d0: 63 20 69 6e 74 20 53 51 4c 69 74 65 56 65 72 73  c int SQLiteVers
23e0: 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20 7b  ionNumber..    {
23f0: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
2400: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
2410: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
2420: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
2430: 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62  _libversion_numb
2440: 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  er();..      }..
2450: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
2460: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72  ernal static str
2470: 69 6e 67 20 53 51 4c 69 74 65 53 6f 75 72 63 65  ing SQLiteSource
2480: 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  Id..    {..     
2490: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
24a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54         return UT
24b0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
24c0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
24d0: 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28  qlite3_sourceid(
24e0: 29 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d  ), -1);..      }
24f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
2500: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
2510: 20 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69 74   bool AutoCommit
2520: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
2530: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
2540: 20 20 20 20 20 72 65 74 75 72 6e 20 49 73 41 75       return IsAu
2550: 74 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c 20 5f  tocommit(_sql, _
2560: 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  sql);..      }..
2570: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
2580: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
2590: 6f 6e 67 20 4c 61 73 74 49 6e 73 65 72 74 52 6f  ong LastInsertRo
25a0: 77 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  wId..    {..    
25b0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
25c0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
25d0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
25e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
25f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2600: 64 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  ds.sqlite3_last_
2610: 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 5f 73 71  insert_rowid(_sq
2620: 6c 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  l);..#elif !SQLI
2630: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
2640: 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 49 64 20       long rowId 
2650: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e  = 0;..        Un
2660: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
2670: 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  s.sqlite3_last_i
2680: 6e 73 65 72 74 5f 72 6f 77 69 64 5f 69 6e 74 65  nsert_rowid_inte
2690: 72 6f 70 28 5f 73 71 6c 2c 20 72 65 66 20 72 6f  rop(_sql, ref ro
26a0: 77 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  wId);..        r
26b0: 65 74 75 72 6e 20 72 6f 77 49 64 3b 0d 0a 23 65  eturn rowId;..#e
26c0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72  lse..        thr
26d0: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
26e0: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
26f0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
2700: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
2710: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
2720: 64 65 20 69 6e 74 20 43 68 61 6e 67 65 73 0d 0a  de int Changes..
2730: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
2740: 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21  ..      {..#if !
2750: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
2760: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
2770: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2780: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e  ods.sqlite3_chan
2790: 67 65 73 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  ges_interop(_sql
27a0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
27b0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
27c0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
27d0: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 5f 73  lite3_changes(_s
27e0: 71 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ql);..#endif..  
27f0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
2800: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
2810: 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72  rride long Memor
2820: 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20  yUsed..    {..  
2830: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
2840: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
2850: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
2860: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2870: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2880: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d  hods.sqlite3_mem
2890: 6f 72 79 5f 75 73 65 64 28 29 3b 0d 0a 23 65 6c  ory_used();..#el
28a0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
28b0: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6e  ARD..        lon
28c0: 67 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20  g bytes = 0;..  
28d0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
28e0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
28f0: 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 5f 69 6e  3_memory_used_in
2900: 74 65 72 6f 70 28 72 65 66 20 62 79 74 65 73 29  terop(ref bytes)
2910: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
2920: 6e 20 62 79 74 65 73 3b 0d 0a 23 65 6c 73 65 0d  n bytes;..#else.
2930: 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e  .        throw n
2940: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
2950: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
2960: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a  endif..      }..
2970: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
2980: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
2990: 6f 6e 67 20 4d 65 6d 6f 72 79 48 69 67 68 77 61  ong MemoryHighwa
29a0: 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ter..    {..    
29b0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
29c0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
29d0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
29e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
29f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2a00: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  ds.sqlite3_memor
2a10: 79 5f 68 69 67 68 77 61 74 65 72 28 30 29 3b 0d  y_highwater(0);.
2a20: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
2a30: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
2a40: 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20 30 3b   long bytes = 0;
2a50: 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65  ..        Unsafe
2a60: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
2a70: 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67  lite3_memory_hig
2a80: 68 77 61 74 65 72 5f 69 6e 74 65 72 6f 70 28 30  hwater_interop(0
2a90: 2c 20 72 65 66 20 62 79 74 65 73 29 3b 0d 0a 20  , ref bytes);.. 
2aa0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79         return by
2ab0: 74 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  tes;..#else..   
2ac0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
2ad0: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
2ae0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
2af0: 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  f..      }..    
2b00: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
2b10: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
2b20: 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  Returns non-zero
2b30: 20 69 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69   if the underlyi
2b40: 6e 67 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63  ng native connec
2b50: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f  tion handle is o
2b60: 77 6e 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 79  wned..    /// by
2b70: 20 74 68 69 73 20 69 6e 73 74 61 6e 63 65 2e 0d   this instance..
2b80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
2b90: 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
2ba0: 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
2bb0: 4f 77 6e 48 61 6e 64 6c 65 0d 0a 20 20 20 20 7b  OwnHandle..    {
2bc0: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20  ..        get.. 
2bd0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2be0: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
2bf0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2c00: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
2c10: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
2c20: 6f 6e 28 22 6e 6f 20 63 6f 6e 6e 65 63 74 69 6f  on("no connectio
2c30: 6e 20 68 61 6e 64 6c 65 20 61 76 61 69 6c 61 62  n handle availab
2c40: 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  le");....       
2c50: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 73 71 6c       return _sql
2c60: 2e 4f 77 6e 48 61 6e 64 6c 65 3b 0d 0a 20 20 20  .OwnHandle;..   
2c70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2c80: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
2c90: 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
2ca0: 6f 72 43 6f 64 65 20 53 65 74 4d 65 6d 6f 72 79  orCode SetMemory
2cb0: 53 74 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75  Status(bool valu
2cc0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
2cd0: 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63     return Static
2ce0: 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28  SetMemoryStatus(
2cf0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  value);..    }..
2d00: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
2d10: 74 61 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f  tatic SQLiteErro
2d20: 72 43 6f 64 65 20 53 74 61 74 69 63 53 65 74 4d  rCode StaticSetM
2d30: 65 6d 6f 72 79 53 74 61 74 75 73 28 62 6f 6f 6c  emoryStatus(bool
2d40: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
2d50: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
2d60: 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
2d70: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2d80: 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f  .sqlite3_config_
2d90: 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  int(..          
2da0: 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70    SQLiteConfigOp
2db0: 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e  sEnum.SQLITE_CON
2dc0: 46 49 47 5f 4d 45 4d 53 54 41 54 55 53 2c 20 76  FIG_MEMSTATUS, v
2dd0: 61 6c 75 65 20 3f 20 31 20 3a 20 30 29 3b 0d 0a  alue ? 1 : 0);..
2de0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2df0: 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   rc;..    }.... 
2e00: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2e10: 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f  ..    /// Shutdo
2e20: 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e  wn the SQLite en
2e30: 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20  gine so that it 
2e40: 63 61 6e 20 62 65 20 72 65 73 74 61 72 74 65 64  can be restarted
2e50: 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 20   with different 
2e60: 63 6f 6e 66 69 67 20 6f 70 74 69 6f 6e 73 2e 0d  config options..
2e70: 0a 20 20 20 20 2f 2f 2f 20 57 65 20 64 65 70 65  .    /// We depe
2e80: 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69  nd on auto initi
2e90: 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63  alization to rec
2ea0: 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  over...    /// <
2eb0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
2ec0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
2ed0: 72 6e 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64  rns a result cod
2ee0: 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  e</returns>..   
2ef0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
2f00: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
2f10: 64 65 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a 20  de Shutdown().. 
2f20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
2f30: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
2f40: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
2f50: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73  ethods.sqlite3_s
2f60: 68 75 74 64 6f 77 6e 28 29 3b 0d 0a 20 20 20 20  hutdown();..    
2f70: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a      return rc;..
2f80: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
2f90: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
2fa0: 6f 6f 6c 20 49 73 4f 70 65 6e 28 29 0d 0a 20 20  ool IsOpen()..  
2fb0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
2fc0: 75 72 6e 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c  urn (_sql != nul
2fd0: 6c 29 20 26 26 20 21 5f 73 71 6c 2e 49 73 49 6e  l) && !_sql.IsIn
2fe0: 76 61 6c 69 64 20 26 26 20 21 5f 73 71 6c 2e 49  valid && !_sql.I
2ff0: 73 43 6c 6f 73 65 64 3b 0d 0a 20 20 20 20 7d 0d  sClosed;..    }.
3000: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
3010: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4f 70  override void Op
3020: 65 6e 28 73 74 72 69 6e 67 20 73 74 72 46 69 6c  en(string strFil
3030: 65 6e 61 6d 65 2c 20 53 51 4c 69 74 65 43 6f 6e  ename, SQLiteCon
3040: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e  nectionFlags con
3050: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51  nectionFlags, SQ
3060: 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75  LiteOpenFlagsEnu
3070: 6d 20 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74  m openFlags, int
3080: 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f   maxPoolSize, bo
3090: 6f 6c 20 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20  ol usePool)..   
30a0: 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20   {..      //..  
30b0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
30c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
30d0: 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
30e0: 6e 74 6c 79 20 6f 70 65 6e 2c 20 61 74 74 65 6d  ntly open, attem
30f0: 70 74 20 74 6f 0d 0a 20 20 20 20 20 20 2f 2f 20  pt to..      // 
3100: 20 20 20 20 20 20 63 6c 6f 73 65 20 69 74 20 6e        close it n
3110: 6f 77 2e 20 20 54 68 69 73 20 6d 75 73 74 20 62  ow.  This must b
3120: 65 20 64 6f 6e 65 20 62 65 63 61 75 73 65 20 74  e done because t
3130: 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72 0d  he file name or.
3140: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
3150: 6f 74 68 65 72 20 70 61 72 61 6d 65 74 65 72 73  other parameters
3160: 20 74 68 61 74 20 6d 61 79 20 69 6d 70 61 63 74   that may impact
3170: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
3180: 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20  database..      
3190: 2f 2f 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74  //       connect
31a0: 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63 68 61  ion may have cha
31b0: 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d  nged...      //.
31c0: 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20  .      if (_sql 
31d0: 21 3d 20 6e 75 6c 6c 29 20 43 6c 6f 73 65 28 74  != null) Close(t
31e0: 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  rue);....      /
31f0: 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  /..      // NOTE
3200: 3a 20 49 66 20 74 68 65 20 63 6f 6e 6e 65 63 74  : If the connect
3210: 69 6f 6e 20 77 61 73 20 6e 6f 74 20 63 6c 6f 73  ion was not clos
3220: 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c 79 2c  ed successfully,
3230: 20 74 68 72 6f 77 20 61 6e 0d 0a 20 20 20 20 20   throw an..     
3240: 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70 74   //       except
3250: 69 6f 6e 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ion now...      
3260: 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73  //..      if (_s
3270: 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql != null)..   
3280: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
3290: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
32a0: 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  ("connection han
32b0: 64 6c 65 20 69 73 20 73 74 69 6c 6c 20 61 63 74  dle is still act
32c0: 69 76 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ive");....      
32d0: 5f 75 73 65 50 6f 6f 6c 20 3d 20 75 73 65 50 6f  _usePool = usePo
32e0: 6f 6c 3b 0d 0a 20 20 20 20 20 20 5f 66 69 6c 65  ol;..      _file
32f0: 4e 61 6d 65 20 3d 20 73 74 72 46 69 6c 65 6e 61  Name = strFilena
3300: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  me;....      if 
3310: 28 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20  (usePool)..     
3320: 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c   {..        _sql
3330: 20 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   = SQLiteConnect
3340: 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28 73  ionPool.Remove(s
3350: 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61 78 50  trFilename, maxP
3360: 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f 70 6f  oolSize, out _po
3370: 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 23  olVersion);....#
3380: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
3390: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
33a0: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
33b0: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
33c0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 4f  String.Format("O
33d0: 70 65 6e 20 28 50 6f 6f 6c 29 3a 20 7b 30 7d 22  pen (Pool): {0}"
33e0: 2c 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  , (_sql != null)
33f0: 20 3f 20 5f 73 71 6c 2e 54 6f 53 74 72 69 6e 67   ? _sql.ToString
3400: 28 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b  () : "<null>"));
3410: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
3420: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  }....      if (_
3430: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
3440: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
3450: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
3460: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
3470: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
3480: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
3490: 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54  nally /* NOTE: T
34a0: 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72  hread.Abort() pr
34b0: 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20  otection. */..  
34c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
34d0: 20 20 20 49 6e 74 50 74 72 20 64 62 3b 0d 0a 20     IntPtr db;.. 
34e0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
34f0: 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23  rrorCode n;....#
3500: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
3510: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ARD..          i
3520: 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  f ((connectionFl
3530: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
3540: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78  ectionFlags.NoEx
3550: 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73  tensionFunctions
3560: 29 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) != SQLiteConne
3570: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78 74  ctionFlags.NoExt
3580: 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 29  ensionFunctions)
3590: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
35a0: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
35b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
35c0: 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  ds.sqlite3_open_
35d0: 69 6e 74 65 72 6f 70 28 54 6f 55 54 46 38 28 73  interop(ToUTF8(s
35e0: 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 6f 70 65  trFilename), ope
35f0: 6e 46 6c 61 67 73 2c 20 6f 75 74 20 64 62 29 3b  nFlags, out db);
3600: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
3610: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23           else..#
3620: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
3630: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3640: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
3650: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3660: 6f 70 65 6e 5f 76 32 28 54 6f 55 54 46 38 28 73  open_v2(ToUTF8(s
3670: 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 6f 75 74  trFilename), out
3680: 20 64 62 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20   db, openFlags, 
3690: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20  IntPtr.Zero);.. 
36a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69           }....#i
36b0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
36c0: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
36d0: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
36e0: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
36f0: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
3700: 4f 70 65 6e 3a 20 7b 30 7d 22 2c 20 64 62 29 29  Open: {0}", db))
3710: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
3720: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
3730: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
3740: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
3750: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
3760: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
3770: 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53 51     _sql = new SQ
3780: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
3790: 6e 64 6c 65 28 64 62 2c 20 74 72 75 65 29 3b 0d  ndle(db, true);.
37a0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
37b0: 20 20 20 20 6c 6f 63 6b 20 28 5f 73 71 6c 29 20      lock (_sql) 
37c0: 7b 20 2f 2a 20 48 41 43 4b 3a 20 46 6f 72 63 65  { /* HACK: Force
37d0: 20 74 68 65 20 53 79 6e 63 42 6c 6f 63 6b 20 74   the SyncBlock t
37e0: 6f 20 62 65 20 22 63 72 65 61 74 65 64 22 20 6e  o be "created" n
37f0: 6f 77 2e 20 2a 2f 20 7d 0d 0a 20 20 20 20 20 20  ow. */ }..      
3800: 7d 0d 0a 20 20 20 20 20 20 2f 2f 20 42 69 6e 64  }..      // Bind
3810: 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 20 74 68   functions to th
3820: 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  is connection.  
3830: 49 66 20 61 6e 79 20 70 72 65 76 69 6f 75 73 20  If any previous 
3840: 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20 74 68 65  functions of the
3850: 20 73 61 6d 65 20 6e 61 6d 65 0d 0a 20 20 20 20   same name..    
3860: 20 20 2f 2f 20 77 65 72 65 20 61 6c 72 65 61 64    // were alread
3870: 79 20 62 6f 75 6e 64 2c 20 74 68 65 6e 20 74 68  y bound, then th
3880: 65 20 6e 65 77 20 62 69 6e 64 69 6e 67 73 20 72  e new bindings r
3890: 65 70 6c 61 63 65 20 74 68 65 20 6f 6c 64 2e 0d  eplace the old..
38a0: 0a 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e  .      _function
38b0: 73 41 72 72 61 79 20 3d 20 53 51 4c 69 74 65 46  sArray = SQLiteF
38c0: 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63  unction.BindFunc
38d0: 74 69 6f 6e 73 28 74 68 69 73 2c 20 63 6f 6e 6e  tions(this, conn
38e0: 65 63 74 69 6f 6e 46 6c 61 67 73 29 3b 0d 0a 20  ectionFlags);.. 
38f0: 20 20 20 20 20 53 65 74 54 69 6d 65 6f 75 74 28       SetTimeout(
3900: 30 29 3b 0d 0a 20 20 20 20 20 20 47 43 2e 4b 65  0);..      GC.Ke
3910: 65 70 41 6c 69 76 65 28 5f 73 71 6c 29 3b 0d 0a  epAlive(_sql);..
3920: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
3930: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
3940: 6f 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28 29 0d  oid ClearPool().
3950: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
3960: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f  LiteConnectionPo
3970: 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f 66 69  ol.ClearPool(_fi
3980: 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d  leName);..    }.
3990: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
39a0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 75  override int Cou
39b0: 6e 74 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d  ntPool()..    {.
39c0: 0a 20 20 20 20 20 20 20 20 44 69 63 74 69 6f 6e  .        Diction
39d0: 61 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e  ary<string, int>
39e0: 20 63 6f 75 6e 74 73 20 3d 20 6e 75 6c 6c 3b 0d   counts = null;.
39f0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6f 70 65  .        int ope
3a00: 6e 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20  nCount = 0;..   
3a10: 20 20 20 20 20 69 6e 74 20 63 6c 6f 73 65 43 6f       int closeCo
3a20: 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  unt = 0;..      
3a30: 20 20 69 6e 74 20 74 6f 74 61 6c 43 6f 75 6e 74    int totalCount
3a40: 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   = 0;....       
3a50: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
3a60: 6e 50 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74 73 28  nPool.GetCounts(
3a70: 5f 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  _fileName,..    
3a80: 20 20 20 20 20 20 20 20 72 65 66 20 63 6f 75 6e          ref coun
3a90: 74 73 2c 20 72 65 66 20 6f 70 65 6e 43 6f 75 6e  ts, ref openCoun
3aa0: 74 2c 20 72 65 66 20 63 6c 6f 73 65 43 6f 75 6e  t, ref closeCoun
3ab0: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
3ac0: 72 65 66 20 74 6f 74 61 6c 43 6f 75 6e 74 29 3b  ref totalCount);
3ad0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
3ae0: 72 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 3b 0d 0a  rn totalCount;..
3af0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
3b00: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
3b10: 6f 69 64 20 53 65 74 54 69 6d 65 6f 75 74 28 69  oid SetTimeout(i
3b20: 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29 0d 0a  nt nTimeoutMS)..
3b30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
3b40: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
3b50: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
3b60: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 75 73  hods.sqlite3_bus
3b70: 79 5f 74 69 6d 65 6f 75 74 28 5f 73 71 6c 2c 20  y_timeout(_sql, 
3b80: 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20 20  nTimeoutMS);..  
3b90: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
3ba0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
3bb0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
3bc0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
3bd0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
3be0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
3bf0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
3c00: 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69 74 65 53  ool Step(SQLiteS
3c10: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a  tatement stmt)..
3c20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
3c30: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d  iteErrorCode n;.
3c40: 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e  .      Random rn
3c50: 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  d = null;..     
3c60: 20 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20   uint starttick 
3c70: 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d  = (uint)Environm
3c80: 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a  ent.TickCount;..
3c90: 20 20 20 20 20 20 75 69 6e 74 20 74 69 6d 65 6f        uint timeo
3ca0: 75 74 20 3d 20 28 75 69 6e 74 29 28 73 74 6d 74  ut = (uint)(stmt
3cb0: 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61  ._command._comma
3cc0: 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30  ndTimeout * 1000
3cd0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c  );....      whil
3ce0: 65 20 28 74 72 75 65 29 0d 0a 20 20 20 20 20 20  e (true)..      
3cf0: 7b 0d 0a 20 20 20 20 20 20 20 20 6e 20 3d 20 55  {..        n = U
3d00: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
3d10: 64 73 2e 73 71 6c 69 74 65 33 5f 73 74 65 70 28  ds.sqlite3_step(
3d20: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
3d30: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  t);....        i
3d40: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
3d50: 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 72 65 74  rorCode.Row) ret
3d60: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
3d70: 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
3d80: 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65  teErrorCode.Done
3d90: 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d  ) return false;.
3da0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
3db0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
3dc0: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
3dd0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51   {..          SQ
3de0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 3b  LiteErrorCode r;
3df0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  ....          //
3e00: 20 41 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72   An error occurr
3e10: 65 64 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 72  ed, attempt to r
3e20: 65 73 65 74 20 74 68 65 20 73 74 61 74 65 6d 65  eset the stateme
3e30: 6e 74 2e 20 20 49 66 20 74 68 65 20 72 65 73 65  nt.  If the rese
3e40: 74 20 77 6f 72 6b 65 64 20 62 65 63 61 75 73 65  t worked because
3e50: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
3e60: 2f 2f 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  // schema has ch
3e70: 61 6e 67 65 64 2c 20 72 65 2d 74 72 79 20 74 68  anged, re-try th
3e80: 65 20 73 74 65 70 20 61 67 61 69 6e 2e 20 20 49  e step again.  I
3e90: 66 20 69 74 20 65 72 72 6f 72 65 64 20 6f 75 72  f it errored our
3ea0: 20 62 65 63 61 75 73 65 20 74 68 65 20 64 61 74   because the dat
3eb0: 61 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20  abase..         
3ec0: 20 2f 2f 20 69 73 20 6c 6f 63 6b 65 64 2c 20 74   // is locked, t
3ed0: 68 65 6e 20 6b 65 65 70 20 72 65 74 72 79 69 6e  hen keep retryin
3ee0: 67 20 75 6e 74 69 6c 20 74 68 65 20 63 6f 6d 6d  g until the comm
3ef0: 61 6e 64 20 74 69 6d 65 6f 75 74 20 6f 63 63 75  and timeout occu
3f00: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 72  rs...          r
3f10: 20 3d 20 52 65 73 65 74 28 73 74 6d 74 29 3b 0d   = Reset(stmt);.
3f20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
3f30: 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (r == SQLiteErro
3f40: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
3f50: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
3f60: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
3f70: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
3f80: 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ());....        
3f90: 20 20 65 6c 73 65 20 69 66 20 28 28 72 20 3d 3d    else if ((r ==
3fa0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
3fb0: 2e 4c 6f 63 6b 65 64 20 7c 7c 20 72 20 3d 3d 20  .Locked || r == 
3fc0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
3fd0: 42 75 73 79 29 20 26 26 20 73 74 6d 74 2e 5f 63  Busy) && stmt._c
3fe0: 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d  ommand != null).
3ff0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
4000: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65            // Kee
4010: 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20  p trying..      
4020: 20 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d        if (rnd ==
4030: 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20   null) // First 
4040: 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75  time we've encou
4050: 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d  ntered the lock.
4060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
4070: 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28  nd = new Random(
4080: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4090: 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78    // If we've ex
40a0: 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61  ceeded the comma
40b0: 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69  nd's timeout, gi
40c0: 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20  ve up and throw 
40d0: 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  an error..      
40e0: 20 20 20 20 20 20 69 66 20 28 28 75 69 6e 74 29        if ((uint)
40f0: 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b  Environment.Tick
4100: 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63  Count - starttic
4110: 6b 20 3e 20 74 69 6d 65 6f 75 74 29 0d 0a 20 20  k > timeout)..  
4120: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4130: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
4140: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
4150: 74 69 6f 6e 28 72 2c 20 47 65 74 4c 61 73 74 45  tion(r, GetLastE
4160: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
4170: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4180: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
4190: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
41a0: 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72          // Other
41b0: 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61  wise sleep for a
41c0: 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f   random amount o
41d0: 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30  f time up to 150
41e0: 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ms..            
41f0: 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69    System.Threadi
4200: 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28  ng.Thread.Sleep(
4210: 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29  rnd.Next(1, 150)
4220: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4230: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
4240: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4250: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
4260: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
4270: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
4280: 64 65 20 52 65 73 65 74 28 53 51 4c 69 74 65 53  de Reset(SQLiteS
4290: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a  tatement stmt)..
42a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
42b0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d  iteErrorCode n;.
42c0: 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
42d0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e  TANDARD..      n
42e0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
42f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
4300: 65 73 65 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d  eset_interop(stm
4310: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b  t._sqlite_stmt);
4320: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e  ..#else..      n
4330: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
4340: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
4350: 65 73 65 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  eset(stmt._sqlit
4360: 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66  e_stmt);..#endif
4370: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20  ....      // If 
4380: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
4390: 65 64 2c 20 74 72 79 20 61 6e 64 20 72 65 2d 70  ed, try and re-p
43a0: 72 65 70 61 72 65 20 69 74 0d 0a 20 20 20 20 20  repare it..     
43b0: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
43c0: 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61  ErrorCode.Schema
43d0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
43e0: 20 20 20 20 2f 2f 20 52 65 63 72 65 61 74 65 20      // Recreate 
43f0: 61 20 64 75 6d 6d 79 20 73 74 61 74 65 6d 65 6e  a dummy statemen
4400: 74 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  t..        strin
4410: 67 20 73 74 72 3b 0d 0a 20 20 20 20 20 20 20 20  g str;..        
4420: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 53 74 61  using (SQLiteSta
4430: 74 65 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72 65  tement tmp = Pre
4440: 70 61 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e  pare(null, stmt.
4450: 5f 73 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e  _sqlStatement, n
4460: 75 6c 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d 74  ull, (uint)(stmt
4470: 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61  ._command._comma
4480: 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30  ndTimeout * 1000
4490: 29 2c 20 6f 75 74 20 73 74 72 29 29 0d 0a 20 20  ), out str))..  
44a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
44b0: 20 20 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74     // Finalize t
44c0: 68 65 20 65 78 69 73 74 69 6e 67 20 73 74 61 74  he existing stat
44d0: 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  ement..         
44e0: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
44f0: 6d 74 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20  mt.Dispose();.. 
4500: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61 73           // Reas
4510: 73 69 67 6e 20 61 20 6e 65 77 20 73 74 61 74 65  sign a new state
4520: 6d 65 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f 20  ment pointer to 
4530: 74 68 65 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e  the old statemen
4540: 74 20 61 6e 64 20 63 6c 65 61 72 20 74 68 65 20  t and clear the 
4550: 74 65 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20  temporary one.. 
4560: 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73           stmt._s
4570: 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20 74 6d 70  qlite_stmt = tmp
4580: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
4590: 20 20 20 20 20 20 20 20 20 20 74 6d 70 2e 5f 73            tmp._s
45a0: 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20 6e 75 6c  qlite_stmt = nul
45b0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
45c0: 2f 2f 20 52 65 61 70 70 6c 79 20 70 61 72 61 6d  // Reapply param
45d0: 65 74 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  eters..         
45e0: 20 73 74 6d 74 2e 42 69 6e 64 50 61 72 61 6d 65   stmt.BindParame
45f0: 74 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20  ters();..       
4600: 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   }..        retu
4610: 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
4620: 64 65 2e 55 6e 6b 6e 6f 77 6e 3b 20 2f 2f 20 52  de.Unknown; // R
4630: 65 73 65 74 20 77 61 73 20 4f 4b 2c 20 77 69 74  eset was OK, wit
4640: 68 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 0d  h schema change.
4650: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
4660: 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
4670: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f  LiteErrorCode.Lo
4680: 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c  cked || n == SQL
4690: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73  iteErrorCode.Bus
46a0: 79 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  y)..        retu
46b0: 72 6e 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  rn n;....      i
46c0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
46d0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
46e0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
46f0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
4700: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
4710: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  );....      retu
4720: 72 6e 20 6e 3b 20 2f 2f 20 57 65 20 72 65 73 65  rn n; // We rese
4730: 74 20 4f 4b 2c 20 6e 6f 20 73 63 68 65 6d 61 20  t OK, no schema 
4740: 63 68 61 6e 67 65 73 0d 0a 20 20 20 20 7d 0d 0a  changes..    }..
4750: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
4760: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
4770: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 0d 0a 20  etLastError().. 
4780: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
4790: 72 6e 20 53 51 4c 69 74 65 42 61 73 65 2e 47 65  rn SQLiteBase.Ge
47a0: 74 4c 61 73 74 45 72 72 6f 72 28 5f 73 71 6c 2c  tLastError(_sql,
47b0: 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a   _sql);..    }..
47c0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
47d0: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 53 74  verride SQLiteSt
47e0: 61 74 65 6d 65 6e 74 20 50 72 65 70 61 72 65 28  atement Prepare(
47f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
4800: 20 63 6e 6e 2c 20 73 74 72 69 6e 67 20 73 74 72   cnn, string str
4810: 53 71 6c 2c 20 53 51 4c 69 74 65 53 74 61 74 65  Sql, SQLiteState
4820: 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 2c 20 75  ment previous, u
4830: 69 6e 74 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f  int timeoutMS, o
4840: 75 74 20 73 74 72 69 6e 67 20 73 74 72 52 65 6d  ut string strRem
4850: 61 69 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ain)..    {..   
4860: 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
4870: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72  sNullOrEmpty(str
4880: 53 71 6c 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  Sql))..      {..
4890: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
48a0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 51 4c      // NOTE: SQL
48b0: 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  ite does not sup
48c0: 70 6f 72 74 20 74 68 65 20 63 6f 6e 63 65 70 74  port the concept
48d0: 20 6f 66 20 73 65 70 61 72 61 74 65 20 73 63 68   of separate sch
48e0: 65 6d 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  emas..        //
48f0: 20 20 20 20 20 20 20 69 6e 20 6f 6e 65 20 64 61         in one da
4900: 74 61 62 61 73 65 3b 20 74 68 65 72 65 66 6f 72  tabase; therefor
4910: 65 2c 20 72 65 6d 6f 76 65 20 74 68 65 20 62 61  e, remove the ba
4920: 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 0d 0a  se schema name..
4930: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
4940: 20 75 73 65 64 20 74 6f 20 73 6d 6f 6f 74 68 20   used to smooth 
4950: 69 6e 74 65 67 72 61 74 69 6f 6e 20 77 69 74 68  integration with
4960: 20 74 68 65 20 62 61 73 65 20 2e 4e 45 54 20 46   the base .NET F
4970: 72 61 6d 65 77 6f 72 6b 0d 0a 20 20 20 20 20 20  ramework..      
4980: 20 20 2f 2f 20 20 20 20 20 20 20 64 61 74 61 20    //       data 
4990: 63 6c 61 73 73 65 73 2e 0d 0a 20 20 20 20 20 20  classes...      
49a0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 73 74    //..        st
49b0: 72 69 6e 67 20 62 61 73 65 53 63 68 65 6d 61 4e  ring baseSchemaN
49c0: 61 6d 65 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75  ame = (cnn != nu
49d0: 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 62 61 73 65 53  ll) ? cnn._baseS
49e0: 63 68 65 6d 61 4e 61 6d 65 20 3a 20 6e 75 6c 6c  chemaName : null
49f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
4a00: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
4a10: 72 45 6d 70 74 79 28 62 61 73 65 53 63 68 65 6d  rEmpty(baseSchem
4a20: 61 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  aName))..       
4a30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74   {..          st
4a40: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65  rSql = strSql.Re
4a50: 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  place(..        
4a60: 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
4a70: 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
4a80: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
4a90: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4aa0: 20 22 5b 7b 30 7d 5d 2e 22 2c 20 62 61 73 65 53   "[{0}].", baseS
4ab0: 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69  chemaName), Stri
4ac0: 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20  ng.Empty);....  
4ad0: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
4ae0: 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28   strSql.Replace(
4af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4b00: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75  String.Format(Cu
4b10: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
4b20: 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  antCulture,..   
4b30: 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2e             "{0}.
4b40: 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  ", baseSchemaNam
4b50: 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  e), String.Empty
4b60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
4b70: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4b80: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
4b90: 46 6c 61 67 73 20 66 6c 61 67 73 20 3d 0d 0a 20  Flags flags =.. 
4ba0: 20 20 20 20 20 20 20 20 20 28 63 6e 6e 20 21 3d           (cnn !=
4bb0: 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 46 6c 61   null) ? cnn.Fla
4bc0: 67 73 20 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs : SQLiteConne
4bd0: 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 66 61 75  ctionFlags.Defau
4be0: 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  lt;....      if 
4bf0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
4c00: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
4c10: 4c 6f 67 50 72 65 70 61 72 65 29 20 3d 3d 20 53  LogPrepare) == S
4c20: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
4c30: 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61 72 65 29  lags.LogPrepare)
4c40: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
4c50: 20 20 20 20 20 69 66 20 28 28 73 74 72 53 71 6c       if ((strSql
4c60: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 74   == null) || (st
4c70: 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3d 3d 20 30  rSql.Length == 0
4c80: 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 54 72 69  ) || (strSql.Tri
4c90: 6d 28 29 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29  m().Length == 0)
4ca0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4cb0: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
4cc0: 73 73 61 67 65 28 22 50 72 65 70 61 72 69 6e 67  ssage("Preparing
4cd0: 20 7b 3c 6e 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22   {<nothing>}..."
4ce0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c  );..          el
4cf0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
4d00: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
4d10: 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f  essage(String.Fo
4d20: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
4d30: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
4d40: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
4d50: 75 72 65 2c 20 22 50 72 65 70 61 72 69 6e 67 20  ure, "Preparing 
4d60: 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72  {{{0}}}...", str
4d70: 53 71 6c 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  Sql));..      }.
4d80: 0a 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ...      IntPtr 
4d90: 73 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65  stmt = IntPtr.Ze
4da0: 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ro;..      IntPt
4db0: 72 20 70 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a  r ptr = IntPtr.Z
4dc0: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ero;..      int 
4dd0: 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  len = 0;..      
4de0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
4df0: 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  n = SQLiteErrorC
4e00: 6f 64 65 2e 53 63 68 65 6d 61 3b 0d 0a 20 20 20  ode.Schema;..   
4e10: 20 20 20 69 6e 74 20 72 65 74 72 69 65 73 20 3d     int retries =
4e20: 20 30 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b   0;..      byte[
4e30: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 73 74 72  ] b = ToUTF8(str
4e40: 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20 73 74 72  Sql);..      str
4e50: 69 6e 67 20 74 79 70 65 64 65 66 73 20 3d 20 6e  ing typedefs = n
4e60: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  ull;..      SQLi
4e70: 74 65 53 74 61 74 65 6d 65 6e 74 20 63 6d 64 20  teStatement cmd 
4e80: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 52  = null;..      R
4e90: 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c  andom rnd = null
4ea0: 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74  ;..      uint st
4eb0: 61 72 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29  arttick = (uint)
4ec0: 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b  Environment.Tick
4ed0: 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  Count;....      
4ee0: 47 43 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  GCHandle handle 
4ef0: 3d 20 47 43 48 61 6e 64 6c 65 2e 41 6c 6c 6f 63  = GCHandle.Alloc
4f00: 28 62 2c 20 47 43 48 61 6e 64 6c 65 54 79 70 65  (b, GCHandleType
4f10: 2e 50 69 6e 6e 65 64 29 3b 0d 0a 20 20 20 20 20  .Pinned);..     
4f20: 20 49 6e 74 50 74 72 20 70 73 71 6c 20 3d 20 68   IntPtr psql = h
4f30: 61 6e 64 6c 65 2e 41 64 64 72 4f 66 50 69 6e 6e  andle.AddrOfPinn
4f40: 65 64 4f 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20  edObject();..   
4f50: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
4f60: 6e 74 48 61 6e 64 6c 65 20 73 74 61 74 65 6d 65  ntHandle stateme
4f70: 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b  ntHandle = null;
4f80: 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20  ..      try..   
4f90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 77 68     {..        wh
4fa0: 69 6c 65 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74  ile ((n == SQLit
4fb0: 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d  eErrorCode.Schem
4fc0: 61 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65  a || n == SQLite
4fd0: 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64  ErrorCode.Locked
4fe0: 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45   || n == SQLiteE
4ff0: 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 26  rrorCode.Busy) &
5000: 26 20 72 65 74 72 69 65 73 20 3c 20 33 29 0d 0a  & retries < 3)..
5010: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5020: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
5030: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5040: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
5050: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ...          }..
5060: 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
5070: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
5080: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
5090: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
50a0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
50b0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
50c0: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
50d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
50e0: 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  .sqlite3_prepare
50f0: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 70  _interop(_sql, p
5100: 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  sql, b.Length - 
5110: 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75 74  1, out stmt, out
5120: 20 70 74 72 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d   ptr, out len);.
5130: 0a 23 65 6c 73 65 0d 0a 23 69 66 20 55 53 45 5f  .#else..#if USE_
5140: 50 52 45 50 41 52 45 5f 56 32 0d 0a 20 20 20 20  PREPARE_V2..    
5150: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
5160: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5170: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
5180: 76 32 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62  v2(_sql, psql, b
5190: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74  .Length - 1, out
51a0: 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 29 3b   stmt, out ptr);
51b0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
51c0: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
51d0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
51e0: 69 74 65 33 5f 70 72 65 70 61 72 65 28 5f 73 71  ite3_prepare(_sq
51f0: 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74  l, psql, b.Lengt
5200: 68 20 2d 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c  h - 1, out stmt,
5210: 20 6f 75 74 20 70 74 72 29 3b 0d 0a 23 65 6e 64   out ptr);..#end
5220: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
5230: 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69  len = -1;..#endi
5240: 66 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  f....#if !NET_CO
5250: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
5260: 45 5f 53 54 41 54 45 4d 45 4e 54 0d 0a 20 20 20  E_STATEMENT..   
5270: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
5280: 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e  riteLine(String.
5290: 46 6f 72 6d 61 74 28 22 50 72 65 70 61 72 65 20  Format("Prepare 
52a0: 28 7b 30 7d 29 3a 20 7b 31 7d 22 2c 20 6e 2c 20  ({0}): {1}", n, 
52b0: 73 74 6d 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  stmt));..#endif.
52c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
52d0: 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  f ((n == SQLiteE
52e0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20  rrorCode.Ok) && 
52f0: 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e  (stmt != IntPtr.
5300: 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20  Zero))..        
5310: 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 48        statementH
5320: 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69  andle = new SQLi
5330: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
5340: 65 28 5f 73 71 6c 2c 20 73 74 6d 74 29 3b 0d 0a  e(_sql, stmt);..
5350: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5360: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d           if (n =
5370: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
5380: 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20  e.Schema)..     
5390: 20 20 20 20 20 20 20 72 65 74 72 69 65 73 2b 2b         retries++
53a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  ;..          els
53b0: 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
53c0: 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
53d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
53e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
53f0: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47  String.Compare(G
5400: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 22  etLastError(), "
5410: 6e 65 61 72 20 5c 22 54 59 50 45 53 5c 22 3a 20  near \"TYPES\": 
5420: 73 79 6e 74 61 78 20 65 72 72 6f 72 22 2c 20 53  syntax error", S
5430: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
5440: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
5450: 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  e) == 0)..      
5460: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5470: 20 20 20 20 20 20 20 69 6e 74 20 70 6f 73 20 3d         int pos =
5480: 20 73 74 72 53 71 6c 2e 49 6e 64 65 78 4f 66 28   strSql.IndexOf(
5490: 27 3b 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ';');..         
54a0: 20 20 20 20 20 69 66 20 28 70 6f 73 20 3d 3d 20       if (pos == 
54b0: 2d 31 29 20 70 6f 73 20 3d 20 73 74 72 53 71 6c  -1) pos = strSql
54c0: 2e 4c 65 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a  .Length - 1;....
54d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
54e0: 70 65 64 65 66 73 20 3d 20 73 74 72 53 71 6c 2e  pedefs = strSql.
54f0: 53 75 62 73 74 72 69 6e 67 28 30 2c 20 70 6f 73  Substring(0, pos
5500: 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20   + 1);..        
5510: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
5520: 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28  trSql.Substring(
5530: 70 6f 73 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20  pos + 1);....   
5540: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52 65             strRe
5550: 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20  main = "";....  
5560: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
5570: 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26  e (cmd == null &
5580: 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  & strSql.Length 
5590: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
55a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
55b0: 20 20 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65         cmd = Pre
55c0: 70 61 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c  pare(cnn, strSql
55d0: 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65  , previous, time
55e0: 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74 72 52 65  outMS, out strRe
55f0: 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  main);..        
5600: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
5610: 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20   strRemain;..   
5620: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5640: 20 28 63 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a   (cmd != null)..
5650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5660: 63 6d 64 2e 53 65 74 54 79 70 65 73 28 74 79 70  cmd.SetTypes(typ
5670: 65 64 65 66 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  edefs);....     
5680: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5690: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  cmd;..          
56a0: 20 20 7d 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35    }..#if (NET_35
56b0: 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45   || NET_40 || NE
56c0: 54 5f 34 35 29 20 26 26 20 21 50 4c 41 54 46 4f  T_45) && !PLATFO
56d0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
56e0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
56f0: 20 65 6c 73 65 20 69 66 20 28 5f 62 75 69 6c 64   else if (_build
5700: 69 6e 67 53 63 68 65 6d 61 20 3d 3d 20 66 61 6c  ingSchema == fal
5710: 73 65 20 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d  se && String.Com
5720: 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f  pare(GetLastErro
5730: 72 28 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68  r(), 0, "no such
5740: 20 74 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48   table: TEMP.SCH
5750: 45 4d 41 22 2c 20 30 2c 20 32 36 2c 20 53 74 72  EMA", 0, 26, Str
5760: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
5770: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
5780: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
5790: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
57a0: 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d       strRemain =
57b0: 20 22 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   "";..          
57c0: 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68      _buildingSch
57d0: 65 6d 61 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ema = true;..   
57e0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
57f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
5800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5810: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
5820: 74 65 6e 73 69 6f 6e 73 20 65 78 74 20 3d 20 28  tensions ext = (
5830: 28 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65  (IServiceProvide
5840: 72 29 53 51 4c 69 74 65 46 61 63 74 6f 72 79 2e  r)SQLiteFactory.
5850: 49 6e 73 74 61 6e 63 65 29 2e 47 65 74 53 65 72  Instance).GetSer
5860: 76 69 63 65 28 74 79 70 65 6f 66 28 49 53 51 4c  vice(typeof(ISQL
5870: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
5880: 6f 6e 73 29 29 20 61 73 20 49 53 51 4c 69 74 65  ons)) as ISQLite
5890: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
58a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
58b0: 20 20 20 20 20 69 66 20 28 65 78 74 20 21 3d 20       if (ext != 
58c0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
58d0: 20 20 20 20 20 20 20 20 20 65 78 74 2e 42 75 69           ext.Bui
58e0: 6c 64 54 65 6d 70 53 63 68 65 6d 61 28 63 6e 6e  ldTempSchema(cnn
58f0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5900: 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64        while (cmd
5910: 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53   == null && strS
5920: 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  ql.Length > 0)..
5930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5940: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5950: 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61       cmd = Prepa
5960: 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20  re(cnn, strSql, 
5970: 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75  previous, timeou
5980: 74 4d 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61  tMS, out strRema
5990: 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  in);..          
59a0: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
59b0: 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20   strRemain;..   
59c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
59d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
59e0: 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20    return cmd;.. 
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
5a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
5a10: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
5a20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5a30: 20 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e          _buildin
5a40: 67 53 63 68 65 6d 61 20 3d 20 66 61 6c 73 65 3b  gSchema = false;
5a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5a60: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5a70: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
5a80: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
5a90: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
5aa0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c  QLiteErrorCode.L
5ab0: 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51  ocked || n == SQ
5ac0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75  LiteErrorCode.Bu
5ad0: 73 79 29 20 2f 2f 20 4c 6f 63 6b 65 64 20 2d 2d  sy) // Locked --
5ae0: 20 64 65 6c 61 79 20 61 20 73 6d 61 6c 6c 20 61   delay a small a
5af0: 6d 6f 75 6e 74 20 62 65 66 6f 72 65 20 72 65 74  mount before ret
5b00: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
5b10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5b20: 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a  // Keep trying..
5b30: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5b40: 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20  rnd == null) // 
5b50: 46 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65  First time we've
5b60: 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65   encountered the
5b70: 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20   lock..         
5b80: 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52       rnd = new R
5b90: 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20  andom();....    
5ba0: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
5bb0: 27 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65  've exceeded the
5bc0: 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f   command's timeo
5bd0: 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20  ut, give up and 
5be0: 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a  throw an error..
5bf0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5c00: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
5c10: 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74  t.TickCount - st
5c20: 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75  arttick > timeou
5c30: 74 4d 53 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tMS)..          
5c40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5c50: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
5c60: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
5c70: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
5c80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
5c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
5ca0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
5cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5cc0: 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65  // Otherwise sle
5cd0: 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20  ep for a random 
5ce0: 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75  amount of time u
5cf0: 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20  p to 150ms..    
5d00: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
5d10: 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61  .Threading.Threa
5d20: 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74  d.Sleep(rnd.Next
5d30: 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20  (1, 150));..    
5d40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5d50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5d60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
5d70: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
5d80: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
5d90: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
5da0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
5db0: 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
5dc0: 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 55     strRemain = U
5dd0: 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c  TF8ToString(ptr,
5de0: 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   len);....      
5df0: 20 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48    if (statementH
5e00: 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 63  andle != null) c
5e10: 6d 64 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53  md = new SQLiteS
5e20: 74 61 74 65 6d 65 6e 74 28 74 68 69 73 2c 20 66  tatement(this, f
5e30: 6c 61 67 73 2c 20 73 74 61 74 65 6d 65 6e 74 48  lags, statementH
5e40: 61 6e 64 6c 65 2c 20 73 74 72 53 71 6c 2e 53 75  andle, strSql.Su
5e50: 62 73 74 72 69 6e 67 28 30 2c 20 73 74 72 53 71  bstring(0, strSq
5e60: 6c 2e 4c 65 6e 67 74 68 20 2d 20 73 74 72 52 65  l.Length - strRe
5e70: 6d 61 69 6e 2e 4c 65 6e 67 74 68 29 2c 20 70 72  main.Length), pr
5e80: 65 76 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20 20 20  evious);....    
5e90: 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d      return cmd;.
5ea0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
5eb0: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 7b  finally..      {
5ec0: 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65  ..        handle
5ed0: 2e 46 72 65 65 28 29 3b 0d 0a 20 20 20 20 20 20  .Free();..      
5ee0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
5ef0: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
5f00: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
5f10: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
5f20: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
5f30: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
5f40: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
5f50: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
5f60: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
5f70: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
5f80: 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  sage(String.Form
5f90: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
5fa0: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
5fb0: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
5fc0: 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69            "Bindi
5fd0: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d  ng statement {0}
5fe0: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61   paramter #{1} a
5ff0: 73 20 4e 55 4c 4c 2e 2e 2e 22 2c 0d 0a 20 20 20  s NULL...",..   
6000: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
6010: 6e 74 50 74 72 2c 20 69 6e 64 65 78 29 29 3b 0d  ntPtr, index));.
6020: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
6030: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
6040: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
6050: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
6060: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
6070: 64 65 78 2c 20 56 61 6c 75 65 54 79 70 65 20 76  dex, ValueType v
6080: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
6090: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
60a0: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
60b0: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  le;....        S
60c0: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
60d0: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
60e0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
60f0: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
6100: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
6110: 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d  #{1} as type {2}
6120: 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33   with value {{{3
6130: 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  }}}...",..      
6140: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
6150: 74 72 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  tr, index, value
6160: 2e 47 65 74 54 79 70 65 28 29 2c 20 76 61 6c 75  .GetType(), valu
6170: 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  e));..    }.... 
6180: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
6190: 63 20 73 74 72 69 6e 67 20 46 6f 72 6d 61 74 44  c string FormatD
61a0: 61 74 65 54 69 6d 65 28 44 61 74 65 54 69 6d 65  ateTime(DateTime
61b0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
61c0: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75          StringBu
61d0: 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e  ilder result = n
61e0: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
61f0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ();....        r
6200: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c  esult.Append(val
6210: 75 65 2e 54 6f 53 74 72 69 6e 67 28 22 79 79 79  ue.ToString("yyy
6220: 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73  y-MM-ddTHH:mm:ss
6230: 2e 46 46 46 46 46 46 46 4b 22 29 29 3b 0d 0a 20  .FFFFFFFK"));.. 
6240: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
6250: 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20  pend(' ');..    
6260: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
6270: 64 28 76 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d 0a  d(value.Kind);..
6280: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
6290: 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20  ppend(' ');..   
62a0: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
62b0: 6e 64 28 76 61 6c 75 65 2e 54 69 63 6b 73 29 3b  nd(value.Ticks);
62c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
62d0: 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69  rn result.ToStri
62e0: 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ng();..    }....
62f0: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74      protected st
6300: 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e  atic void LogBin
6310: 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  d(SQLiteStatemen
6320: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20  tHandle handle, 
6330: 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54  int index, DateT
6340: 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ime value)..    
6350: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
6360: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
6370: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
6380: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
6390: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
63a0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
63b0: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
63c0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
63d0: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
63e0: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
63f0: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
6400: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
6410: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
6420: 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29  typeof(DateTime)
6430: 2c 20 46 6f 72 6d 61 74 44 61 74 65 54 69 6d 65  , FormatDateTime
6440: 28 76 61 6c 75 65 29 29 29 3b 0d 0a 20 20 20 20  (value)));..    
6450: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
6460: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
6470: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
6480: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
6490: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
64a0: 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20  string value).. 
64b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
64c0: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
64d0: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
64e0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
64f0: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
6500: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
6510: 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67          "Binding
6520: 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70   statement {0} p
6530: 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20  aramter #{1} as 
6540: 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61  type {2} with va
6550: 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c  lue {{{3}}}...",
6560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61  ..            ha
6570: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65  ndleIntPtr, inde
6580: 78 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67  x, typeof(String
6590: 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c  ), (value != nul
65a0: 6c 29 20 3f 20 76 61 6c 75 65 20 3a 20 22 3c 6e  l) ? value : "<n
65b0: 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d  ull>"));..    }.
65c0: 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  ...    private s
65d0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 54 6f 48  tatic string ToH
65e0: 65 78 61 64 65 63 69 6d 61 6c 53 74 72 69 6e 67  exadecimalString
65f0: 28 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b  (..        byte[
6600: 5d 20 61 72 72 61 79 0d 0a 20 20 20 20 20 20 20  ] array..       
6610: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
6620: 20 20 20 69 66 20 28 61 72 72 61 79 20 3d 3d 20     if (array == 
6630: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6640: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
6650: 0a 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e  ...        Strin
6660: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
6670: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
6680: 64 65 72 28 61 72 72 61 79 2e 4c 65 6e 67 74 68  der(array.Length
6690: 20 2a 20 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   * 2);....      
66a0: 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61    int length = a
66b0: 72 72 61 79 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  rray.Length;....
66c0: 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
66d0: 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65   index = 0; inde
66e0: 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65  x < length; inde
66f0: 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x++)..          
6700: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
6710: 61 72 72 61 79 5b 69 6e 64 65 78 5d 2e 54 6f 53  array[index].ToS
6720: 74 72 69 6e 67 28 22 78 32 22 29 29 3b 0d 0a 0d  tring("x2"));...
6730: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6740: 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28  result.ToString(
6750: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
6760: 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69   protected stati
6770: 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53  c void LogBind(S
6780: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
6790: 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74  ndle handle, int
67a0: 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 76   index, byte[] v
67b0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
67c0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
67d0: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
67e0: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  le;....        S
67f0: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
6800: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
6810: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
6820: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
6830: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
6840: 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d  #{1} as type {2}
6850: 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33   with value {{{3
6860: 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  }}}...",..      
6870: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
6880: 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f  tr, index, typeo
6890: 66 28 42 79 74 65 5b 5d 29 2c 20 28 76 61 6c 75  f(Byte[]), (valu
68a0: 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 48  e != null) ? ToH
68b0: 65 78 61 64 65 63 69 6d 61 6c 53 74 72 69 6e 67  exadecimalString
68c0: 28 76 61 6c 75 65 29 20 3a 20 22 3c 6e 75 6c 6c  (value) : "<null
68d0: 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  >"));..    }....
68e0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
68f0: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
6900: 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61  Double(SQLiteSta
6910: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
6920: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6930: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
6940: 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75  dex, double valu
6950: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
6960: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
6970: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
6980: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
6990: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
69a0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
69b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
69c0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
69d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
69e0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
69f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6a00: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
6a10: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
6a20: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
6a30: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
6a40: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
6a50: 4b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  K..        SQLit
6a60: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
6a70: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6a80: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
6a90: 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69  double(handle, i
6aa0: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
6ab0: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
6ac0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53  NDARD..        S
6ad0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
6ae0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
6af0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
6b00: 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  ind_double_inter
6b10: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
6b20: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
6b30: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
6b40: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
6b50: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
6b60: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
6b70: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
6b80: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
6b90: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
6ba0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
6bb0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
6bc0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
6bd0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
6be0: 6f 69 64 20 42 69 6e 64 5f 49 6e 74 33 32 28 53  oid Bind_Int32(S
6bf0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
6c00: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
6c10: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
6c20: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74  , int index, int
6c30: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
6c40: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
6c50: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
6c60: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
6c70: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20  ite_stmt;....   
6c80: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
6c90: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
6ca0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
6cb0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
6cc0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
6cd0: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
6ce0: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
6cf0: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
6d00: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
6d10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6d20: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
6d30: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
6d40: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6d50: 62 69 6e 64 5f 69 6e 74 28 68 61 6e 64 6c 65 2c  bind_int(handle,
6d60: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
6d70: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
6d80: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
6d90: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
6da0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
6db0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
6dc0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
6dd0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
6de0: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49  ide void Bind_UI
6df0: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
6e00: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
6e10: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6e20: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
6e30: 78 2c 20 75 69 6e 74 20 76 61 6c 75 65 29 0d 0a  x, uint value)..
6e40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
6e50: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
6e60: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
6e70: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
6e80: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
6e90: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
6ea0: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
6eb0: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
6ec0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
6ed0: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
6ee0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6ef0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
6f00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6f10: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
6f20: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
6f30: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
6f40: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  dif....        S
6f50: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
6f60: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
6f70: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
6f80: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6f90: 42 69 6e 64 55 49 6e 74 33 32 41 73 49 6e 74 36  BindUInt32AsInt6
6fa0: 34 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  4) == SQLiteConn
6fb0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64  ectionFlags.Bind
6fc0: 55 49 6e 74 33 32 41 73 49 6e 74 36 34 29 0d 0a  UInt32AsInt64)..
6fd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6fe0: 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75         long valu
6ff0: 65 32 20 3d 20 76 61 6c 75 65 3b 0d 0a 0d 0a 23  e2 = value;....#
7000: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
7010: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
7020: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
7030: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
7040: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
7050: 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e  int64(handle, in
7060: 64 65 78 2c 20 76 61 6c 75 65 32 29 3b 0d 0a 23  dex, value2);..#
7070: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
7080: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
7090: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
70a0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
70b0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e  e3_bind_int64_in
70c0: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
70d0: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 32 29  dex, ref value2)
70e0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
70f0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
7100: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
7110: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
7120: 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  if..        }.. 
7130: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
7140: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7150: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
7160: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
7170: 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 28 68 61  te3_bind_uint(ha
7180: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
7190: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
71a0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
71b0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
71c0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
71d0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
71e0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
71f0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
7200: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
7210: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e  ide void Bind_In
7220: 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t64(SQLiteStatem
7230: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
7240: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
7250: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
7260: 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20  , long value).. 
7270: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
7280: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
7290: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
72a0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
72b0: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
72c0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
72d0: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
72e0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
72f0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
7300: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
7310: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7320: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
7330: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7340: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
7350: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
7360: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
7370: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
7380: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
7390: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
73a0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
73b0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
73c0: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
73d0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
73e0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
73f0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
7400: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7410: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
7420: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
7430: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
7440: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
7450: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
7460: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
7470: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
7480: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20  dif..        if 
7490: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
74a0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
74b0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
74c0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
74d0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
74e0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
74f0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
7500: 64 5f 55 49 6e 74 36 34 28 53 51 4c 69 74 65 53  d_UInt64(SQLiteS
7510: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
7520: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7530: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
7540: 69 6e 64 65 78 2c 20 75 6c 6f 6e 67 20 76 61 6c  index, ulong val
7550: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
7560: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
7570: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
7580: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
7590: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
75a0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
75b0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
75c0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
75d0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
75e0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
75f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7600: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
7610: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7620: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
7630: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
7640: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
7650: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
7660: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
7670: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7680: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
7690: 5f 75 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  _uint64(handle, 
76a0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
76b0: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
76c0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
76d0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
76e0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
76f0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7700: 62 69 6e 64 5f 75 69 6e 74 36 34 5f 69 6e 74 65  bind_uint64_inte
7710: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
7720: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
7730: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74  #else..        t
7740: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
7750: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
7760: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
7770: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
7780: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
7790: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
77a0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
77b0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
77c0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
77d0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
77e0: 76 6f 69 64 20 42 69 6e 64 5f 54 65 78 74 28 53  void Bind_Text(S
77f0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
7800: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
7810: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
7820: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72  , int index, str
7830: 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ing value)..    
7840: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
7850: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
7860: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
7870: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
7880: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
7890: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
78a0: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
78b0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
78c0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
78d0: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
78e0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
78f0: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
7900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
7910: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
7920: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
7930: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
7940: 0a 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b  ...        byte[
7950: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c  ] b = ToUTF8(val
7960: 75 65 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  ue);....#if !PLA
7970: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
7980: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
7990: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
79a0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
79b0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
79c0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
79d0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
79e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
79f0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
7a00: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b  ndle, index, b);
7a10: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
7a20: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  dif....        S
7a30: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
7a40: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7a50: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
7a60: 69 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c  ind_text(handle,
7a70: 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e   index, b, b.Len
7a80: 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72  gth - 1, (IntPtr
7a90: 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20  )(-1));..       
7aa0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
7ab0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
7ac0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
7ad0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
7ae0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
7af0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
7b00: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
7b10: 20 42 69 6e 64 5f 44 61 74 65 54 69 6d 65 28 53   Bind_DateTime(S
7b20: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
7b30: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
7b40: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
7b50: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74  , int index, Dat
7b60: 65 54 69 6d 65 20 64 74 29 0d 0a 20 20 20 20 7b  eTime dt)..    {
7b70: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
7b80: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
7b90: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
7ba0: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23  qlite_stmt;....#
7bb0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
7bc0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
7bd0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
7be0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
7bf0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
7c00: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
7c10: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
7c20: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
7c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
7c40: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
7c50: 65 78 2c 20 64 74 29 3b 0d 0a 20 20 20 20 20 20  ex, dt);..      
7c60: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
7c70: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28 5f         switch (_
7c80: 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 29 0d  datetimeFormat).
7c90: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
7ca0: 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
7cb0: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54  iteDateFormats.T
7cc0: 69 63 6b 73 3a 0d 0a 20 20 20 20 20 20 20 20 20  icks:..         
7cd0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
7cf0: 6e 67 20 76 61 6c 75 65 20 3d 20 64 74 2e 54 69  ng value = dt.Ti
7d00: 63 6b 73 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  cks;....#if !PLA
7d10: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
7d20: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
7d30: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7d40: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
7d50: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
7d60: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
7d70: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7d80: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
7d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7da0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7db0: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
7dc0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
7dd0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
7de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7df0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7e00: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
7e10: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
7e20: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7e30: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
7e40: 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  4(handle, index,
7e50: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20   value);..#elif 
7e60: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
7e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7e80: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
7e90: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
7ea0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
7eb0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
7ec0: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
7ed0: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
7ee0: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
7ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f00: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
7f10: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
7f20: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
7f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f40: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
7f50: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
7f60: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
7f70: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
7f80: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
7f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fa0: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
7fb0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7fc0: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
7fd0: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
7fe0: 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a 20 20 20 20  JulianDay:..    
7ff0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8010: 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 20     double value 
8020: 3d 20 54 6f 4a 75 6c 69 61 6e 44 61 79 28 64 74  = ToJulianDay(dt
8030: 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  );....#if !PLATF
8040: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
8050: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
8060: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66            if ((f
8070: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
8080: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
8090: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
80a0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
80b0: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
80c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
80d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80e0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
80f0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
8100: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
8110: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
8120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8130: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
8140: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
8150: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8160: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
8170: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
8180: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
8190: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
81a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
81b0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
81c0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
81d0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
81e0: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
81f0: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
8200: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
8210: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
8220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8230: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
8240: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
8250: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
8260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8270: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
8280: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
8290: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
82a0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
82b0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
82c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82d0: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
82e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
82f0: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
8300: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
8310: 55 6e 69 78 45 70 6f 63 68 3a 0d 0a 20 20 20 20  UnixEpoch:..    
8320: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8340: 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20     long value = 
8350: 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 36 34 28  Convert.ToInt64(
8360: 64 74 2e 53 75 62 74 72 61 63 74 28 55 6e 69 78  dt.Subtract(Unix
8370: 45 70 6f 63 68 29 2e 54 6f 74 61 6c 53 65 63 6f  Epoch).TotalSeco
8380: 6e 64 73 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  nds);....#if !PL
8390: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
83a0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
83b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
83c0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
83d0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
83e0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
83f0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8400: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
8410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8420: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8430: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
8440: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
8450: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
8460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8480: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
8490: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
84a0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
84b0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
84c0: 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  64(handle, index
84d0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66  , value);..#elif
84e0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
84f0: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  D..             
8500: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
8510: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
8520: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
8530: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
8540: 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  4_interop(handle
8550: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
8560: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
8570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8580: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
8590: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
85a0: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
85b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85c0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
85d0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
85e0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
85f0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
8600: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
8610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8620: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
8630: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8640: 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
8650: 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t:..            
8660: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8670: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
8680: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 64 74 29  ] b = ToUTF8(dt)
8690: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
86a0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
86b0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
86c0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c           if ((fl
86d0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
86e0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
86f0: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
8700: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
8710: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
8720: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8740: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
8750: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29  andle, index, b)
8760: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8770: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
8780: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8790: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
87a0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
87b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
87c0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
87d0: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
87e0: 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31   b, b.Length - 1
87f0: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
8800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8810: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
8820: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
8830: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
8840: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
8850: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
8860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8870: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
8880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
8890: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
88a0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
88b0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
88c0: 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69 74 65  Bind_Blob(SQLite
88d0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
88e0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
88f0: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
8900: 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 62   index, byte[] b
8910: 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d  lobData)..    {.
8920: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
8930: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
8940: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
8950: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69  lite_stmt;....#i
8960: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
8970: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
8980: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
8990: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
89a0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
89b0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
89c0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
89d0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
89e0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
89f0: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
8a00: 78 2c 20 62 6c 6f 62 44 61 74 61 29 3b 0d 0a 20  x, blobData);.. 
8a10: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
8a20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
8a30: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
8a40: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8a50: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
8a60: 5f 62 6c 6f 62 28 68 61 6e 64 6c 65 2c 20 69 6e  _blob(handle, in
8a70: 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20 62  dex, blobData, b
8a80: 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c 20  lobData.Length, 
8a90: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
8aa0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
8ab0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8ac0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
8ad0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
8ae0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
8af0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
8b00: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
8b10: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c  de void Bind_Nul
8b20: 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  l(SQLiteStatemen
8b30: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
8b40: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
8b50: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  ags, int index).
8b60: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
8b70: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
8b80: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
8b90: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8ba0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
8bb0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
8bc0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
8bd0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
8be0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
8bf0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
8c00: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8c10: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
8c20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8c30: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
8c40: 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  e, index);..    
8c50: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
8c60: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
8c70: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
8c80: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8c90: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75  .sqlite3_bind_nu
8ca0: 6c 6c 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  ll(handle, index
8cb0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
8cc0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
8cd0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
8ce0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
8cf0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
8d00: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
8d10: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
8d20: 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f  erride int Bind_
8d30: 50 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c 69 74  ParamCount(SQLit
8d40: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
8d50: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8d60: 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20  nFlags flags).. 
8d70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
8d80: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
8d90: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
8da0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
8db0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 76 61 6c  .        int val
8dc0: 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ue = UnsafeNativ
8dd0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8de0: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
8df0: 63 6f 75 6e 74 28 68 61 6e 64 6c 65 29 3b 0d 0a  count(handle);..
8e00: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
8e10: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
8e20: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
8e30: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
8e40: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
8e50: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
8e60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8e70: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
8e80: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
8e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
8ea0: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
8eb0: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
8ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8ed0: 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
8ee0: 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
8ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
8f00: 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  Statement {0} pa
8f10: 72 61 6d 74 65 72 20 63 6f 75 6e 74 20 69 73 20  ramter count is 
8f20: 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  {1}.",..        
8f30: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
8f40: 74 50 74 72 2c 20 76 61 6c 75 65 29 29 3b 0d 0a  tPtr, value));..
8f50: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8f60: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
8f70: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
8f80: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
8f90: 64 65 20 73 74 72 69 6e 67 20 42 69 6e 64 5f 50  de string Bind_P
8fa0: 61 72 61 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53  aramName(SQLiteS
8fb0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
8fc0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
8fd0: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
8fe0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
8ff0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
9000: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
9010: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
9020: 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20  te_stmt;..      
9030: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 3b 0d 0a    string name;..
9040: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
9050: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
9060: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
9070: 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53    name = UTF8ToS
9080: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
9090: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
90a0: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
90b0: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 68 61  _name_interop(ha
90c0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 6f 75 74  ndle, index, out
90d0: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
90e0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d  lse..        nam
90f0: 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
9100: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
9110: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
9120: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
9130: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 2c  (handle, index),
9140: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d   -1);..#endif...
9150: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
9160: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
9170: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
9180: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
9190: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
91a0: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
91b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  {..            I
91c0: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
91d0: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
91e0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
91f0: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
9200: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
9210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9220: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
9230: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
9250: 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72  tatement {0} par
9260: 61 6d 74 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20  amter #{1} name 
9270: 69 73 20 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20  is {{{2}}}.",.. 
9280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
9290: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
92a0: 65 78 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20  ex, name));..   
92b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
92c0: 20 20 72 65 74 75 72 6e 20 6e 61 6d 65 3b 0d 0a    return name;..
92d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
92e0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
92f0: 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64  nt Bind_ParamInd
9300: 65 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ex(SQLiteStateme
9310: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
9320: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
9330: 6c 61 67 73 2c 20 73 74 72 69 6e 67 20 70 61 72  lags, string par
9340: 61 6d 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a  amName)..    {..
9350: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
9360: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
9370: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
9380: 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20  ite_stmt;..     
9390: 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 55     int index = U
93a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
93b0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
93c0: 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28  parameter_index(
93d0: 68 61 6e 64 6c 65 2c 20 54 6f 55 54 46 38 28 70  handle, ToUTF8(p
93e0: 61 72 61 6d 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20  aramName));.... 
93f0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
9400: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
9410: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
9420: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
9430: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
9440: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
9450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
9460: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
9470: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
9480: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
9490: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
94a0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
94b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
94c0: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
94d0: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
94e0: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61              "Sta
94f0: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
9500: 74 65 72 20 69 6e 64 65 78 20 6f 66 20 6e 61 6d  ter index of nam
9510: 65 20 7b 7b 7b 31 7d 7d 7d 20 69 73 20 23 7b 32  e {{{1}}} is #{2
9520: 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
9530: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
9540: 74 72 2c 20 70 61 72 61 6d 4e 61 6d 65 2c 20 69  tr, paramName, i
9550: 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 20 20 20  ndex));..       
9560: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
9570: 74 75 72 6e 20 69 6e 64 65 78 3b 0d 0a 20 20 20  turn index;..   
9580: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
9590: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
95a0: 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51 4c 69  ColumnCount(SQLi
95b0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
95c0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
95d0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
95e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
95f0: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
9600: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
9610: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
9620: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
9630: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
9640: 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  nName(SQLiteStat
9650: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
9660: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
9670: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
9680: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
9690: 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  en;..      retur
96a0: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
96b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
96c0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
96d0: 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  n_name_interop(s
96e0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
96f0: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e  , index, out len
9700: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
9710: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
9720: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
9730: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9740: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
9750: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
9760: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
9770: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
9780: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
9790: 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41  l override TypeA
97a0: 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66  ffinity ColumnAf
97b0: 66 69 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61  finity(SQLiteSta
97c0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
97d0: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
97e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
97f0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9800: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
9810: 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  type(stmt._sqlit
9820: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
9830: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
9840: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
9850: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70  string ColumnTyp
9860: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
9870: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
9880: 78 2c 20 6f 75 74 20 54 79 70 65 41 66 66 69 6e  x, out TypeAffin
9890: 69 74 79 20 6e 41 66 66 69 6e 69 74 79 29 0d 0a  ity nAffinity)..
98a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
98b0: 20 6c 65 6e 3b 0d 0a 23 69 66 20 21 53 51 4c 49   len;..#if !SQLI
98c0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
98d0: 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
98e0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
98f0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
9900: 5f 64 65 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f  _decltype_intero
9910: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
9920: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
9930: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
9940: 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20      len = -1;.. 
9950: 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20       IntPtr p = 
9960: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9970: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
9980: 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73 74 6d 74  mn_decltype(stmt
9990: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
99a0: 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ndex);..#endif..
99b0: 20 20 20 20 20 20 6e 41 66 66 69 6e 69 74 79 20        nAffinity 
99c0: 3d 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  = ColumnAffinity
99d0: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
99e0: 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 21 3d  ..      if (p !=
99f0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65   IntPtr.Zero) re
9a00: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
9a10: 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20  g(p, len);..    
9a20: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d    else..      {.
9a30: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b  .        string[
9a40: 5d 20 61 72 20 3d 20 73 74 6d 74 2e 54 79 70 65  ] ar = stmt.Type
9a50: 44 65 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a 20 20  Definitions;..  
9a60: 20 20 20 20 20 20 69 66 20 28 61 72 20 21 3d 20        if (ar != 
9a70: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
9a80: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
9a90: 69 6e 64 65 78 20 3c 20 61 72 2e 4c 65 6e 67 74  index < ar.Lengt
9aa0: 68 20 26 26 20 61 72 5b 69 6e 64 65 78 5d 20 21  h && ar[index] !
9ab0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9ac0: 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 5b 69       return ar[i
9ad0: 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20  ndex];..        
9ae0: 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
9af0: 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  n String.Empty;.
9b00: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 73 77 69  ...        //swi
9b10: 74 63 68 20 28 6e 41 66 66 69 6e 69 74 79 29 0d  tch (nAffinity).
9b20: 0a 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20  .        //{..  
9b30: 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54        //  case T
9b40: 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
9b50: 34 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  4:..        //  
9b60: 20 20 72 65 74 75 72 6e 20 22 42 49 47 49 4e 54    return "BIGINT
9b70: 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ";..        //  
9b80: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
9b90: 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20  y.Double:..     
9ba0: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
9bb0: 22 44 4f 55 42 4c 45 22 3b 0d 0a 20 20 20 20 20  "DOUBLE";..     
9bc0: 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65     //  case Type
9bd0: 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a  Affinity.Blob:..
9be0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65          //    re
9bf0: 74 75 72 6e 20 22 42 4c 4f 42 22 3b 0d 0a 20 20  turn "BLOB";..  
9c00: 20 20 20 20 20 20 2f 2f 20 20 64 65 66 61 75 6c        //  defaul
9c10: 74 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  t:..        //  
9c20: 20 20 72 65 74 75 72 6e 20 22 54 45 58 54 22 3b    return "TEXT";
9c30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 20  ..        //}.. 
9c40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
9c50: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
9c60: 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d  erride int Colum
9c70: 6e 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61  nIndex(SQLiteSta
9c80: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72  tement stmt, str
9c90: 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 0d  ing columnName).
9ca0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
9cb0: 74 20 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f 75 6e  t x = ColumnCoun
9cc0: 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20  t(stmt);....    
9cd0: 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30    for (int n = 0
9ce0: 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d 0a 20  ; n < x; n++).. 
9cf0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9d00: 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61  if (String.Compa
9d10: 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 43  re(columnName, C
9d20: 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d 74 2c 20  olumnName(stmt, 
9d30: 6e 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  n), StringCompar
9d40: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
9d50: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
9d60: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9d70: 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  n;..      }..   
9d80: 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20     return -1;.. 
9d90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
9da0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
9db0: 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69 67 69  ring ColumnOrigi
9dc0: 6e 61 6c 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  nalName(SQLiteSt
9dd0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
9de0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
9df0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
9e00: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
9e10: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74   len;..      ret
9e20: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
9e30: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
9e40: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
9e50: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f  umn_origin_name_
9e60: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
9e70: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
9e80: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
9e90: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
9ea0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
9eb0: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
9ec0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9ed0: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
9ee0: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
9ef0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
9f00: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
9f10: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
9f20: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
9f30: 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65  g ColumnDatabase
9f40: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
9f50: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
9f60: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
9f70: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
9f80: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
9f90: 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n;..      return
9fa0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
9fb0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9fc0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
9fd0: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69  _database_name_i
9fe0: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
9ff0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
a000: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
a010: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
a020: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
a030: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
a040: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
a050: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
a060: 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ame(stmt._sqlite
a070: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d  _stmt, index), -
a080: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
a090: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
a0a0: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
a0b0: 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61  ng ColumnTableNa
a0c0: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
a0d0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
a0e0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
a0f0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
a100: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
a110: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
a120: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
a130: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a140: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
a150: 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  able_name_intero
a160: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
a170: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
a180: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
a190: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
a1a0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
a1b0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a1c0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
a1d0: 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74  _table_name(stmt
a1e0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
a1f0: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
a200: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
a210: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
a220: 69 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d  ide void ColumnM
a230: 65 74 61 44 61 74 61 28 73 74 72 69 6e 67 20 64  etaData(string d
a240: 61 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20  ataBase, string 
a250: 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f  table, string co
a260: 6c 75 6d 6e 2c 20 6f 75 74 20 73 74 72 69 6e 67  lumn, out string
a270: 20 64 61 74 61 54 79 70 65 2c 20 6f 75 74 20 73   dataType, out s
a280: 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71  tring collateSeq
a290: 75 65 6e 63 65 2c 20 6f 75 74 20 62 6f 6f 6c 20  uence, out bool 
a2a0: 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 62 6f 6f  notNull, out boo
a2b0: 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75  l primaryKey, ou
a2c0: 74 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65  t bool autoIncre
a2d0: 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ment)..    {..  
a2e0: 20 20 20 20 49 6e 74 50 74 72 20 64 61 74 61 54      IntPtr dataT
a2f0: 79 70 65 50 74 72 3b 0d 0a 20 20 20 20 20 20 49  ypePtr;..      I
a300: 6e 74 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72  ntPtr collSeqPtr
a310: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6e 6f  ;..      int nno
a320: 74 4e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e  tNull;..      in
a330: 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 3b 0d 0a  t nprimaryKey;..
a340: 20 20 20 20 20 20 69 6e 74 20 6e 61 75 74 6f 49        int nautoI
a350: 6e 63 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74  nc;..      SQLit
a360: 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20  eErrorCode n;.. 
a370: 20 20 20 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d       int dtLen;.
a380: 0a 20 20 20 20 20 20 69 6e 74 20 63 73 4c 65 6e  .      int csLen
a390: 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
a3a0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
a3b0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
a3c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a3d0: 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65  _table_column_me
a3e0: 74 61 64 61 74 61 5f 69 6e 74 65 72 6f 70 28 5f  tadata_interop(_
a3f0: 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61  sql, ToUTF8(data
a400: 42 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61  Base), ToUTF8(ta
a410: 62 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c  ble), ToUTF8(col
a420: 75 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79  umn), out dataTy
a430: 70 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53  pePtr, out collS
a440: 65 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e  eqPtr, out nnotN
a450: 75 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72  ull, out nprimar
a460: 79 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49  yKey, out nautoI
a470: 6e 63 2c 20 6f 75 74 20 64 74 4c 65 6e 2c 20 6f  nc, out dtLen, o
a480: 75 74 20 63 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73  ut csLen);..#els
a490: 65 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d  e..      dtLen =
a4a0: 20 2d 31 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65   -1;..      csLe
a4b0: 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20  n = -1;....     
a4c0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
a4d0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a4e0: 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65  _table_column_me
a4f0: 74 61 64 61 74 61 28 5f 73 71 6c 2c 20 54 6f 55  tadata(_sql, ToU
a500: 54 46 38 28 64 61 74 61 42 61 73 65 29 2c 20 54  TF8(dataBase), T
a510: 6f 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f  oUTF8(table), To
a520: 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75  UTF8(column), ou
a530: 74 20 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f  t dataTypePtr, o
a540: 75 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f  ut collSeqPtr, o
a550: 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74  ut nnotNull, out
a560: 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75   nprimaryKey, ou
a570: 74 20 6e 61 75 74 6f 49 6e 63 29 3b 0d 0a 23 65  t nautoInc);..#e
a580: 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28  ndif..      if (
a590: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
a5a0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
a5b0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
a5c0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
a5d0: 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  or());....      
a5e0: 64 61 74 61 54 79 70 65 20 3d 20 55 54 46 38 54  dataType = UTF8T
a5f0: 6f 53 74 72 69 6e 67 28 64 61 74 61 54 79 70 65  oString(dataType
a600: 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20 20  Ptr, dtLen);..  
a610: 20 20 20 20 63 6f 6c 6c 61 74 65 53 65 71 75 65      collateSeque
a620: 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  nce = UTF8ToStri
a630: 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72 2c 20 63  ng(collSeqPtr, c
a640: 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sLen);....      
a650: 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e  notNull = (nnotN
a660: 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20  ull == 1);..    
a670: 20 20 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 28    primaryKey = (
a680: 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 3d 20 31  nprimaryKey == 1
a690: 29 3b 0d 0a 20 20 20 20 20 20 61 75 74 6f 49 6e  );..      autoIn
a6a0: 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61 75 74 6f  crement = (nauto
a6b0: 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20  Inc == 1);..    
a6c0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
a6d0: 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c  l override doubl
a6e0: 65 20 47 65 74 44 6f 75 62 6c 65 28 53 51 4c 69  e GetDouble(SQLi
a6f0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
a700: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
a710: 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c    {..      doubl
a720: 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50  e value;..#if !P
a730: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
a740: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
a750: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
a760: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a770: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
a780: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
a790: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
a7a0: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
a7b0: 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61  DARD..      Unsa
a7c0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a7d0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
a7e0: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74  ouble_interop(st
a7f0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
a800: 20 69 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c 75   index, out valu
a810: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
a820: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
a830: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
a840: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
a850: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
a860: 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ue;..    }....  
a870: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
a880: 69 64 65 20 73 62 79 74 65 20 47 65 74 53 42 79  ide sbyte GetSBy
a890: 74 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  te(SQLiteStateme
a8a0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
a8b0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
a8c0: 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
a8d0: 65 64 28 28 73 62 79 74 65 29 28 47 65 74 49 6e  ed((sbyte)(GetIn
a8e0: 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
a8f0: 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65   & byte.MaxValue
a900: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
a910: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
a920: 69 64 65 20 62 79 74 65 20 47 65 74 42 79 74 65  ide byte GetByte
a930: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
a940: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
a950: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
a960: 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
a970: 28 28 62 79 74 65 29 28 47 65 74 49 6e 74 33 32  ((byte)(GetInt32
a980: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20  (stmt, index) & 
a990: 62 79 74 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b  byte.MaxValue));
a9a0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
a9b0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
a9c0: 20 73 68 6f 72 74 20 47 65 74 49 6e 74 31 36 28   short GetInt16(
a9d0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
a9e0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
a9f0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
aa00: 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28  eturn unchecked(
aa10: 28 73 68 6f 72 74 29 28 47 65 74 49 6e 74 33 32  (short)(GetInt32
aa20: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20  (stmt, index) & 
aa30: 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29  ushort.MaxValue)
aa40: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
aa50: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
aa60: 64 65 20 75 73 68 6f 72 74 20 47 65 74 55 49 6e  de ushort GetUIn
aa70: 74 31 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t16(SQLiteStatem
aa80: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
aa90: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
aaa0: 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63     return unchec
aab0: 6b 65 64 28 28 75 73 68 6f 72 74 29 28 47 65 74  ked((ushort)(Get
aac0: 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
aad0: 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61 78 56  x) & ushort.MaxV
aae0: 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  alue));..    }..
aaf0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ab00: 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 49  verride int GetI
ab10: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
ab20: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
ab30: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
ab40: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
ab50: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
ab60: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
ab70: 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
ab80: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
ab90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
aba0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75 69 6e  nal override uin
abb0: 74 20 47 65 74 55 49 6e 74 33 32 28 53 51 4c 69  t GetUInt32(SQLi
abc0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
abd0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
abe0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
abf0: 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75 69 6e  n unchecked((uin
ac00: 74 29 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  t)GetInt32(stmt,
ac10: 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d   index));..    }
ac20: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
ac30: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
ac40: 65 74 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74  etInt64(SQLiteSt
ac50: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
ac60: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
ac70: 0a 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75  .      long valu
ac80: 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  e;..#if !PLATFOR
ac90: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
aca0: 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20  RK..      value 
acb0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
acc0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
acd0: 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e  lumn_int64(stmt.
ace0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
acf0: 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  dex);..#elif !SQ
ad00: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
ad10: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
ad20: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ad30: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e  _column_int64_in
ad40: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
ad50: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
ad60: 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  out value);..#el
ad70: 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
ad80: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
ad90: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
ada0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65  #endif..      re
adb0: 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20  turn value;..   
adc0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
add0: 61 6c 20 6f 76 65 72 72 69 64 65 20 75 6c 6f 6e  al override ulon
ade0: 67 20 47 65 74 55 49 6e 74 36 34 28 53 51 4c 69  g GetUInt64(SQLi
adf0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
ae00: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
ae10: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
ae20: 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75 6c 6f  n unchecked((ulo
ae30: 6e 67 29 47 65 74 49 6e 74 36 34 28 73 74 6d 74  ng)GetInt64(stmt
ae40: 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20  , index));..    
ae50: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
ae60: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
ae70: 67 20 47 65 74 54 65 78 74 28 53 51 4c 69 74 65  g GetText(SQLite
ae80: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
ae90: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
aea0: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
aeb0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
aec0: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72  nt len;..      r
aed0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
aee0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
aef0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
af00: 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72  olumn_text_inter
af10: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
af20: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74  stmt, index, out
af30: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
af40: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
af50: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
af60: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
af70: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
af80: 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c  n_text(stmt._sql
af90: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
afa0: 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  ,..        Unsaf
afb0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
afc0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
afd0: 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  tes(stmt._sqlite
afe0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d  _stmt, index));.
aff0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
b000: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
b010: 76 65 72 72 69 64 65 20 44 61 74 65 54 69 6d 65  verride DateTime
b020: 20 47 65 74 44 61 74 65 54 69 6d 65 28 53 51 4c   GetDateTime(SQL
b030: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
b040: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
b050: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
b060: 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20  _datetimeFormat 
b070: 3d 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  == SQLiteDateFor
b080: 6d 61 74 73 2e 54 69 63 6b 73 29 0d 0a 20 20 20  mats.Ticks)..   
b090: 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61       return ToDa
b0a0: 74 65 54 69 6d 65 28 47 65 74 49 6e 74 36 34 28  teTime(GetInt64(
b0b0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64  stmt, index), _d
b0c0: 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20  atetimeKind);.. 
b0d0: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64       else if (_d
b0e0: 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d  atetimeFormat ==
b0f0: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
b100: 74 73 2e 4a 75 6c 69 61 6e 44 61 79 29 0d 0a 20  ts.JulianDay).. 
b110: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f         return To
b120: 44 61 74 65 54 69 6d 65 28 47 65 74 44 6f 75 62  DateTime(GetDoub
b130: 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  le(stmt, index),
b140: 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b   _datetimeKind);
b150: 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20  ..      else if 
b160: 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74  (_datetimeFormat
b170: 20 3d 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f   == SQLiteDateFo
b180: 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 29  rmats.UnixEpoch)
b190: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
b1a0: 20 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74 49   ToDateTime(GetI
b1b0: 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
b1c0: 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64  ), _datetimeKind
b1d0: 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  );....#if !SQLIT
b1e0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
b1f0: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
b200: 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54    return ToDateT
b210: 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ime(UnsafeNative
b220: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b230: 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65  column_text_inte
b240: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
b250: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
b260: 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  t len), len);..#
b270: 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
b280: 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e  rn ToDateTime(Un
b290: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
b2a0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
b2b0: 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69  _text(stmt._sqli
b2c0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
b2d0: 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65  ..        Unsafe
b2e0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b2f0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
b300: 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  es(stmt._sqlite_
b310: 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
b320: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
b330: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b340: 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 42  erride long GetB
b350: 79 74 65 73 28 53 51 4c 69 74 65 53 74 61 74 65  ytes(SQLiteState
b360: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
b370: 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f  ndex, int nDataO
b380: 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44  ffset, byte[] bD
b390: 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c  est, int nStart,
b3a0: 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20   int nLength).. 
b3b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
b3c0: 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nlen = UnsafeNat
b3d0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b3e0: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28  e3_column_bytes(
b3f0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
b400: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20  t, index);....  
b410: 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73      // If no des
b420: 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c  tination buffer,
b430: 20 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65   return the size
b440: 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20   needed...      
b450: 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c  if (bDest == nul
b460: 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d  l) return nlen;.
b470: 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f  ...      int nCo
b480: 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d  pied = nLength;.
b490: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
b4a0: 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20  pied + nStart > 
b4b0: 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43  bDest.Length) nC
b4c0: 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65  opied = bDest.Le
b4d0: 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a  ngth - nStart;..
b4e0: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
b4f0: 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20  d + nDataOffset 
b500: 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20  > nlen) nCopied 
b510: 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66  = nlen - nDataOf
b520: 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  fset;....      i
b530: 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d  f (nCopied > 0).
b540: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
b550: 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55    IntPtr ptr = U
b560: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b570: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
b580: 6e 5f 62 6c 6f 62 28 73 74 6d 74 2e 5f 73 71 6c  n_blob(stmt._sql
b590: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
b5a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72  ;....        Mar
b5b0: 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74  shal.Copy((IntPt
b5c0: 72 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29  r)(ptr.ToInt64()
b5d0: 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c   + nDataOffset),
b5e0: 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20   bDest, nStart, 
b5f0: 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20  nCopied);..     
b600: 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a   }..      else..
b610: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b620: 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20   nCopied = 0;.. 
b630: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b640: 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d  return nCopied;.
b650: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
b660: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
b670: 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28 53 51  long GetChars(SQ
b680: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
b690: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69  mt, int index, i
b6a0: 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20  nt nDataOffset, 
b6b0: 63 68 61 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e  char[] bDest, in
b6c0: 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c  t nStart, int nL
b6d0: 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20  ength)..    {.. 
b6e0: 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a       int nlen;..
b6f0: 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65        int nCopie
b700: 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  d = nLength;....
b710: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72        string str
b720: 20 3d 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c   = GetText(stmt,
b730: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
b740: 6e 6c 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74  nlen = str.Lengt
b750: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  h;....      if (
b760: 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72  bDest == null) r
b770: 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20  eturn nlen;.... 
b780: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
b790: 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73   + nStart > bDes
b7a0: 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65  t.Length) nCopie
b7b0: 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  d = bDest.Length
b7c0: 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20   - nStart;..    
b7d0: 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20    if (nCopied + 
b7e0: 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c  nDataOffset > nl
b7f0: 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c  en) nCopied = nl
b800: 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74  en - nDataOffset
b810: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
b820: 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20  Copied > 0)..   
b830: 20 20 20 20 20 73 74 72 2e 43 6f 70 79 54 6f 28       str.CopyTo(
b840: 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 44 65  nDataOffset, bDe
b850: 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70  st, nStart, nCop
b860: 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73  ied);..      els
b870: 65 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a  e nCopied = 0;..
b880: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e  ..      return n
b890: 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a  Copied;..    }..
b8a0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
b8b0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e  verride bool IsN
b8c0: 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ull(SQLiteStatem
b8d0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
b8e0: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
b8f0: 20 20 20 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d     return (Colum
b900: 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20  nAffinity(stmt, 
b910: 69 6e 64 65 78 29 20 3d 3d 20 54 79 70 65 41 66  index) == TypeAf
b920: 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20  finity.Null);.. 
b930: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
b940: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
b950: 74 20 41 67 67 72 65 67 61 74 65 43 6f 75 6e 74  t AggregateCount
b960: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29  (IntPtr context)
b970: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
b980: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
b990: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
b9a0: 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75 6e  3_aggregate_coun
b9b0: 74 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20  t(context);..   
b9c0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
b9d0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
b9e0: 20 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e 28   CreateFunction(
b9f0: 73 74 72 69 6e 67 20 73 74 72 46 75 6e 63 74 69  string strFuncti
ba00: 6f 6e 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20 62  on, int nArgs, b
ba10: 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c  ool needCollSeq,
ba20: 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20   SQLiteCallback 
ba30: 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c  func, SQLiteCall
ba40: 62 61 63 6b 20 66 75 6e 63 73 74 65 70 2c 20 53  back funcstep, S
ba50: 51 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61  QLiteFinalCallba
ba60: 63 6b 20 66 75 6e 63 66 69 6e 61 6c 29 0d 0a 20  ck funcfinal).. 
ba70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
ba80: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a  teErrorCode n;..
ba90: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
baa0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20  ANDARD..      n 
bab0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
bac0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
bad0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e  eate_function_in
bae0: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
baf0: 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c  F8(strFunction),
bb00: 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74   nArgs, 4, IntPt
bb10: 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75  r.Zero, func, fu
bb20: 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61  ncstep, funcfina
bb30: 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20  l, (needCollSeq 
bb40: 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30  == true) ? 1 : 0
bb50: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
bb60: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
bb70: 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66  de.Ok) n = Unsaf
bb80: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
bb90: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
bba0: 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f  nction_interop(_
bbb0: 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46  sql, ToUTF8(strF
bbc0: 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c  unction), nArgs,
bbd0: 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   1, IntPtr.Zero,
bbe0: 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c   func, funcstep,
bbf0: 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65   funcfinal, (nee
bc00: 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65  dCollSeq == true
bc10: 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c  ) ? 1 : 0);..#el
bc20: 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e  se..      n = Un
bc30: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
bc40: 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
bc50: 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20  _function(_sql, 
bc60: 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
bc70: 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49  on), nArgs, 4, I
bc80: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
bc90: 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
bca0: 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69  final);..      i
bcb0: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
bcc0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20  rorCode.Ok) n = 
bcd0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
bce0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
bcf0: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c  te_function(_sql
bd00: 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63  , ToUTF8(strFunc
bd10: 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c  tion), nArgs, 1,
bd20: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
bd30: 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75  nc, funcstep, fu
bd40: 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69  ncfinal);..#endi
bd50: 66 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  f..      if (n !
bd60: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
bd70: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
bd80: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
bd90: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
bda0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
bdb0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
bdc0: 69 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 43  ide void CreateC
bdd0: 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67 20  ollation(string 
bde0: 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51  strCollation, SQ
bdf0: 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75  LiteCollation fu
be00: 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74  nc, SQLiteCollat
be10: 69 6f 6e 20 66 75 6e 63 31 36 29 0d 0a 20 20 20  ion func16)..   
be20: 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
be30: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
be40: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
be50: 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
be60: 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c  _collation(_sql,
be70: 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61   ToUTF8(strColla
be80: 74 69 6f 6e 29 2c 20 32 2c 20 49 6e 74 50 74 72  tion), 2, IntPtr
be90: 2e 5a 65 72 6f 2c 20 66 75 6e 63 31 36 29 3b 0d  .Zero, func16);.
bea0: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20  .      if (n == 
beb0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
bec0: 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  Ok) n = UnsafeNa
bed0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
bee0: 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
bef0: 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46  tion(_sql, ToUTF
bf00: 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c  8(strCollation),
bf10: 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   1, IntPtr.Zero,
bf20: 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 20 20 69   func);..      i
bf30: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
bf40: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
bf50: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
bf60: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
bf70: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
bf80: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
bf90: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f   override int Co
bfa0: 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70  ntextCollateComp
bfb0: 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  are(CollationEnc
bfc0: 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49  odingEnum enc, I
bfd0: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73  ntPtr context, s
bfe0: 74 72 69 6e 67 20 73 31 2c 20 73 74 72 69 6e 67  tring s1, string
bff0: 20 73 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66   s2)..    {..#if
c000: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
c010: 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  D..      byte[] 
c020: 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b  b1;..      byte[
c030: 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73  ] b2;..      Sys
c040: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
c050: 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75  g converter = nu
c060: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69  ll;....      swi
c070: 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20  tch (enc)..     
c080: 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65   {..        case
c090: 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
c0a0: 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20  ngEnum.UTF8:..  
c0b0: 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
c0c0: 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
c0d0: 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a  Encoding.UTF8;..
c0e0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
c0f0: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
c100: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
c110: 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20  Enum.UTF16LE:.. 
c120: 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
c130: 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
c140: 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64  .Encoding.Unicod
c150: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  e;..          br
c160: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  eak;..        ca
c170: 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
c180: 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45  dingEnum.UTF16BE
c190: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
c1a0: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
c1b0: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69  Text.Encoding.Bi
c1c0: 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d  gEndianUnicode;.
c1d0: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
c1e0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
c1f0: 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74      b1 = convert
c200: 65 72 2e 47 65 74 42 79 74 65 73 28 73 31 29 3b  er.GetBytes(s1);
c210: 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e  ..      b2 = con
c220: 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28  verter.GetBytes(
c230: 73 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  s2);....      re
c240: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
c250: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c260: 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d  _context_collcom
c270: 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  pare_interop(con
c280: 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e  text, b1, b1.Len
c290: 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67  gth, b2, b2.Leng
c2a0: 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  th);..#else..   
c2b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
c2c0: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
c2d0: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
c2e0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
c2f0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
c300: 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61  int ContextColla
c310: 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74  teCompare(Collat
c320: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20  ionEncodingEnum 
c330: 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  enc, IntPtr cont
c340: 65 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20  ext, char[] c1, 
c350: 63 68 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20  char[] c2)..    
c360: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
c370: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62  TANDARD..      b
c380: 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20  yte[] b1;..     
c390: 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20   byte[] b2;..   
c3a0: 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45     System.Text.E
c3b0: 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65  ncoding converte
c3c0: 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  r = null;....   
c3d0: 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d     switch (enc).
c3e0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
c3f0: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
c400: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
c410: 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  8:..          co
c420: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
c430: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
c440: 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  TF8;..          
c450: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
c460: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
c470: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36  codingEnum.UTF16
c480: 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  LE:..          c
c490: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
c4a0: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
c4b0: 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
c4c0: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
c4d0: 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
c4e0: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
c4f0: 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20  TF16BE:..       
c500: 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
c510: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
c520: 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69  ing.BigEndianUni
c530: 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
c540: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d   break;..      }
c550: 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63  ....      b1 = c
c560: 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
c570: 73 28 63 31 29 3b 0d 0a 20 20 20 20 20 20 62 32  s(c1);..      b2
c580: 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74   = converter.Get
c590: 42 79 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20  Bytes(c2);....  
c5a0: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
c5b0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c5c0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63  qlite3_context_c
c5d0: 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72  ollcompare_inter
c5e0: 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20  op(context, b1, 
c5f0: 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62  b1.Length, b2, b
c600: 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73  2.Length);..#els
c610: 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
c620: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
c630: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
c640: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
c650: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
c660: 72 72 69 64 65 20 43 6f 6c 6c 61 74 69 6f 6e 53  rride CollationS
c670: 65 71 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c 61  equence GetColla
c680: 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 53 51 4c  tionSequence(SQL
c690: 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63  iteFunction func
c6a0: 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  , IntPtr context
c6b0: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
c6c0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
c6d0: 20 20 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e 53        CollationS
c6e0: 65 71 75 65 6e 63 65 20 73 65 71 20 3d 20 6e 65  equence seq = ne
c6f0: 77 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65  w CollationSeque
c700: 6e 63 65 28 29 3b 0d 0a 20 20 20 20 20 20 69 6e  nce();..      in
c710: 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e  t len;..      in
c720: 74 20 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 69  t type;..      i
c730: 6e 74 20 65 6e 63 3b 0d 0a 20 20 20 20 20 20 49  nt enc;..      I
c740: 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65  ntPtr p = Unsafe
c750: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c760: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f  lite3_context_co
c770: 6c 6c 73 65 71 5f 69 6e 74 65 72 6f 70 28 63 6f  llseq_interop(co
c780: 6e 74 65 78 74 2c 20 6f 75 74 20 74 79 70 65 2c  ntext, out type,
c790: 20 6f 75 74 20 65 6e 63 2c 20 6f 75 74 20 6c 65   out enc, out le
c7a0: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  n);....      if 
c7b0: 28 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e  (p != null) seq.
c7c0: 4e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72  Name = UTF8ToStr
c7d0: 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20  ing(p, len);..  
c7e0: 20 20 20 20 73 65 71 2e 54 79 70 65 20 3d 20 28      seq.Type = (
c7f0: 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75  CollationTypeEnu
c800: 6d 29 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 73  m)type;..      s
c810: 65 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b  eq._func = func;
c820: 0d 0a 20 20 20 20 20 20 73 65 71 2e 45 6e 63 6f  ..      seq.Enco
c830: 64 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f  ding = (Collatio
c840: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e  nEncodingEnum)en
c850: 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  c;....      retu
c860: 72 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a  rn seq;..#else..
c870: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
c880: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
c890: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
c8a0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
c8b0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c8c0: 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d  de long GetParam
c8d0: 56 61 6c 75 65 42 79 74 65 73 28 49 6e 74 50 74  ValueBytes(IntPt
c8e0: 72 20 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66  r p, int nDataOf
c8f0: 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65  fset, byte[] bDe
c900: 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20  st, int nStart, 
c910: 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20  int nLength)..  
c920: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
c930: 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  len = UnsafeNati
c940: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
c950: 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 29  3_value_bytes(p)
c960: 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66  ;....      // If
c970: 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20   no destination 
c980: 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74  buffer, return t
c990: 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d  he size needed..
c9a0: 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74  .      if (bDest
c9b0: 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
c9c0: 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20   nlen;....      
c9d0: 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c  int nCopied = nL
c9e0: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
c9f0: 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53  if (nCopied + nS
ca00: 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e  tart > bDest.Len
ca10: 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62  gth) nCopied = b
ca20: 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53  Dest.Length - nS
ca30: 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20  tart;..      if 
ca40: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61  (nCopied + nData
ca50: 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e  Offset > nlen) n
ca60: 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20  Copied = nlen - 
ca70: 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a  nDataOffset;....
ca80: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
ca90: 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d  d > 0)..      {.
caa0: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
cab0: 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ptr = UnsafeNati
cac0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
cad0: 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b  3_value_blob(p);
cae0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73  ....        Mars
caf0: 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72  hal.Copy((IntPtr
cb00: 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20  )(ptr.ToInt64() 
cb10: 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20  + nDataOffset), 
cb20: 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e  bDest, nStart, n
cb30: 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20  Copied);..      
cb40: 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  }..      else.. 
cb50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cb60: 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20  nCopied = 0;..  
cb70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
cb80: 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a  eturn nCopied;..
cb90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
cba0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64  ernal override d
cbb0: 6f 75 62 6c 65 20 47 65 74 50 61 72 61 6d 56 61  ouble GetParamVa
cbc0: 6c 75 65 44 6f 75 62 6c 65 28 49 6e 74 50 74 72  lueDouble(IntPtr
cbd0: 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   ptr)..    {..  
cbe0: 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65      double value
cbf0: 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ;..#if !PLATFORM
cc00: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
cc10: 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d  K..      value =
cc20: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
cc30: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
cc40: 75 65 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d  ue_double(ptr);.
cc50: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
cc60: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55  TANDARD..      U
cc70: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
cc80: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
cc90: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
cca0: 70 74 72 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b  ptr, out value);
ccb0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
ccc0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
ccd0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
cce0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
ccf0: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b     return value;
cd00: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
cd10: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
cd20: 20 69 6e 74 20 47 65 74 50 61 72 61 6d 56 61 6c   int GetParamVal
cd30: 75 65 49 6e 74 33 32 28 49 6e 74 50 74 72 20 70  ueInt32(IntPtr p
cd40: 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  tr)..    {..    
cd50: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
cd60: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
cd70: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 70  ite3_value_int(p
cd80: 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
cd90: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
cda0: 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72  ride long GetPar
cdb0: 61 6d 56 61 6c 75 65 49 6e 74 36 34 28 49 6e 74  amValueInt64(Int
cdc0: 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
cdd0: 0a 20 20 20 20 20 20 49 6e 74 36 34 20 76 61 6c  .      Int64 val
cde0: 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ue;..#if !PLATFO
cdf0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
ce00: 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65  ORK..      value
ce10: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
ce20: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
ce30: 61 6c 75 65 5f 69 6e 74 36 34 28 70 74 72 29 3b  alue_int64(ptr);
ce40: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
ce50: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
ce60: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
ce70: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
ce80: 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  e_int64_interop(
ce90: 70 74 72 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b  ptr, out value);
cea0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
ceb0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
cec0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
ced0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
cee0: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b     return value;
cef0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
cf00: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
cf10: 20 73 74 72 69 6e 67 20 47 65 74 50 61 72 61 6d   string GetParam
cf20: 56 61 6c 75 65 54 65 78 74 28 49 6e 74 50 74 72  ValueText(IntPtr
cf30: 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69   ptr)..    {..#i
cf40: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
cf50: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
cf60: 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n;..      return
cf70: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
cf80: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
cf90: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
cfa0: 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 70 74 72  text_interop(ptr
cfb0: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
cfc0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
cfd0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
cfe0: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
cff0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
d000: 76 61 6c 75 65 5f 74 65 78 74 28 70 74 72 29 2c  value_text(ptr),
d010: 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65  ..        Unsafe
d020: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d030: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65  lite3_value_byte
d040: 73 28 70 74 72 29 29 3b 0d 0a 23 65 6e 64 69 66  s(ptr));..#endif
d050: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
d060: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
d070: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 47 65   TypeAffinity Ge
d080: 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28  tParamValueType(
d090: 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20  IntPtr ptr)..   
d0a0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
d0b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d0c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
d0d0: 75 65 5f 74 79 70 65 28 70 74 72 29 3b 0d 0a 20  ue_type(ptr);.. 
d0e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d0f0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
d100: 69 64 20 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e  id ReturnBlob(In
d110: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 62 79  tPtr context, by
d120: 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20  te[] value)..   
d130: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
d140: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d150: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f  lite3_result_blo
d160: 62 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  b(context, value
d170: 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20  , value.Length, 
d180: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
d190: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d1a0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
d1b0: 6f 69 64 20 52 65 74 75 72 6e 44 6f 75 62 6c 65  oid ReturnDouble
d1c0: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
d1d0: 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a   double value)..
d1e0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
d1f0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
d200: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73  EWORK..      Uns
d210: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d220: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
d230: 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20  double(context, 
d240: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
d250: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
d260: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
d270: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d280: 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65  e3_result_double
d290: 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
d2a0: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
d2b0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
d2c0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
d2d0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
d2e0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
d2f0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
d300: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
d310: 74 75 72 6e 45 72 72 6f 72 28 49 6e 74 50 74 72  turnError(IntPtr
d320: 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67   context, string
d330: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
d340: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
d350: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d360: 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63  3_result_error(c
d370: 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76  ontext, ToUTF8(v
d380: 61 6c 75 65 29 2c 20 76 61 6c 75 65 2e 4c 65 6e  alue), value.Len
d390: 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  gth);..    }....
d3a0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d3b0: 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
d3c0: 6e 49 6e 74 33 32 28 49 6e 74 50 74 72 20 63 6f  nInt32(IntPtr co
d3d0: 6e 74 65 78 74 2c 20 69 6e 74 20 76 61 6c 75 65  ntext, int value
d3e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
d3f0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d400: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
d410: 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20  lt_int(context, 
d420: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  value);..    }..
d430: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
d440: 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
d450: 75 72 6e 49 6e 74 36 34 28 49 6e 74 50 74 72 20  urnInt64(IntPtr 
d460: 63 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67 20 76 61  context, long va
d470: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  lue)..    {..#if
d480: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
d490: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
d4a0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
d4b0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
d4c0: 65 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74  esult_int64(cont
d4d0: 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  ext, value);..#e
d4e0: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
d4f0: 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61  DARD..      Unsa
d500: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
d510: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
d520: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  nt64_interop(con
d530: 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29  text, ref value)
d540: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
d550: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
d560: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
d570: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
d580: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
d590: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
d5a0: 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28 49 6e 74  d ReturnNull(Int
d5b0: 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20  Ptr context)..  
d5c0: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
d5d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
d5e0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75  qlite3_result_nu
d5f0: 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  ll(context);..  
d600: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
d610: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
d620: 64 20 52 65 74 75 72 6e 54 65 78 74 28 49 6e 74  d ReturnText(Int
d630: 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72  Ptr context, str
d640: 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ing value)..    
d650: 7b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  {..      byte[] 
d660: 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65  b = ToUTF8(value
d670: 29 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  );..      Unsafe
d680: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d690: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
d6a0: 74 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46  t(context, ToUTF
d6b0: 38 28 76 61 6c 75 65 29 2c 20 62 2e 4c 65 6e 67  8(value), b.Leng
d6c0: 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29  th - 1, (IntPtr)
d6d0: 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  (-1));..    }...
d6e0: 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52  .#if INTEROP_VIR
d6f0: 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20  TUAL_TABLE..    
d700: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
d710: 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65     /// Calls the
d720: 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63   native SQLite c
d730: 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f  ore library in o
d740: 72 64 65 72 20 74 6f 20 63 72 65 61 74 65 20 61  rder to create a
d750: 20 64 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20   disposable..   
d760: 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20 63 6f 6e 74   /// module cont
d770: 61 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65  aining the imple
d780: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76  mentation of a v
d790: 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
d7a0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
d7b0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
d7c0: 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e  m name="module">
d7d0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f  ..    /// The mo
d7e0: 64 75 6c 65 20 6f 62 6a 65 63 74 20 74 6f 20 62  dule object to b
d7f0: 65 20 75 73 65 64 20 77 68 65 6e 20 63 72 65 61  e used when crea
d800: 74 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20  ting the native 
d810: 64 69 73 70 6f 73 61 62 6c 65 20 6d 6f 64 75 6c  disposable modul
d820: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
d830: 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
d840: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
d850: 20 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 53 51   CreateModule(SQ
d860: 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
d870: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
d880: 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
d890: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
d8a0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
d8b0: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
d8c0: 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a  ion("module");..
d8d0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73  ..        if (_s
d8e0: 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql == null)..   
d8f0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
d900: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
d910: 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  on("connection h
d920: 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
d930: 6e 64 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndle");....     
d940: 20 20 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73     SetLoadExtens
d950: 69 6f 6e 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ion(true);..    
d960: 20 20 20 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f      LoadExtensio
d970: 6e 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n(UnsafeNativeMe
d980: 74 68 6f 64 73 2e 53 51 4c 49 54 45 5f 44 4c 4c  thods.SQLITE_DLL
d990: 2c 20 22 73 71 6c 69 74 65 33 5f 76 74 73 68 69  , "sqlite3_vtshi
d9a0: 6d 5f 69 6e 69 74 22 29 3b 0d 0a 0d 0a 20 20 20  m_init");....   
d9b0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 4e 61 6d       IntPtr pNam
d9c0: 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  e = IntPtr.Zero;
d9d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
d9e0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
d9f0: 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d 20          pName = 
da00: 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66  SQLiteString.Utf
da10: 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e  8IntPtrFromStrin
da20: 67 28 6d 6f 64 75 6c 65 2e 4e 61 6d 65 29 3b 0d  g(module.Name);.
da30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  ...            U
da40: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
da50: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ds.sqlite3_modul
da60: 65 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 20 3d  e nativeModule =
da70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
da80: 20 20 6d 6f 64 75 6c 65 2e 43 72 65 61 74 65 4e    module.CreateN
da90: 61 74 69 76 65 4d 6f 64 75 6c 65 28 29 3b 0d 0a  ativeModule();..
daa0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
dab0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
dac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
dad0: 20 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65   (UnsafeNativeMe
dae0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
daf0: 65 61 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f  eate_disposable_
db00: 6d 6f 64 75 6c 65 28 0d 0a 20 20 20 20 20 20 20  module(..       
db10: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71               _sq
db20: 6c 2c 20 70 4e 61 6d 65 2c 20 72 65 66 20 6e 61  l, pName, ref na
db30: 74 69 76 65 4d 6f 64 75 6c 65 2c 20 49 6e 74 50  tiveModule, IntP
db40: 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20 20 20 20  tr.Zero,..      
db50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75                nu
db60: 6c 6c 29 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  ll) != IntPtr.Ze
db70: 72 6f 29 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  ro)..#elif !SQLI
db80: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
db90: 20 20 20 20 20 20 20 20 20 69 66 20 28 55 6e 73           if (Uns
dba0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
dbb0: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
dbc0: 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c  disposable_modul
dbd0: 65 5f 69 6e 74 65 72 6f 70 28 0d 0a 20 20 20 20  e_interop(..    
dbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbf0: 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c 20 6d 6f 64  _sql, pName, mod
dc00: 75 6c 65 2e 43 72 65 61 74 65 4e 61 74 69 76 65  ule.CreateNative
dc10: 4d 6f 64 75 6c 65 49 6e 74 65 72 6f 70 28 29 2c  ModuleInterop(),
dc20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dc30: 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
dc40: 6c 65 2e 69 56 65 72 73 69 6f 6e 2c 20 6e 61 74  le.iVersion, nat
dc50: 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
dc60: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
dc70: 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
dc80: 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 2c 20 6e  dule.xConnect, n
dc90: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73  ativeModule.xBes
dca0: 74 49 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20  tIndex,..       
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
dcc0: 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f  iveModule.xDisco
dcd0: 6e 6e 65 63 74 2c 20 6e 61 74 69 76 65 4d 6f 64  nnect, nativeMod
dce0: 75 6c 65 2e 78 44 65 73 74 72 6f 79 2c 0d 0a 20  ule.xDestroy,.. 
dcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd00: 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
dd10: 78 4f 70 65 6e 2c 20 6e 61 74 69 76 65 4d 6f 64  xOpen, nativeMod
dd20: 75 6c 65 2e 78 43 6c 6f 73 65 2c 0d 0a 20 20 20  ule.xClose,..   
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd40: 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46   nativeModule.xF
dd50: 69 6c 74 65 72 2c 20 6e 61 74 69 76 65 4d 6f 64  ilter, nativeMod
dd60: 75 6c 65 2e 78 4e 65 78 74 2c 0d 0a 20 20 20 20  ule.xNext,..    
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd80: 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f  nativeModule.xEo
dd90: 66 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  f, nativeModule.
dda0: 78 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20 20 20 20  xColumn,..      
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
ddc0: 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49  tiveModule.xRowI
ddd0: 64 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  d, nativeModule.
dde0: 78 55 70 64 61 74 65 2c 0d 0a 20 20 20 20 20 20  xUpdate,..      
ddf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
de00: 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69  tiveModule.xBegi
de10: 6e 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  n, nativeModule.
de20: 78 53 79 6e 63 2c 0d 0a 20 20 20 20 20 20 20 20  xSync,..        
de30: 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
de40: 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74  veModule.xCommit
de50: 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  , nativeModule.x
de60: 52 6f 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Rollback,..     
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
de80: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e  ativeModule.xFin
de90: 64 46 75 6e 63 74 69 6f 6e 2c 20 6e 61 74 69 76  dFunction, nativ
dea0: 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 2c  eModule.xRename,
deb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dec0: 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
ded0: 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 2c 20 6e  le.xSavepoint, n
dee0: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c  ativeModule.xRel
def0: 65 61 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ease,..         
df00: 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
df10: 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63  eModule.xRollbac
df20: 6b 54 6f 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  kTo, IntPtr.Zero
df30: 2c 20 6e 75 6c 6c 29 20 21 3d 20 49 6e 74 50 74  , null) != IntPt
df40: 72 2e 5a 65 72 6f 29 0d 0a 23 65 6c 73 65 0d 0a  r.Zero)..#else..
df50: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
df60: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
df70: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
df80: 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 20 21 50  ..#endif..#if !P
df90: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
dfa0: 52 41 4d 45 57 4f 52 4b 20 7c 7c 20 21 53 51 4c  RAMEWORK || !SQL
dfb0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
dfc0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
dfe0: 28 5f 6d 6f 64 75 6c 65 73 20 3d 3d 20 6e 75 6c  (_modules == nul
dff0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
e000: 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73          _modules
e010: 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72   = new Dictionar
e020: 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65  y<string, SQLite
e030: 4d 6f 64 75 6c 65 3e 28 29 3b 0d 0a 0d 0a 20 20  Module>();....  
e040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d                _m
e050: 6f 64 75 6c 65 73 2e 41 64 64 28 6d 6f 64 75 6c  odules.Add(modul
e060: 65 2e 4e 61 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b  e.Name, module);
e070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
e090: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
e0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e0b0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
e0c0: 74 65 45 78 63 65 70 74 69 6f 6e 28 47 65 74 4c  teException(GetL
e0d0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
e0e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
e0f0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
e100: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
e110: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e120: 20 20 20 20 20 20 20 20 69 66 20 28 70 4e 61 6d          if (pNam
e130: 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  e != IntPtr.Zero
e140: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e160: 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46    SQLiteMemory.F
e170: 72 65 65 28 70 4e 61 6d 65 29 3b 0d 0a 20 20 20  ree(pName);..   
e180: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4e 61               pNa
e190: 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  me = IntPtr.Zero
e1a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
e1b0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
e1c0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
e1d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
e1e0: 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76   Calls the nativ
e1f0: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
e200: 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74  brary in order t
e210: 6f 20 63 6c 65 61 6e 75 70 20 74 68 65 20 72 65  o cleanup the re
e220: 73 6f 75 72 63 65 73 0d 0a 20 20 20 20 2f 2f 2f  sources..    ///
e230: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
e240: 20 61 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69   a module contai
e250: 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65  ning the impleme
e260: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72  ntation of a vir
e270: 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
e280: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
e290: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
e2a0: 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
e2b0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75      /// The modu
e2c0: 6c 65 20 6f 62 6a 65 63 74 20 70 72 65 76 69 6f  le object previo
e2d0: 75 73 6c 79 20 70 61 73 73 65 64 20 74 6f 20 74  usly passed to t
e2e0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43 72  he <see cref="Cr
e2f0: 65 61 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a  eateModule" />..
e300: 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d      /// method..
e310: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
e320: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
e330: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 44 69  override void Di
e340: 73 70 6f 73 65 4d 6f 64 75 6c 65 28 53 51 4c 69  sposeModule(SQLi
e350: 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 29  teModule module)
e360: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
e370: 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
e380: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
e390: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
e3a0: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
e3b0: 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a  n("module");....
e3c0: 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44          module.D
e3d0: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 7d  ispose();..    }
e3e0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
e3f0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
e400: 65 20 49 6e 74 50 74 72 20 41 67 67 72 65 67 61  e IntPtr Aggrega
e410: 74 65 43 6f 6e 74 65 78 74 28 49 6e 74 50 74 72  teContext(IntPtr
e420: 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b   context)..    {
e430: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
e440: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
e450: 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65  ds.sqlite3_aggre
e460: 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e  gate_context(con
e470: 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20 20 7d  text, 1);..    }
e480: 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f  ....#if INTEROP_
e490: 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20  VIRTUAL_TABLE.. 
e4a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
e4b0: 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20  ..    /// Calls 
e4c0: 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74  the native SQLit
e4d0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69  e core library i
e4e0: 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61  n order to decla
e4f0: 72 65 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  re a virtual tab
e500: 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20 72  le..    /// in r
e510: 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c  esponse to a cal
e520: 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73 65 65 20  l into the <see 
e530: 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
e540: 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
e550: 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f  e" />..    /// o
e560: 72 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  r <see cref="ISQ
e570: 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
e580: 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69  .xConnect" /> vi
e590: 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74 68  rtual table meth
e5a0: 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ods...    /// </
e5b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
e5c0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
e5d0: 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  odule">..    ///
e5e0: 20 54 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   The virtual tab
e5f0: 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61 74 20 69  le module that i
e600: 73 20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73 69  s to be responsi
e610: 62 6c 65 20 66 6f 72 20 74 68 65 20 76 69 72 74  ble for the virt
e620: 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  ual table..    /
e630: 2f 2f 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65  // being declare
e640: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
e650: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
e660: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 53 71  aram name="strSq
e670: 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  l">..    /// The
e680: 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
e690: 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
e6a0: 6d 65 6e 74 20 64 65 73 63 72 69 62 69 6e 67 20  ment describing 
e6b0: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
e6c0: 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62 65  e to..    /// be
e6d0: 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20   declared...    
e6e0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
e6f0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
e700: 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20  e="error">..    
e710: 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73  /// Upon success
e720: 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  , the contents o
e730: 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  f this parameter
e740: 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 20   are undefined. 
e750: 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a   Upon failure,..
e760: 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c      /// it shoul
e770: 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70  d contain an app
e780: 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d  ropriate error m
e790: 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f  essage...    ///
e7a0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
e7b0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
e7c0: 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
e7d0: 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
e7e0: 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ode...    /// </
e7f0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
e800: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
e810: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
e820: 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c 54 61  DeclareVirtualTa
e830: 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 53 51  ble(..        SQ
e840: 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
e850: 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  e,..        stri
e860: 6e 67 20 73 74 72 53 71 6c 2c 0d 0a 20 20 20 20  ng strSql,..    
e870: 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
e880: 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29 0d  rror..        ).
e890: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
e8a0: 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  if (_sql == null
e8b0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
e8c0: 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
e8d0: 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  = "connection ha
e8e0: 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
e8f0: 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  dle";..         
e900: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
e910: 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
e920: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
e930: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 53         IntPtr pS
e940: 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  ql = IntPtr.Zero
e950: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79  ;....        try
e960: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
e970: 20 20 20 20 20 20 20 20 20 70 53 71 6c 20 3d 20           pSql = 
e980: 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66  SQLiteString.Utf
e990: 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e  8IntPtrFromStrin
e9a0: 67 28 73 74 72 53 71 6c 29 3b 0d 0a 0d 0a 20 20  g(strSql);....  
e9b0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
e9c0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
e9d0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e9e0: 73 2e 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  s.sqlite3_declar
e9f0: 65 5f 76 74 61 62 28 0d 0a 20 20 20 20 20 20 20  e_vtab(..       
ea00: 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70           _sql, p
ea10: 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Sql);....       
ea20: 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53       if ((n == S
ea30: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
ea40: 6b 29 20 26 26 20 28 6d 6f 64 75 6c 65 20 21 3d  k) && (module !=
ea50: 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
ea60: 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
ea70: 44 65 63 6c 61 72 65 64 20 3d 20 74 72 75 65 3b  Declared = true;
ea80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ea90: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
eaa0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72  rrorCode.Ok) err
eab0: 6f 72 20 3d 20 47 65 74 4c 61 73 74 45 72 72 6f  or = GetLastErro
eac0: 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  r();....        
ead0: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20      return n;.. 
eae0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
eaf0: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
eb00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
eb10: 20 20 69 66 20 28 70 53 71 6c 20 21 3d 20 49 6e    if (pSql != In
eb20: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
eb30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
eb40: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
eb50: 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 53 71  eMemory.Free(pSq
eb60: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l);..           
eb70: 20 20 20 20 20 70 53 71 6c 20 3d 20 49 6e 74 50       pSql = IntP
eb80: 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
eb90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
eba0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
ebb0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
ebc0: 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68      /// Calls th
ebd0: 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20  e native SQLite 
ebe0: 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20  core library in 
ebf0: 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61 72 65  order to declare
ec00: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
ec10: 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69  ..    /// functi
ec20: 6f 6e 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  on in response t
ec30: 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68  o a call into th
ec40: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
ec50: 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
ec60: 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20  .xCreate" />..  
ec70: 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72    /// or <see cr
ec80: 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
ec90: 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74  eModule.xConnect
eca0: 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 74 61 62  " /> virtual tab
ecb0: 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20  le methods...   
ecc0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
ecd0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
ece0: 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
ecf0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69 72 74      /// The virt
ed00: 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65  ual table module
ed10: 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20 72   that is to be r
ed20: 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74  esponsible for t
ed30: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
ed40: 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69  ..    /// functi
ed50: 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65  on being declare
ed60: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
ed70: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
ed80: 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d  aram name="argum
ed90: 65 6e 74 43 6f 75 6e 74 22 3e 0d 0a 20 20 20 20  entCount">..    
eda0: 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
edb0: 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
edc0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e  he function bein
edd0: 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20  g declared...   
ede0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
edf0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
ee00: 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20  me="name">..    
ee10: 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  /// The name of 
ee20: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69  the function bei
ee30: 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20  ng declared...  
ee40: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
ee50: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
ee60: 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20  ame="error">..  
ee70: 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65    /// Upon succe
ee80: 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73  ss, the contents
ee90: 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65 74   of this paramet
eea0: 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  er are undefined
eeb0: 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c  .  Upon failure,
eec0: 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f  ..    /// it sho
eed0: 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61  uld contain an a
eee0: 70 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72  ppropriate error
eef0: 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f   message...    /
ef00: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
ef10: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
ef20: 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
ef30: 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
ef40: 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   code...    /// 
ef50: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
ef60: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
ef70: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
ef80: 65 20 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c  e DeclareVirtual
ef90: 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
efa0: 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20     SQLiteModule 
efb0: 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20  module,..       
efc0: 20 69 6e 74 20 61 72 67 75 6d 65 6e 74 43 6f 75   int argumentCou
efd0: 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  nt,..        str
efe0: 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
eff0: 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
f000: 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ror..        )..
f010: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
f020: 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29  f (_sql == null)
f030: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
f040: 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
f050: 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73   "connection has
f060: 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
f070: 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  le";..          
f080: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
f090: 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
f0a0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
f0b0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 4e 61        IntPtr pNa
f0c0: 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  me = IntPtr.Zero
f0d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79  ;....        try
f0e0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
f0f0: 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d           pName =
f100: 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74   SQLiteString.Ut
f110: 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
f120: 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ng(name);....   
f130: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
f140: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
f150: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
f160: 2e 73 71 6c 69 74 65 33 5f 6f 76 65 72 6c 6f 61  .sqlite3_overloa
f170: 64 5f 66 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  d_function(..   
f180: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71               _sq
f190: 6c 2c 20 70 4e 61 6d 65 2c 20 61 72 67 75 6d 65  l, pName, argume
f1a0: 6e 74 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ntCount);....   
f1b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
f1c0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
f1d0: 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47 65  e.Ok) error = Ge
f1e0: 74 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d  tLastError();...
f1f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
f200: 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20  urn n;..        
f210: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
f220: 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ly..        {.. 
f230: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
f240: 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a  Name != IntPtr.Z
f250: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
f260: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f270: 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72       SQLiteMemor
f280: 79 2e 46 72 65 65 28 70 4e 61 6d 65 29 3b 0d 0a  y.Free(pName);..
f290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2a0: 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a  pName = IntPtr.Z
f2b0: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
f2c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
f2d0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
f2e0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
f2f0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62  y>..    /// Enab
f300: 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20  les or disabled 
f310: 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e  extension loadin
f320: 67 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a 20 20  g by SQLite...  
f330: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
f340: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
f350: 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d   name="bOnOff">.
f360: 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 74 6f  .    /// True to
f370: 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67 20   enable loading 
f380: 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20 66  of extensions, f
f390: 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 2e  alse to disable.
f3a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
f3b0: 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
f3c0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
f3d0: 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28  etLoadExtension(
f3e0: 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20  bool bOnOff)..  
f3f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
f400: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
f410: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f420: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 6e 61  hods.sqlite3_ena
f430: 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble_load_extensi
f440: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
f450: 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f   _sql, (bOnOff ?
f460: 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20   -1 : 0));....  
f470: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
f480: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
f490: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
f4a0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
f4b0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
f4c0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
f4d0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
f4e0: 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20 53 51    /// Loads a SQ
f4f0: 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 20 6c  Lite extension l
f500: 69 62 72 61 72 79 20 66 72 6f 6d 20 74 68 65 20  ibrary from the 
f510: 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20  named file...   
f520: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
f530: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
f540: 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e  name="fileName">
f550: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61  ..    /// The na
f560: 6d 65 20 6f 66 20 74 68 65 20 64 79 6e 61 6d 69  me of the dynami
f570: 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72 79 20 66  c link library f
f580: 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ile containing t
f590: 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20  he extension... 
f5a0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
f5b0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
f5c0: 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d 65 22 3e  name="procName">
f5d0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61  ..    /// The na
f5e0: 6d 65 20 6f 66 20 74 68 65 20 65 78 70 6f 72 74  me of the export
f5f0: 65 64 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 64  ed function used
f600: 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74   to initialize t
f610: 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20  he extension... 
f620: 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c 2c 20     /// If null, 
f630: 74 68 65 20 64 65 66 61 75 6c 74 20 22 73 71 6c  the default "sql
f640: 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69  ite3_extension_i
f650: 6e 69 74 22 20 77 69 6c 6c 20 62 65 20 75 73 65  nit" will be use
f660: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
f670: 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
f680: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
f690: 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 73   LoadExtension(s
f6a0: 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 20  tring fileName, 
f6b0: 73 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d 65 29  string procName)
f6c0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
f6d0: 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d 3d   if (fileName ==
f6e0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
f6f0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
f700: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
f710: 69 6f 6e 28 22 66 69 6c 65 4e 61 6d 65 22 29 3b  ion("fileName");
f720: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
f730: 74 72 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50  tr pError = IntP
f740: 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
f750: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
f760: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f770: 62 79 74 65 5b 5d 20 75 74 66 38 46 69 6c 65 4e  byte[] utf8FileN
f780: 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69  ame = UTF8Encodi
f790: 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73  ng.UTF8.GetBytes
f7a0: 28 66 69 6c 65 4e 61 6d 65 20 2b 20 27 5c 30 27  (fileName + '\0'
f7b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
f7c0: 62 79 74 65 5b 5d 20 75 74 66 38 50 72 6f 63 4e  byte[] utf8ProcN
f7d0: 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ame = null;.... 
f7e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
f7f0: 72 6f 63 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  rocName != null)
f800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f810: 20 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d    utf8ProcName =
f820: 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54   UTF8Encoding.UT
f830: 46 38 2e 47 65 74 42 79 74 65 73 28 70 72 6f 63  F8.GetBytes(proc
f840: 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 0d  Name + '\0');...
f850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
f860: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
f870: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f880: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 61  hods.sqlite3_loa
f890: 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20  d_extension(..  
f8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
f8b0: 71 6c 2c 20 75 74 66 38 46 69 6c 65 4e 61 6d 65  ql, utf8FileName
f8c0: 2c 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 2c 20  , utf8ProcName, 
f8d0: 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a 0d 0a  ref pError);....
f8e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
f8f0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
f900: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
f910: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
f920: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
f930: 69 6f 6e 28 6e 2c 20 55 54 46 38 54 6f 53 74 72  ion(n, UTF8ToStr
f940: 69 6e 67 28 70 45 72 72 6f 72 2c 20 2d 31 29 29  ing(pError, -1))
f950: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
f960: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
f970: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f980: 20 20 20 20 20 20 69 66 20 28 70 45 72 72 6f 72        if (pError
f990: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
f9a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
f9b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f9c0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f9d0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 72 65  hods.sqlite3_fre
f9e0: 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20  e(pError);..    
f9f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 45 72 72              pErr
fa00: 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  or = IntPtr.Zero
fa10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
fa20: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
fa30: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e   }....    /// En
fa40: 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65  ables or disable
fa50: 64 20 65 78 74 65 6e 64 65 64 20 72 65 73 75 6c  d extended resul
fa60: 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e 65 64  t codes returned
fa70: 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20 20 20   by SQLite..    
fa80: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
fa90: 65 20 76 6f 69 64 20 53 65 74 45 78 74 65 6e 64  e void SetExtend
faa0: 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28 62 6f  edResultCodes(bo
fab0: 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20  ol bOnOff)..    
fac0: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
fad0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
fae0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
faf0: 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65  .sqlite3_extende
fb00: 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28 0d  d_result_codes(.
fb10: 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c  .          _sql,
fb20: 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20   (bOnOff ? -1 : 
fb30: 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  0));....      if
fb40: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
fb50: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
fb60: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
fb70: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
fb80: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
fb90: 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68  .    /// Gets th
fba0: 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65 72  e last SQLite er
fbb0: 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e  ror code..    in
fbc0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
fbd0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
fbe0: 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20  ResultCode()..  
fbf0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
fc00: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
fc10: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 72  thods.sqlite3_er
fc20: 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20  rcode(_sql);..  
fc30: 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74    }..    /// Get
fc40: 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74  s the last SQLit
fc50: 65 20 65 78 74 65 6e 64 65 64 20 65 72 72 6f 72  e extended error
fc60: 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72   code..    inter
fc70: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
fc80: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 45 78 74  iteErrorCode Ext
fc90: 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65 28  endedResultCode(
fca0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
fcb0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
fcc0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
fcd0: 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
fce0: 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ode(_sql);..    
fcf0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64  }....    /// Add
fd00: 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76   a log message v
fd10: 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 73 71  ia the SQLite sq
fd20: 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66  lite3_log interf
fd30: 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ace...    intern
fd40: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
fd50: 20 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69   LogMessage(SQLi
fd60: 74 65 45 72 72 6f 72 43 6f 64 65 20 69 45 72 72  teErrorCode iErr
fd70: 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65  Code, string zMe
fd80: 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  ssage)..    {.. 
fd90: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
fda0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
fdb0: 5f 6c 6f 67 28 69 45 72 72 43 6f 64 65 2c 20 54  _log(iErrCode, T
fdc0: 6f 55 54 46 38 28 7a 4d 65 73 73 61 67 65 29 29  oUTF8(zMessage))
fdd0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20  ;..    }....#if 
fde0: 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 0d 0a 20  INTEROP_CODEC.. 
fdf0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
fe00: 72 69 64 65 20 76 6f 69 64 20 53 65 74 50 61 73  ride void SetPas
fe10: 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 70 61 73  sword(byte[] pas
fe20: 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20  swordBytes)..   
fe30: 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
fe40: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
fe50: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
fe60: 73 2e 73 71 6c 69 74 65 33 5f 6b 65 79 28 5f 73  s.sqlite3_key(_s
fe70: 71 6c 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65  ql, passwordByte
fe80: 73 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65 73  s, passwordBytes
fe90: 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20  .Length);..     
fea0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
feb0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
fec0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
fed0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
fee0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
fef0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
ff00: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
ff10: 20 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64 28   ChangePassword(
ff20: 62 79 74 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f  byte[] newPasswo
ff30: 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d  rdBytes)..    {.
ff40: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
ff50: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
ff60: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
ff70: 71 6c 69 74 65 33 5f 72 65 6b 65 79 28 5f 73 71  qlite3_rekey(_sq
ff80: 6c 2c 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79  l, newPasswordBy
ff90: 74 65 73 2c 20 28 6e 65 77 50 61 73 73 77 6f 72  tes, (newPasswor
ffa0: 64 42 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20  dBytes == null) 
ffb0: 3f 20 30 20 3a 20 6e 65 77 50 61 73 73 77 6f 72  ? 0 : newPasswor
ffc0: 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d  dBytes.Length);.
ffd0: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
ffe0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
fff0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
10000 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
10010 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
10020 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66  ;..    }..#endif
10030 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
10040 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
10050 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c  etUpdateHook(SQL
10060 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  iteUpdateCallbac
10070 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
10080 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
10090 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
100a0 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f 73  3_update_hook(_s
100b0 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
100c0 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
100d0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
100e0 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
100f0 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74  CommitHook(SQLit
10100 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20  eCommitCallback 
10110 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
10120 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
10130 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10140 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c  commit_hook(_sql
10150 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
10160 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ero);..    }....
10170 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10180 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 72  rride void SetTr
10190 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69  aceCallback(SQLi
101a0 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20  teTraceCallback 
101b0 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
101c0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
101d0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
101e0 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e 63  trace(_sql, func
101f0 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
10200 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
10210 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10220 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b  void SetRollback
10230 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62  Hook(SQLiteRollb
10240 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  ackCallback func
10250 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
10260 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10270 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c 6c  ods.sqlite3_roll
10280 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20  back_hook(_sql, 
10290 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
102a0 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
102b0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
102c0 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20  .    /// Allows 
102d0 74 68 65 20 73 65 74 74 69 6e 67 20 6f 66 20 61  the setting of a
102e0 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63   logging callbac
102f0 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20 53 51 4c  k invoked by SQL
10300 69 74 65 20 77 68 65 6e 20 61 0d 0a 20 20 20 20  ite when a..    
10310 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f 63  /// log event oc
10320 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20  curs.  Only one 
10330 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65 20  callback may be 
10340 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69 73  set.  If NULL is
10350 20 70 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f 2f   passed,..    //
10360 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 61  / the logging ca
10370 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72 65 67 69  llback is unregi
10380 73 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  stered...    ///
10390 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
103a0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
103b0 3d 22 66 75 6e 63 22 3e 54 68 65 20 63 61 6c 6c  ="func">The call
103c0 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f  back function to
103d0 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e   invoke.</param>
103e0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
103f0 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65 73  ns>Returns a res
10400 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e  ult code</return
10410 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
10420 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
10430 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f 67  ErrorCode SetLog
10440 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c  Callback(SQLiteL
10450 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ogCallback func)
10460 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
10470 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
10480 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
10490 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
104a0 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a 20  3_config_log(.. 
104b0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
104c0 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53  eConfigOpsEnum.S
104d0 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47  QLITE_CONFIG_LOG
104e0 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
104f0 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ero);....       
10500 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20   return rc;..   
10510 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
10520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10570 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
10580 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
10590 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20      /// Creates 
105a0 61 20 6e 65 77 20 53 51 4c 69 74 65 20 62 61 63  a new SQLite bac
105b0 6b 75 70 20 6f 62 6a 65 63 74 20 62 61 73 65 64  kup object based
105c0 20 6f 6e 20 74 68 65 20 70 72 6f 76 69 64 65 64   on the provided
105d0 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20   destination..  
105e0 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 63    /// database c
105f0 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
10600 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
10610 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74 68  connection is th
10620 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 61  e one..    /// a
10630 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
10640 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 65  his object.  The
10650 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73 74   source and dest
10660 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65  ination database
10670 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63  ..    /// connec
10680 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20  tions cannot be 
10690 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20 2f  the same...    /
106a0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
106b0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
106c0 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68 65  me="destCnn">The
106d0 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
106e0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
106f0 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
10700 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
10710 64 65 73 74 4e 61 6d 65 22 3e 54 68 65 20 64 65  destName">The de
10720 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
10730 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e  se name.</param>
10740 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
10750 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d   name="sourceNam
10760 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64 61  e">The source da
10770 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61  tabase name.</pa
10780 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
10790 65 74 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c 79  eturns>The newly
107a0 20 63 72 65 61 74 65 64 20 62 61 63 6b 75 70 20   created backup 
107b0 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73  object.</returns
107c0 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
107d0 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 42  override SQLiteB
107e0 61 63 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a 65  ackup Initialize
107f0 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
10800 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
10810 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20 20  n destCnn,..    
10820 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 74 4e      string destN
10830 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ame,..        st
10840 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65 0d  ring sourceName.
10850 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
10860 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  {..        if (d
10870 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  estCnn == null).
10880 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
10890 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
108a0 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65  ullException("de
108b0 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20  stCnn");....    
108c0 20 20 20 20 69 66 20 28 64 65 73 74 4e 61 6d 65      if (destName
108d0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
108e0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
108f0 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
10900 65 70 74 69 6f 6e 28 22 64 65 73 74 4e 61 6d 65  eption("destName
10910 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
10920 66 20 28 73 6f 75 72 63 65 4e 61 6d 65 20 3d 3d  f (sourceName ==
10930 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
10940 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
10950 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
10960 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d 65 22  ion("sourceName"
10970 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
10980 4c 69 74 65 33 20 64 65 73 74 53 71 6c 69 74 65  Lite3 destSqlite
10990 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73 71 6c  3 = destCnn._sql
109a0 20 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a   as SQLite3;....
109b0 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74          if (dest
109c0 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c 29  Sqlite3 == null)
109d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
109e0 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
109f0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
10a00 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73              "Des
10a10 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  tination connect
10a20 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61 70 70  ion has no wrapp
10a30 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  er.",..         
10a40 20 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22         "destCnn"
10a50 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
10a60 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
10a70 6e 64 6c 65 20 64 65 73 74 48 61 6e 64 6c 65 20  ndle destHandle 
10a80 3d 20 64 65 73 74 53 71 6c 69 74 65 33 2e 5f 73  = destSqlite3._s
10a90 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ql;....        i
10aa0 66 20 28 64 65 73 74 48 61 6e 64 6c 65 20 3d 3d  f (destHandle ==
10ab0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
10ac0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
10ad0 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28  gumentException(
10ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10af0 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63    "Destination c
10b00 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e  onnection has an
10b10 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
10b20 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
10b30 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d      "destCnn");.
10b40 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
10b50 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c  eConnectionHandl
10b60 65 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d  e sourceHandle =
10b70 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   _sql;....      
10b80 20 20 69 66 20 28 73 6f 75 72 63 65 48 61 6e 64    if (sourceHand
10b90 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
10ba0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
10bb0 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
10bc0 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
10bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
10be0 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74 69 6f  Source connectio
10bf0 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  n has an invalid
10c00 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
10c10 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 44         byte[] zD
10c20 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38  estName = ToUTF8
10c30 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20 20 20  (destName);..   
10c40 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 53 6f 75       byte[] zSou
10c50 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38  rceName = ToUTF8
10c60 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d  (sourceName);...
10c70 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
10c80 61 63 6b 75 70 48 61 6e 64 6c 65 20 62 61 63 6b  ackupHandle back
10c90 75 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b  upHandle = null;
10ca0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
10cb0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
10cc0 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
10cd0 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
10ce0 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
10cf0 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65  ly /* NOTE: Thre
10d00 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65  ad.Abort() prote
10d10 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20  ction. */..     
10d20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10d30 20 20 49 6e 74 50 74 72 20 62 61 63 6b 75 70 20    IntPtr backup 
10d40 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
10d50 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
10d60 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20 20 20  ckup_init(..    
10d70 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 74              dest
10d80 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d  Handle, zDestNam
10d90 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c  e, sourceHandle,
10da0 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a   zSourceName);..
10db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
10dc0 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50   (backup == IntP
10dd0 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
10de0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
10df0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
10e00 69 6f 6e 28 52 65 73 75 6c 74 43 6f 64 65 28 29  ion(ResultCode()
10e10 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
10e20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
10e30 20 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d    backupHandle =
10e40 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63 6b 75   new SQLiteBacku
10e50 70 48 61 6e 64 6c 65 28 64 65 73 74 48 61 6e 64  pHandle(destHand
10e60 6c 65 2c 20 62 61 63 6b 75 70 29 3b 0d 0a 20 20  le, backup);..  
10e70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
10e80 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51     return new SQ
10e90 4c 69 74 65 42 61 63 6b 75 70 28 0d 0a 20 20 20  LiteBackup(..   
10ea0 20 20 20 20 20 20 20 20 20 74 68 69 73 2c 20 62           this, b
10eb0 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64 65 73  ackupHandle, des
10ec0 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61  tHandle, zDestNa
10ed0 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65  me, sourceHandle
10ee0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a  ,..            z
10ef0 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 20 20  SourceName);..  
10f00 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
10f10 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
10f20 2f 20 43 6f 70 69 65 73 20 75 70 20 74 6f 20 4e  / Copies up to N
10f30 20 70 61 67 65 73 20 66 72 6f 6d 20 74 68 65 20   pages from the 
10f40 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
10f50 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69  to the destinati
10f60 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61  on..    /// data
10f70 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 20  base associated 
10f80 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
10f90 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  ed backup object
10fa0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
10fb0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
10fc0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
10fd0 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
10fe0 62 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f 70  bject to use.</p
10ff0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
11000 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61 67  param name="nPag
11010 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
11020 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
11030 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61 74 69   to copy, negati
11040 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20 72  ve to copy all r
11050 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73 2e 0d  emaining pages..
11060 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
11070 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
11080 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e 0d  m name="retry">.
11090 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f 20  .    /// Set to 
110a0 74 72 75 65 20 69 66 20 74 68 65 20 6f 70 65 72  true if the oper
110b0 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62  ation needs to b
110c0 65 20 72 65 74 72 69 65 64 20 64 75 65 20 74 6f  e retried due to
110d0 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f   database..    /
110e0 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75 65  // locking issue
110f0 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 73 65  s; otherwise, se
11100 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20 20 20  t to false...   
11110 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
11120 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
11130 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69  ..    /// True i
11140 66 20 74 68 65 72 65 20 61 72 65 20 6d 6f 72 65  f there are more
11150 20 70 61 67 65 73 20 74 6f 20 62 65 20 63 6f 70   pages to be cop
11160 69 65 64 2c 20 66 61 6c 73 65 20 6f 74 68 65 72  ied, false other
11170 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  wise...    /// <
11180 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
11190 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
111a0 20 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75 70   bool StepBackup
111b0 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
111c0 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 2c 0d  eBackup backup,.
111d0 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 50 61  .        int nPa
111e0 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 6f 75 74  ge,..        out
111f0 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20 20 20   bool retry..   
11200 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
11210 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 66         retry = f
11220 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
11230 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e   if (backup == n
11240 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
11250 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
11260 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
11270 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a  n("backup");....
11280 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
11290 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c  ckupHandle handl
112a0 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69  e = backup._sqli
112b0 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20  te_backup;....  
112c0 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
112d0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
112e0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
112f0 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
11300 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
11310 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
11320 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
11330 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
11340 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
11350 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74   IntPtr handlePt
11360 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
11370 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
11380 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  ePtr == IntPtr.Z
11390 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
113a0 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
113b0 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
113c0 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
113d0 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
113e0 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
113f0 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69  valid handle poi
11400 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  nter.");....    
11410 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
11420 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
11430 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
11440 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28  te3_backup_step(
11450 68 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61 67 65  handlePtr, nPage
11460 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 61 63 6b  );..        back
11470 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 20 3d  up._stepResult =
11480 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 76   n; /* NOTE: Sav
11490 65 20 66 6f 72 20 75 73 65 20 62 79 20 46 69 6e  e for use by Fin
114a0 69 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d  ishBackup. */...
114b0 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d  .        if (n =
114c0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
114d0 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b  e.Ok)..        {
114e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
114f0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
11500 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
11510 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  lse if (n == SQL
11520 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73  iteErrorCode.Bus
11530 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  y)..        {.. 
11540 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72 79             retry
11550 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
11560 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
11570 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
11580 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
11590 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
115a0 43 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20  Code.Locked)..  
115b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
115c0 20 20 20 20 20 72 65 74 72 79 20 3d 20 74 72 75       retry = tru
115d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
115e0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
115f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11600 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
11610 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44  QLiteErrorCode.D
11620 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  one)..        {.
11630 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
11640 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
11650 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
11660 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lse..        {..
11670 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
11680 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
11690 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
116a0 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
116b0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
116c0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
116d0 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
116e0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
116f0 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20  pages remaining 
11700 74 6f 20 62 65 20 63 6f 70 69 65 64 20 66 72 6f  to be copied fro
11710 6d 20 74 68 65 20 73 6f 75 72 63 65 0d 0a 20 20  m the source..  
11720 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 74    /// database t
11730 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f  o the destinatio
11740 6e 20 64 61 74 61 62 61 73 65 20 61 73 73 6f 63  n database assoc
11750 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73  iated with the s
11760 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f  pecified..    //
11770 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e  / backup object.
11780 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
11790 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
117a0 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75  aram name="backu
117b0 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62  p">The backup ob
117c0 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f  ject to check.</
117d0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
117e0 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d  <returns>The num
117f0 62 65 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d  ber of pages rem
11800 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70  aining to be cop
11810 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ied.</returns>..
11820 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
11830 72 72 69 64 65 20 69 6e 74 20 52 65 6d 61 69 6e  rride int Remain
11840 69 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  ingBackup(..    
11850 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
11860 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20   backup..       
11870 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
11880 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
11890 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
118a0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
118b0 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
118c0 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
118d0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
118e0 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
118f0 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
11900 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
11910 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
11920 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
11930 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
11940 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
11950 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
11960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
11970 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
11980 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
11990 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
119a0 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
119b0 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
119c0 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
119d0 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72  dlePtr == IntPtr
119e0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
119f0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
11a00 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
11a10 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
11a20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
11a30 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
11a40 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
11a50 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20  ointer.");....  
11a60 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
11a70 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
11a80 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  .sqlite3_backup_
11a90 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64 6c 65  remaining(handle
11aa0 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  Ptr);..    }....
11ab0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
11ac0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
11ad0 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns the total num
11ae0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
11af0 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  the source datab
11b00 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  ase associated..
11b10 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 65      /// with the
11b20 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b 75   specified backu
11b30 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f  p object...    /
11b40 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
11b50 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
11b60 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
11b70 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
11b80 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d   check.</param>.
11b90 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
11ba0 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s>The total numb
11bb0 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
11bc0 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
11bd0 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  se.</returns>.. 
11be0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
11bf0 72 69 64 65 20 69 6e 74 20 50 61 67 65 43 6f 75  ride int PageCou
11c00 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  ntBackup(..     
11c10 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20     SQLiteBackup 
11c20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20  backup..        
11c30 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
11c40 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
11c50 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
11c60 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
11c70 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
11c80 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
11c90 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
11ca0 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
11cb0 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
11cc0 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
11cd0 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
11ce0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
11cf0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
11d00 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
11d10 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
11d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
11d30 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
11d40 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
11d50 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
11d60 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50    IntPtr handleP
11d70 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
11d80 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
11d90 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e  lePtr == IntPtr.
11da0 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
11db0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
11dc0 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
11dd0 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
11de0 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
11df0 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
11e00 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f  nvalid handle po
11e10 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20  inter.");....   
11e20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
11e30 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
11e40 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 70  sqlite3_backup_p
11e50 61 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c 65 50  agecount(handleP
11e60 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
11e70 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
11e80 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74 72 6f  ..    /// Destro
11e90 79 73 20 74 68 65 20 62 61 63 6b 75 70 20 6f 62  ys the backup ob
11ea0 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62 61  ject, rolling ba
11eb0 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20 74 68  ck any backup th
11ec0 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20 20  at may be in..  
11ed0 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d 0a    /// progess...
11ee0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
11ef0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
11f00 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22  am name="backup"
11f10 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65  >The backup obje
11f20 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c 2f  ct to destroy.</
11f30 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
11f40 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
11f50 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70 28  id FinishBackup(
11f60 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
11f70 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20  Backup backup.. 
11f80 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
11f90 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63  .        if (bac
11fa0 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  kup == null)..  
11fb0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
11fc0 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
11fd0 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75  Exception("backu
11fe0 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p");....        
11ff0 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
12000 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b  le handle = back
12010 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75  up._sqlite_backu
12020 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  p;....        if
12030 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c   (handle == null
12040 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
12050 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
12060 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
12070 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
12080 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
12090 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
120a0 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
120b0 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
120c0 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64  handlePtr = hand
120d0 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  le;....        i
120e0 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20  f (handlePtr == 
120f0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
12100 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
12110 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
12120 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
12130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12140 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
12150 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
12160 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b  ndle pointer.");
12170 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
12180 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
12190 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
121a0 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
121b0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
121c0 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f  3_backup_finish_
121d0 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 50 74  interop(handlePt
121e0 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  r);..#else..    
121f0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
12200 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
12210 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
12220 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73  te3_backup_finis
12230 68 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 23  h(handlePtr);..#
12240 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 68  endif..        h
12250 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65 41  andle.SetHandleA
12260 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a 23  sInvalid();....#
12270 69 66 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 0d  if COUNT_HANDLE.
12280 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20  .        if ((n 
12290 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
122a0 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d 3d 20  de.Ok) || (n == 
122b0 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75  backup._stepResu
122c0 6c 74 29 29 20 68 61 6e 64 6c 65 2e 57 61 73 52  lt)) handle.WasR
122d0 65 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a 23 65  eleasedOk();..#e
122e0 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
122f0 69 66 20 28 28 6e 20 21 3d 20 53 51 4c 69 74 65  if ((n != SQLite
12300 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26  ErrorCode.Ok) &&
12310 20 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e 5f 73   (n != backup._s
12320 74 65 70 52 65 73 75 6c 74 29 29 0d 0a 20 20 20  tepResult))..   
12330 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
12340 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
12350 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
12360 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
12370 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
12380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
123e0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
123f0 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66  // Determines if
12400 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
12410 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65   library has bee
12420 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f  n initialized fo
12430 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63  r the..    /// c
12440 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d  urrent process..
12450 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
12460 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
12470 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
12480 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61  A boolean indica
12490 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
124a0 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  not the SQLite c
124b0 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20  ore library has 
124c0 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e  been..    /// in
124d0 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68  itialized for th
124e0 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
124f0 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  s...    /// </re
12500 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
12510 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
12520 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a 65 64  ol IsInitialized
12530 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
12540 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63     return Static
12550 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 3b  IsInitialized();
12560 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
12570 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
12580 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73    /// Determines
12590 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63   if the SQLite c
125a0 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20  ore library has 
125b0 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
125c0 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f   for the..    //
125d0 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  / current proces
125e0 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
125f0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
12600 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
12610 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  // A boolean ind
12620 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20  icating whether 
12630 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74  or not the SQLit
12640 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68  e core library h
12650 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f  as been..    ///
12660 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72   initialized for
12670 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
12680 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cess...    /// <
12690 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
126a0 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62  nternal static b
126b0 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e 69 74  ool StaticIsInit
126c0 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b  ialized()..    {
126d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
126e0 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a        // BUGFIX:
126f0 20 50 72 65 76 65 6e 74 20 72 61 63 65 73 20 77   Prevent races w
12700 69 74 68 20 6f 74 68 65 72 20 74 68 72 65 61 64  ith other thread
12710 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74 69 72  s for this entir
12720 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20 20  e block, due..  
12730 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
12740 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69 6e 61   to the try/fina
12750 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e 20 20  lly semantics.  
12760 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32 39 30  See ticket [7290
12770 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20 20  5c9a77]...      
12780 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c 6f    //..        lo
12790 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20  ck (syncRoot).. 
127a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
127b0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
127c0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
127d0 61 76 65 20 74 68 65 20 73 74 61 74 65 20 6f 66  ave the state of
127e0 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c 61   the logging cla
127f0 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65 73 74  ss and then rest
12800 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20 20 20  ore it..        
12810 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 66 74      //       aft
12820 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65 20 74  er we are done t
12830 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67 20  o avoid logging 
12840 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20 65  too many false e
12850 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20 20  rrors...        
12860 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
12870 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 45 6e      bool savedEn
12880 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c 6f  abled = SQLiteLo
12890 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20  g.Enabled;..    
128a0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
128b0 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c 73  g.Enabled = fals
128c0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
128d0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
128e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
128f0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
12900 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
12910 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20 5b  E: This method [
12920 61 62 5d 75 73 65 73 20 74 68 65 20 66 61 63 74  ab]uses the fact
12930 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c   that SQLite wil
12940 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20  l always..      
12950 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
12960 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
12970 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79 20 75  _ERROR for any u
12980 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72 61  nknown configura
12990 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20 20  tion option..   
129a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
129b0 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20 74        *unless* t
129c0 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
129d0 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  y has already be
129e0 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0d  en initialized..
129f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12a00 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74 68 61   //       In tha
12a10 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c 20 61  t case it will a
12a20 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53 51 4c  lways return SQL
12a30 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20 20  ITE_MISUSE...   
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
12a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12a60 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12a70 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
12a80 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
12a90 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d 0a  3_config_none(..
12aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ab0 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67      SQLiteConfig
12ac0 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43  OpsEnum.SQLITE_C
12ad0 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a  ONFIG_NONE);....
12ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12af0 72 65 74 75 72 6e 20 28 72 63 20 3d 3d 20 53 51  return (rc == SQ
12b00 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4d 69  LiteErrorCode.Mi
12b10 73 75 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  suse);..        
12b20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
12b30 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
12b40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12b50 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
12b60 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 73  eLog.Enabled = s
12b70 61 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a 20 20  avedEnabled;..  
12b80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
12b90 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
12ba0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
12bb0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70  y>..    /// Help
12bc0 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72  er function to r
12bd0 65 74 72 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e  etrieve a column
12be0 20 6f 66 20 64 61 74 61 20 66 72 6f 6d 20 61 6e   of data from an
12bf0 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
12c00 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
12c10 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
12c20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d  <param name="stm
12c30 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74  t">The statement
12c40 20 62 65 69 6e 67 20 73 74 65 70 28 29 27 64 20   being step()'d 
12c50 74 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d  through</param>.
12c60 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
12c70 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68 65  name="flags">The
12c80 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   flags associate
12c90 64 20 77 69 74 68 20 74 68 65 20 63 6f 6e 6e 65  d with the conne
12ca0 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  ction.</param>..
12cb0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
12cc0 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68 65 20  ame="index">The 
12cd0 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20  column index to 
12ce0 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
12cf0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
12d00 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20   name="typ">The 
12d10 74 79 70 65 20 6f 66 20 64 61 74 61 20 63 6f 6e  type of data con
12d20 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f  tained in the co
12d30 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74  lumn.  If Uninit
12d40 69 61 6c 69 7a 65 64 2c 20 74 68 69 73 20 66 75  ialized, this fu
12d50 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72  nction will retr
12d60 69 65 76 65 20 74 68 65 20 64 61 74 61 74 79 70  ieve the datatyp
12d70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f  e information.</
12d80 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
12d90 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73  <returns>Returns
12da0 20 74 68 65 20 64 61 74 61 20 69 6e 20 74 68 65   the data in the
12db0 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73   column</returns
12dc0 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
12dd0 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20  override object 
12de0 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74 65 53  GetValue(SQLiteS
12df0 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
12e00 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
12e10 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
12e20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54 79 70  index, SQLiteTyp
12e30 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20  e typ)..    {.. 
12e40 20 20 20 20 20 69 66 20 28 49 73 4e 75 6c 6c 28       if (IsNull(
12e50 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 20 72 65  stmt, index)) re
12e60 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75  turn DBNull.Valu
12e70 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66  e;..      TypeAf
12e80 66 69 6e 69 74 79 20 61 66 66 20 3d 20 74 79 70  finity aff = typ
12e90 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20  .Affinity;..    
12ea0 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c 3b    Type t = null;
12eb0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 74 79  ....      if (ty
12ec0 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79 70 65  p.Type != DbType
12ed0 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20 20  .Object)..      
12ee0 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d 20 53  {..        t = S
12ef0 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c  QLiteConvert.SQL
12f00 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 74 79  iteTypeToType(ty
12f10 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61 66 66  p);..        aff
12f20 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e 69 74   = TypeToAffinit
12f30 79 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  y(t);..      }..
12f40 0d 0a 20 20 20 20 20 20 69 66 20 28 28 66 6c 61  ..      if ((fla
12f50 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
12f60 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c  ctionFlags.GetAl
12f70 6c 41 73 54 65 78 74 29 20 3d 3d 20 53 51 4c 69  lAsText) == SQLi
12f80 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
12f90 73 2e 47 65 74 41 6c 6c 41 73 54 65 78 74 29 0d  s.GetAllAsText).
12fa0 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
12fb0 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20  n GetText(stmt, 
12fc0 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  index);....     
12fd0 20 73 77 69 74 63 68 20 28 61 66 66 29 0d 0a 20   switch (aff).. 
12fe0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12ff0 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
13000 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20  y.Blob:..       
13010 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20     if (typ.Type 
13020 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20 26  == DbType.Guid &
13030 26 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d  & typ.Affinity =
13040 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54  = TypeAffinity.T
13050 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ext)..          
13060 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69    return new Gui
13070 64 28 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20  d(GetText(stmt, 
13080 69 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20 20 20  index));....    
13090 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 28 69        int n = (i
130a0 6e 74 29 47 65 74 42 79 74 65 73 28 73 74 6d 74  nt)GetBytes(stmt
130b0 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c  , index, 0, null
130c0 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20  , 0, 0);..      
130d0 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 6e      byte[] b = n
130e0 65 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20  ew byte[n];..   
130f0 20 20 20 20 20 20 20 47 65 74 42 79 74 65 73 28         GetBytes(
13100 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20  stmt, index, 0, 
13110 62 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20  b, 0, n);....   
13120 20 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54         if (typ.T
13130 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75  ype == DbType.Gu
13140 69 64 20 26 26 20 6e 20 3d 3d 20 31 36 29 0d 0a  id && n == 16)..
13150 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
13160 72 6e 20 6e 65 77 20 47 75 69 64 28 62 29 3b 0d  rn new Guid(b);.
13170 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ...          ret
13180 75 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20 20 20  urn b;..        
13190 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
131a0 79 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20 20 20  y.DateTime:..   
131b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
131c0 74 44 61 74 65 54 69 6d 65 28 73 74 6d 74 2c 20  tDateTime(stmt, 
131d0 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
131e0 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
131f0 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20  ty.Double:..    
13200 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e        if (t == n
13210 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74 44  ull) return GetD
13220 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65  ouble(stmt, inde
13230 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72  x);..          r
13240 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68  eturn Convert.Ch
13250 61 6e 67 65 54 79 70 65 28 47 65 74 44 6f 75 62  angeType(GetDoub
13260 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  le(stmt, index),
13270 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20   t, null);..    
13280 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
13290 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20  inity.Int64:..  
132a0 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
132b0 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65   null) return Ge
132c0 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
132d0 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
132e0 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
132f0 53 42 79 74 65 29 29 20 72 65 74 75 72 6e 20 47  SByte)) return G
13300 65 74 53 42 79 74 65 28 73 74 6d 74 2c 20 69 6e  etSByte(stmt, in
13310 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
13320 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
13330 28 42 79 74 65 29 29 20 72 65 74 75 72 6e 20 47  (Byte)) return G
13340 65 74 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64  etByte(stmt, ind
13350 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
13360 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
13370 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20 47  Int16)) return G
13380 65 74 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e  etInt16(stmt, in
13390 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
133a0 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
133b0 28 55 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e  (UInt16)) return
133c0 20 47 65 74 55 49 6e 74 31 36 28 73 74 6d 74 2c   GetUInt16(stmt,
133d0 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
133e0 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
133f0 65 6f 66 28 49 6e 74 33 32 29 29 20 72 65 74 75  eof(Int32)) retu
13400 72 6e 20 47 65 74 49 6e 74 33 32 28 73 74 6d 74  rn GetInt32(stmt
13410 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
13420 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
13430 70 65 6f 66 28 55 49 6e 74 33 32 29 29 20 72 65  peof(UInt32)) re
13440 74 75 72 6e 20 47 65 74 55 49 6e 74 33 32 28 73  turn GetUInt32(s
13450 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
13460 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
13470 20 74 79 70 65 6f 66 28 55 49 6e 74 36 34 29 29   typeof(UInt64))
13480 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 36   return GetUInt6
13490 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  4(stmt, index);.
134a0 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
134b0 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65  n Convert.Change
134c0 54 79 70 65 28 47 65 74 49 6e 74 36 34 28 73 74  Type(GetInt64(st
134d0 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e  mt, index), t, n
134e0 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 64  ull);..        d
134f0 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20  efault:..       
13500 20 20 20 72 65 74 75 72 6e 20 47 65 74 54 65 78     return GetTex
13510 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  t(stmt, index);.
13520 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
13530 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
13540 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74  override int Get
13550 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65 28 53  CursorForTable(S
13560 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
13570 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e 74  tmt, int db, int
13580 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20 20   rootPage)..    
13590 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
135a0 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 72  TANDARD..      r
135b0 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
135c0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
135d0 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72 5f 69  3_table_cursor_i
135e0 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
135f0 69 74 65 5f 73 74 6d 74 2c 20 64 62 2c 20 72 6f  ite_stmt, db, ro
13600 6f 74 50 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d  otPage);..#else.
13610 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31  .      return -1
13620 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
13630 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
13640 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
13650 65 74 52 6f 77 49 64 46 6f 72 43 75 72 73 6f 72  etRowIdForCursor
13660 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
13670 20 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f   stmt, int curso
13680 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  r)..    {..#if !
13690 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
136a0 0a 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 69  .      long rowi
136b0 64 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  d;..      SQLite
136c0 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55  ErrorCode rc = U
136d0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
136e0 64 73 2e 73 71 6c 69 74 65 33 5f 63 75 72 73 6f  ds.sqlite3_curso
136f0 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28  r_rowid_interop(
13700 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
13710 74 2c 20 63 75 72 73 6f 72 2c 20 6f 75 74 20 72  t, cursor, out r
13720 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20 20 69 66  owid);..      if
13730 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72   (rc == SQLiteEr
13740 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 72 65 74 75  rorCode.Ok) retu
13750 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20 20 20  rn rowid;....   
13760 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65     return 0;..#e
13770 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
13780 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n 0;..#endif..  
13790 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
137a0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
137b0 64 20 47 65 74 49 6e 64 65 78 43 6f 6c 75 6d 6e  d GetIndexColumn
137c0 45 78 74 65 6e 64 65 64 49 6e 66 6f 28 73 74 72  ExtendedInfo(str
137d0 69 6e 67 20 64 61 74 61 62 61 73 65 2c 20 73 74  ing database, st
137e0 72 69 6e 67 20 69 6e 64 65 78 2c 20 73 74 72 69  ring index, stri
137f0 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 69  ng column, out i
13800 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74  nt sortMode, out
13810 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c 20 6f 75   int onError, ou
13820 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 69  t string collati
13830 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a 20 20 20  onSequence)..   
13840 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
13850 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
13860 49 6e 74 50 74 72 20 63 6f 6c 6c 3b 0d 0a 20 20  IntPtr coll;..  
13870 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65 6e 3b      int colllen;
13880 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
13890 72 6f 72 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20  rorCode rc;.... 
138a0 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65       rc = Unsafe
138b0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
138c0 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75  lite3_index_colu
138d0 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28  mn_info_interop(
138e0 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74  _sql, ToUTF8(dat
138f0 61 62 61 73 65 29 2c 20 54 6f 55 54 46 38 28 69  abase), ToUTF8(i
13900 6e 64 65 78 29 2c 20 54 6f 55 54 46 38 28 63 6f  ndex), ToUTF8(co
13910 6c 75 6d 6e 29 2c 20 6f 75 74 20 73 6f 72 74 4d  lumn), out sortM
13920 6f 64 65 2c 20 6f 75 74 20 6f 6e 45 72 72 6f 72  ode, out onError
13930 2c 20 6f 75 74 20 63 6f 6c 6c 2c 20 6f 75 74 20  , out coll, out 
13940 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20  colllen);..     
13950 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74   if (rc != SQLit
13960 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
13970 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
13980 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 6e 75 6c  xception(rc, nul
13990 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 63 6f 6c  l);....      col
139a0 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d  lationSequence =
139b0 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f   UTF8ToString(co
139c0 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23  ll, colllen);..#
139d0 65 6c 73 65 0d 0a 20 20 20 20 20 20 73 6f 72 74  else..      sort
139e0 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20  Mode = 0;..     
139f0 20 6f 6e 45 72 72 6f 72 20 3d 20 32 3b 0d 0a 20   onError = 2;.. 
13a00 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65       collationSe
13a10 71 75 65 6e 63 65 20 3d 20 22 42 49 4e 41 52 59  quence = "BINARY
13a20 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  ";..#endif..    
13a30 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
13a40 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
13a50 65 45 72 72 6f 72 43 6f 64 65 20 46 69 6c 65 43  eErrorCode FileC
13a60 6f 6e 74 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44  ontrol(string zD
13a70 62 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49  bName, int op, I
13a80 6e 74 50 74 72 20 70 41 72 67 29 0d 0a 20 20 20  ntPtr pArg)..   
13a90 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
13aa0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13ab0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 69 6c  hods.sqlite3_fil
13ac0 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20  e_control(_sql, 
13ad0 28 7a 44 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  (zDbName != null
13ae0 29 20 3f 20 54 6f 55 54 46 38 28 7a 44 62 4e 61  ) ? ToUTF8(zDbNa
13af0 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20  me) : null, op, 
13b00 70 41 72 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20  pArg);..    }.. 
13b10 20 7d 0d 0a 7d 0d 0a                              }..}..