System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 6a957e5d4081401d7d3626e0d7a521191a8a6a75:


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 35 2e 30  sion = "1.0.85.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 20 20 20 20 69 6e 74 65 72  ay;....    inter
0b20: 6e 61 6c 20 53 51 4c 69 74 65 33 28 53 51 4c 69  nal SQLite3(SQLi
0b30: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66 6d  teDateFormats fm
0b40: 74 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20  t, DateTimeKind 
0b50: 6b 69 6e 64 29 0d 0a 20 20 20 20 20 20 3a 20 62  kind)..      : b
0b60: 61 73 65 28 66 6d 74 2c 20 6b 69 6e 64 29 0d 0a  ase(fmt, kind)..
0b70: 20 20 20 20 7b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      {..    }....
0b80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0be0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
0bf0: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
0c00: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
0c10: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f  ..    private bo
0c20: 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20  ol disposed;..  
0c30: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
0c40: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
0c50: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
0c60: 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f  {..#if THROW_ON_
0c70: 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20  DISPOSED..      
0c80: 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d    if (disposed).
0c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
0ca0: 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73  ow new ObjectDis
0cb0: 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74  posedException(t
0cc0: 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2e 4e  ypeof(SQLite3).N
0cd0: 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ame);..#endif.. 
0ce0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
0cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
0d50: 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65     protected ove
0d60: 72 72 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f  rride void Dispo
0d70: 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e  se(bool disposin
0d80: 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  g)..    {..     
0d90: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
0da0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
0db0: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
0dc0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
0dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
0de0: 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a  if (disposing)..
0df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e00: 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  //{..           
0e10: 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f       //    /////
0e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0e50: 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73   //    // dispos
0e60: 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  e managed resour
0e70: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
0e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
0e90: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
0ec0: 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a           //}....
0ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
0f10: 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61          // relea
0f20: 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73  se unmanaged res
0f30: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
0f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0f80: 20 20 20 20 20 20 20 20 20 20 43 6c 6f 73 65 28            Close(
0f90: 66 61 6c 73 65 29 3b 20 2f 2a 20 44 69 73 70 6f  false); /* Dispo
0fa0: 73 69 6e 67 2c 20 63 61 6e 6e 6f 74 20 74 68 72  sing, cannot thr
0fb0: 6f 77 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  ow. */....      
0fc0: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
0fd0: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
0fe0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
0ff0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
1000: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b  nally..        {
1010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61  ..            ba
1020: 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73 70 6f  se.Dispose(dispo
1030: 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20 20  sing);..        
1040: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  }..    }..    #e
1050: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
10c0: 0a 0d 0a 20 20 20 20 2f 2f 20 49 74 20 69 73 6e  ...    // It isn
10d0: 27 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20  't necessary to 
10e0: 63 6c 65 61 6e 75 70 20 61 6e 79 20 66 75 6e 63  cleanup any func
10f0: 74 69 6f 6e 73 20 77 65 27 76 65 20 72 65 67 69  tions we've regi
1100: 73 74 65 72 65 64 2e 20 20 49 66 20 74 68 65 20  stered.  If the 
1110: 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20  connection..    
1120: 2f 2f 20 67 6f 65 73 20 74 6f 20 74 68 65 20 70  // goes to the p
1130: 6f 6f 6c 20 61 6e 64 20 69 73 20 72 65 73 75 72  ool and is resur
1140: 72 65 63 74 65 64 20 6c 61 74 65 72 2c 20 72 65  rected later, re
1150: 2d 72 65 67 69 73 74 65 72 65 64 20 66 75 6e 63  -registered func
1160: 74 69 6f 6e 73 20 77 69 6c 6c 20 6f 76 65 72 77  tions will overw
1170: 72 69 74 65 20 74 68 65 0d 0a 20 20 20 20 2f 2f  rite the..    //
1180: 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69   previous functi
1190: 6f 6e 73 2e 20 20 54 68 65 20 53 51 4c 69 74 65  ons.  The SQLite
11a0: 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69 65 48 61  FunctionCookieHa
11b0: 6e 64 6c 65 20 77 69 6c 6c 20 74 61 6b 65 20 63  ndle will take c
11c0: 61 72 65 20 6f 66 20 66 72 65 65 69 6e 67 20 75  are of freeing u
11d0: 6e 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 2f 2f  nmanaged..    //
11e0: 20 72 65 73 6f 75 72 63 65 73 20 62 65 6c 6f 6e   resources belon
11f0: 67 69 6e 67 20 74 6f 20 74 68 65 20 70 72 65 76  ging to the prev
1200: 69 6f 75 73 6c 79 2d 72 65 67 69 73 74 65 72 65  iously-registere
1210: 64 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20  d functions...  
1220: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
1230: 69 64 65 20 76 6f 69 64 20 43 6c 6f 73 65 28 62  ide void Close(b
1240: 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20  ool canThrow).. 
1250: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
1260: 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql != null).. 
1270: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1280: 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d    if (_usePool).
1290: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
12a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
12b0: 53 51 4c 69 74 65 42 61 73 65 2e 52 65 73 65 74  SQLiteBase.Reset
12c0: 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f 73 71 6c 2c  Connection(_sql,
12d0: 20 5f 73 71 6c 2c 20 63 61 6e 54 68 72 6f 77 29   _sql, canThrow)
12e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1300: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
1310: 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41 64 64 28 5f  ectionPool.Add(_
1320: 66 69 6c 65 4e 61 6d 65 2c 20 5f 73 71 6c 2c 20  fileName, _sql, 
1330: 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a  _poolVersion);..
1340: 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
1350: 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
1360: 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
1370: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1380: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72  ce.WriteLine(Str
1390: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43 6c 6f 73  ing.Format("Clos
13a0: 65 20 28 50 6f 6f 6c 29 20 53 75 63 63 65 73 73  e (Pool) Success
13b0: 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29 29 3b 0d  : {0}", _sql));.
13c0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
13d0: 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e         }..#if !N
13e0: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
13f0: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
1400: 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N..             
1410: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
1420: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1430: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
1440: 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67  WriteLine(String
1450: 2e 46 6f 72 6d 61 74 28 22 43 6c 6f 73 65 20 28  .Format("Close (
1460: 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20 7b  Pool) Failure: {
1470: 30 7d 22 2c 20 5f 73 71 6c 29 29 3b 0d 0a 20 20  0}", _sql));..  
1480: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
1490: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
14a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c   }..          el
14b0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  se..          {.
14c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
14d0: 73 71 6c 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a  sql.Dispose();..
14e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
14f0: 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75         _sql = nu
1500: 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ll;..      }..  
1510: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
1520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1580: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
1590: 69 64 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28  ide void Cancel(
15a0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
15b0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
15c0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 74 65  ods.sqlite3_inte
15d0: 72 72 75 70 74 28 5f 73 71 6c 29 3b 0d 0a 20 20  rrupt(_sql);..  
15e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
15f0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
1600: 69 6e 67 20 56 65 72 73 69 6f 6e 0d 0a 20 20 20  ing Version..   
1610: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
1620: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1630: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 33 2e 53  return SQLite3.S
1640: 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d 0a 20  QLiteVersion;.. 
1650: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
1660: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1670: 65 72 72 69 64 65 20 69 6e 74 20 56 65 72 73 69  erride int Versi
1680: 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d  onNumber..    {.
1690: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
16a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
16b0: 75 72 6e 20 53 51 4c 69 74 65 33 2e 53 51 4c 69  urn SQLite3.SQLi
16c0: 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b  teVersionNumber;
16d0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
16e0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
16f0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
1700: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a  efineConstants..
1710: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
1720: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
1730: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
1740: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
1750: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
1760: 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  der();..        
1770: 20 20 20 20 49 4c 69 73 74 3c 73 74 72 69 6e 67      IList<string
1780: 3e 20 6c 69 73 74 20 3d 20 53 51 4c 69 74 65 44  > list = SQLiteD
1790: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 2e 4f  efineConstants.O
17a0: 70 74 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20  ptionList;....  
17b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 69            if (li
17c0: 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st != null)..   
17d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
17f0: 61 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d  ach (string elem
1800: 65 6e 74 20 69 6e 20 6c 69 73 74 29 0d 0a 20 20  ent in list)..  
1810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1830: 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74       if (element
1840: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 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 69 66 20 28 72 65 73 75 6c 74 2e 4c      if (result.L
1890: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
18c0: 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  d(' ');....     
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
18e0: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 65 6c 65  esult.Append(ele
18f0: 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  ment);..        
1900: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1910: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1920: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
1930: 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29  esult.ToString()
1940: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1950: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1960: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
1970: 67 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d  g SQLiteVersion.
1980: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
1990: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
19a0: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
19b0: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
19c0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
19d0: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29  te3_libversion()
19e0: 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  , -1);..      }.
19f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
1a00: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 69 6e  ternal static in
1a10: 74 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e  t SQLiteVersionN
1a20: 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  umber..    {..  
1a30: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
1a40: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1a50: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1a60: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62  hods.sqlite3_lib
1a70: 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29  version_number()
1a80: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
1a90: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
1aa0: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  l static string 
1ab0: 53 51 4c 69 74 65 53 6f 75 72 63 65 49 64 0d 0a  SQLiteSourceId..
1ac0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
1ad0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
1ae0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
1af0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
1b00: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1b10: 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d  e3_sourceid(), -
1b20: 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  1);..      }..  
1b30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1b40: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
1b50: 6c 20 41 75 74 6f 43 6f 6d 6d 69 74 0d 0a 20 20  l AutoCommit..  
1b60: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
1b70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b80: 20 72 65 74 75 72 6e 20 49 73 41 75 74 6f 63 6f   return IsAutoco
1b90: 6d 6d 69 74 28 5f 73 71 6c 2c 20 5f 73 71 6c 29  mmit(_sql, _sql)
1ba0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
1bb0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
1bc0: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
1bd0: 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64 0d  LastInsertRowId.
1be0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
1bf0: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  t..      {..#if 
1c00: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
1c10: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
1c20: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
1c30: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1c40: 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
1c50: 72 74 5f 72 6f 77 69 64 28 5f 73 71 6c 29 3b 0d  rt_rowid(_sql);.
1c60: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
1c70: 6c 6f 6e 67 20 72 6f 77 49 64 20 3d 20 30 3b 0d  long rowId = 0;.
1c80: 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e  .        UnsafeN
1c90: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1ca0: 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
1cb0: 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28 5f  _rowid_interop(_
1cc0: 73 71 6c 2c 20 72 65 66 20 72 6f 77 49 64 29 3b  sql, ref rowId);
1cd0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1ce0: 20 72 6f 77 49 64 3b 0d 0a 23 65 6e 64 69 66 0d   rowId;..#endif.
1cf0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
1d00: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1d10: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 68 61  override int Cha
1d20: 6e 67 65 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  nges..    {..   
1d30: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
1d40: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
1d50: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 72  NDARD..        r
1d60: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
1d70: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1d80: 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f  3_changes_intero
1d90: 70 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 73 65 0d  p(_sql);..#else.
1da0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
1db0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1dc0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e  ods.sqlite3_chan
1dd0: 67 65 73 28 5f 73 71 6c 29 3b 0d 0a 23 65 6e 64  ges(_sql);..#end
1de0: 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  if..      }..   
1df0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
1e00: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
1e10: 20 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20   MemoryUsed..   
1e20: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
1e30: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
1e40: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
1e50: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
1e60: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
1e70: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1e80: 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 28 29  e3_memory_used()
1e90: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
1ea0: 20 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20 30    long bytes = 0
1eb0: 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  ;..        Unsaf
1ec0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1ed0: 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73  qlite3_memory_us
1ee0: 65 64 5f 69 6e 74 65 72 6f 70 28 72 65 66 20 62  ed_interop(ref b
1ef0: 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  ytes);..        
1f00: 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23  return bytes;..#
1f10: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a  endif..      }..
1f20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
1f30: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
1f40: 6f 6e 67 20 4d 65 6d 6f 72 79 48 69 67 68 77 61  ong MemoryHighwa
1f50: 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ter..    {..    
1f60: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
1f70: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
1f80: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
1f90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
1fa0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1fb0: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  ds.sqlite3_memor
1fc0: 79 5f 68 69 67 68 77 61 74 65 72 28 30 29 3b 0d  y_highwater(0);.
1fd0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
1fe0: 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20 30 3b 0d  long bytes = 0;.
1ff0: 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e  .        UnsafeN
2000: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
2010: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68  ite3_memory_high
2020: 77 61 74 65 72 5f 69 6e 74 65 72 6f 70 28 30 2c  water_interop(0,
2030: 20 72 65 66 20 62 79 74 65 73 29 3b 0d 0a 20 20   ref bytes);..  
2040: 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74        return byt
2050: 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  es;..#endif..   
2060: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
2070: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
2080: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
2090: 43 6f 64 65 20 53 65 74 4d 65 6d 6f 72 79 53 74  Code SetMemorySt
20a0: 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29  atus(bool value)
20b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
20c0: 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 53 65   return StaticSe
20d0: 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 76 61  tMemoryStatus(va
20e0: 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  lue);..    }....
20f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
2100: 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  tic SQLiteErrorC
2110: 6f 64 65 20 53 74 61 74 69 63 53 65 74 4d 65 6d  ode StaticSetMem
2120: 6f 72 79 53 74 61 74 75 73 28 62 6f 6f 6c 20 76  oryStatus(bool v
2130: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
2140: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
2150: 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
2160: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
2170: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 69 6e  qlite3_config_in
2180: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2190: 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
21a0: 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
21b0: 47 5f 4d 45 4d 53 54 41 54 55 53 2c 20 76 61 6c  G_MEMSTATUS, val
21c0: 75 65 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 0d 0a  ue ? 1 : 0);....
21d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
21e0: 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  c;..    }....   
21f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2200: 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e      /// Shutdown
2210: 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69   the SQLite engi
2220: 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ne so that it ca
2230: 6e 20 62 65 20 72 65 73 74 61 72 74 65 64 20 77  n be restarted w
2240: 69 74 68 20 64 69 66 66 65 72 65 6e 74 20 63 6f  ith different co
2250: 6e 66 69 67 20 6f 70 74 69 6f 6e 73 2e 0d 0a 20  nfig options... 
2260: 20 20 20 2f 2f 2f 20 57 65 20 64 65 70 65 6e 64     /// We depend
2270: 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69 61 6c   on auto initial
2280: 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76  ization to recov
2290: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  er...    /// </s
22a0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
22b0: 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
22c0: 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64 65 3c  s a result code<
22d0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
22e0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
22f0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2300: 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a 20 20 20   Shutdown()..   
2310: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
2320: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
2330: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2340: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 68 75  hods.sqlite3_shu
2350: 74 64 6f 77 6e 28 29 3b 0d 0a 20 20 20 20 20 20  tdown();..      
2360: 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20    return rc;..  
2370: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
2380: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
2390: 6c 20 49 73 4f 70 65 6e 28 29 0d 0a 20 20 20 20  l IsOpen()..    
23a0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
23b0: 6e 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  n (_sql != null)
23c0: 20 26 26 20 21 5f 73 71 6c 2e 49 73 49 6e 76 61   && !_sql.IsInva
23d0: 6c 69 64 20 26 26 20 21 5f 73 71 6c 2e 49 73 43  lid && !_sql.IsC
23e0: 6c 6f 73 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  losed;..    }...
23f0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
2400: 65 72 72 69 64 65 20 76 6f 69 64 20 4f 70 65 6e  erride void Open
2410: 28 73 74 72 69 6e 67 20 73 74 72 46 69 6c 65 6e  (string strFilen
2420: 61 6d 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ame, SQLiteConne
2430: 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e 65  ctionFlags conne
2440: 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51 4c 69  ctionFlags, SQLi
2450: 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d 20  teOpenFlagsEnum 
2460: 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74 20 6d  openFlags, int m
2470: 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f 6c  axPoolSize, bool
2480: 20 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 7b   usePool)..    {
2490: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c  ..      if (_sql
24a0: 20 21 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   != null) return
24b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 75 73 65 50  ;....      _useP
24c0: 6f 6f 6c 20 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a  ool = usePool;..
24d0: 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20        _fileName 
24e0: 3d 20 73 74 72 46 69 6c 65 6e 61 6d 65 3b 0d 0a  = strFilename;..
24f0: 0d 0a 20 20 20 20 20 20 69 66 20 28 75 73 65 50  ..      if (useP
2500: 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ool)..      {.. 
2510: 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 53 51         _sql = SQ
2520: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f  LiteConnectionPo
2530: 6f 6c 2e 52 65 6d 6f 76 65 28 73 74 72 46 69 6c  ol.Remove(strFil
2540: 65 6e 61 6d 65 2c 20 6d 61 78 50 6f 6f 6c 53 69  ename, maxPoolSi
2550: 7a 65 2c 20 6f 75 74 20 5f 70 6f 6f 6c 56 65 72  ze, out _poolVer
2560: 73 69 6f 6e 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e  sion);....#if !N
2570: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
2580: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
2590: 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63 65  N..        Trace
25a0: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
25b0: 67 2e 46 6f 72 6d 61 74 28 22 4f 70 65 6e 20 28  g.Format("Open (
25c0: 50 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 28 5f 73  Pool): {0}", (_s
25d0: 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 5f 73  ql != null) ? _s
25e0: 71 6c 2e 54 6f 53 74 72 69 6e 67 28 29 20 3a 20  ql.ToString() : 
25f0: 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 23 65 6e  "<null>"));..#en
2600: 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  dif..      }....
2610: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
2620: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b  = null)..      {
2630: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
2640: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2650: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
2660: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
2670: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
2680: 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64   /* NOTE: Thread
2690: 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74  .Abort() protect
26a0: 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ion. */..       
26b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 49 6e   {..          In
26c0: 74 50 74 72 20 64 62 3b 0d 0a 20 20 20 20 20 20  tPtr db;..      
26d0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
26e0: 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  ode n;....#if !S
26f0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
2700: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
2710: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 26  onnectionFlags &
2720: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
2730: 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69  nFlags.NoExtensi
2740: 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20  onFunctions) != 
2750: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
2760: 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f  Flags.NoExtensio
2770: 6e 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20  nFunctions)..   
2780: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2790: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
27a0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
27b0: 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72  lite3_open_inter
27c0: 6f 70 28 54 6f 55 54 46 38 28 73 74 72 46 69 6c  op(ToUTF8(strFil
27d0: 65 6e 61 6d 65 29 2c 20 6f 70 65 6e 46 6c 61 67  ename), openFlag
27e0: 73 2c 20 6f 75 74 20 64 62 29 3b 0d 0a 20 20 20  s, out db);..   
27f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2800: 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66      else..#endif
2810: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
2820: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
2830: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2840: 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  ds.sqlite3_open_
2850: 76 32 28 54 6f 55 54 46 38 28 73 74 72 46 69 6c  v2(ToUTF8(strFil
2860: 65 6e 61 6d 65 29 2c 20 6f 75 74 20 64 62 2c 20  ename), out db, 
2870: 6f 70 65 6e 46 6c 61 67 73 2c 20 49 6e 74 50 74  openFlags, IntPt
2880: 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 20 20  r.Zero);..      
2890: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 4e 45      }....#if !NE
28a0: 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
28b0: 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
28c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 54 72 61 63  ..          Trac
28d0: 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69  e.WriteLine(Stri
28e0: 6e 67 2e 46 6f 72 6d 61 74 28 22 4f 70 65 6e 3a  ng.Format("Open:
28f0: 20 7b 30 7d 22 2c 20 64 62 29 29 3b 0d 0a 23 65   {0}", db));..#e
2900: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
2910: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
2920: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
2930: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
2940: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c  xception(n, null
2950: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73  );..          _s
2960: 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  ql = new SQLiteC
2970: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28  onnectionHandle(
2980: 64 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  db);..        }.
2990: 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f  .        lock (_
29a0: 73 71 6c 29 20 7b 20 2f 2a 20 48 41 43 4b 3a 20  sql) { /* HACK: 
29b0: 46 6f 72 63 65 20 74 68 65 20 53 79 6e 63 42 6c  Force the SyncBl
29c0: 6f 63 6b 20 74 6f 20 62 65 20 22 63 72 65 61 74  ock to be "creat
29d0: 65 64 22 20 6e 6f 77 2e 20 2a 2f 20 7d 0d 0a 20  ed" now. */ }.. 
29e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 2f 2f       }..      //
29f0: 20 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20   Bind functions 
2a00: 74 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69  to this connecti
2a10: 6f 6e 2e 20 20 49 66 20 61 6e 79 20 70 72 65 76  on.  If any prev
2a20: 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f  ious functions o
2a30: 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 0d  f the same name.
2a40: 0a 20 20 20 20 20 20 2f 2f 20 77 65 72 65 20 61  .      // were a
2a50: 6c 72 65 61 64 79 20 62 6f 75 6e 64 2c 20 74 68  lready bound, th
2a60: 65 6e 20 74 68 65 20 6e 65 77 20 62 69 6e 64 69  en the new bindi
2a70: 6e 67 73 20 72 65 70 6c 61 63 65 20 74 68 65 20  ngs replace the 
2a80: 6f 6c 64 2e 0d 0a 20 20 20 20 20 20 5f 66 75 6e  old...      _fun
2a90: 63 74 69 6f 6e 73 41 72 72 61 79 20 3d 20 53 51  ctionsArray = SQ
2aa0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e  LiteFunction.Bin
2ab0: 64 46 75 6e 63 74 69 6f 6e 73 28 74 68 69 73 2c  dFunctions(this,
2ac0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73   connectionFlags
2ad0: 29 3b 0d 0a 20 20 20 20 20 20 53 65 74 54 69 6d  );..      SetTim
2ae0: 65 6f 75 74 28 30 29 3b 0d 0a 20 20 20 20 20 20  eout(0);..      
2af0: 47 43 2e 4b 65 65 70 41 6c 69 76 65 28 5f 73 71  GC.KeepAlive(_sq
2b00: 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
2b10: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
2b20: 69 64 65 20 76 6f 69 64 20 43 6c 65 61 72 50 6f  ide void ClearPo
2b30: 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ol()..    {..   
2b40: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
2b50: 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f  ionPool.ClearPoo
2b60: 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20  l(_fileName);.. 
2b70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
2b80: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
2b90: 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20  t CountPool().. 
2ba0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 69     {..        Di
2bb0: 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
2bc0: 20 69 6e 74 3e 20 63 6f 75 6e 74 73 20 3d 20 6e   int> counts = n
2bd0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e  ull;..        in
2be0: 74 20 6f 70 65 6e 43 6f 75 6e 74 20 3d 20 30 3b  t openCount = 0;
2bf0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 63 6c  ..        int cl
2c00: 6f 73 65 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20  oseCount = 0;.. 
2c10: 20 20 20 20 20 20 20 69 6e 74 20 74 6f 74 61 6c         int total
2c20: 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20  Count = 0;....  
2c30: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
2c40: 65 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f  ectionPool.GetCo
2c50: 75 6e 74 73 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d  unts(_fileName,.
2c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2c70: 20 63 6f 75 6e 74 73 2c 20 72 65 66 20 6f 70 65   counts, ref ope
2c80: 6e 43 6f 75 6e 74 2c 20 72 65 66 20 63 6c 6f 73  nCount, ref clos
2c90: 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20  eCount,..       
2ca0: 20 20 20 20 20 72 65 66 20 74 6f 74 61 6c 43 6f       ref totalCo
2cb0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
2cc0: 20 72 65 74 75 72 6e 20 74 6f 74 61 6c 43 6f 75   return totalCou
2cd0: 6e 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  nt;..    }....  
2ce0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
2cf0: 69 64 65 20 76 6f 69 64 20 53 65 74 54 69 6d 65  ide void SetTime
2d00: 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74  out(int nTimeout
2d10: 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  MS)..    {..    
2d20: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
2d30: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
2d40: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
2d50: 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 5f  3_busy_timeout(_
2d60: 73 71 6c 2c 20 6e 54 69 6d 65 6f 75 74 4d 53 29  sql, nTimeoutMS)
2d70: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ;..      if (n !
2d80: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
2d90: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
2da0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
2db0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
2dc0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
2dd0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
2de0: 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 28 53 51  ide bool Step(SQ
2df0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
2e00: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
2e10: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
2e20: 65 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64  e n;..      Rand
2e30: 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a  om rnd = null;..
2e40: 20 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74        uint start
2e50: 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76  tick = (uint)Env
2e60: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
2e70: 6e 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20  nt;..      uint 
2e80: 74 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74 29  timeout = (uint)
2e90: 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f  (stmt._command._
2ea0: 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a  commandTimeout *
2eb0: 20 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20   1000);....     
2ec0: 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d 0a 20   while (true).. 
2ed0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ee0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
2ef0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2f00: 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  step(stmt._sqlit
2f10: 65 5f 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20  e_stmt);....    
2f20: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
2f30: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77  iteErrorCode.Row
2f40: 29 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a  ) return true;..
2f50: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d          if (n ==
2f60: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2f70: 2e 44 6f 6e 65 29 20 72 65 74 75 72 6e 20 66 61  .Done) return fa
2f80: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
2f90: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
2fa0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
2fb0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2fc0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
2fd0: 64 65 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de r;....       
2fe0: 20 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72 20 6f     // An error o
2ff0: 63 63 75 72 72 65 64 2c 20 61 74 74 65 6d 70 74  ccurred, attempt
3000: 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 73 74   to reset the st
3010: 61 74 65 6d 65 6e 74 2e 20 20 49 66 20 74 68 65  atement.  If the
3020: 20 72 65 73 65 74 20 77 6f 72 6b 65 64 20 62 65   reset worked be
3030: 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20  cause the..     
3040: 20 20 20 20 20 2f 2f 20 73 63 68 65 6d 61 20 68       // schema h
3050: 61 73 20 63 68 61 6e 67 65 64 2c 20 72 65 2d 74  as changed, re-t
3060: 72 79 20 74 68 65 20 73 74 65 70 20 61 67 61 69  ry the step agai
3070: 6e 2e 20 20 49 66 20 69 74 20 65 72 72 6f 72 65  n.  If it errore
3080: 64 20 6f 75 72 20 62 65 63 61 75 73 65 20 74 68  d our because th
3090: 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  e database..    
30a0: 20 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f 63 6b        // is lock
30b0: 65 64 2c 20 74 68 65 6e 20 6b 65 65 70 20 72 65  ed, then keep re
30c0: 74 72 79 69 6e 67 20 75 6e 74 69 6c 20 74 68 65  trying until the
30d0: 20 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f 75 74   command timeout
30e0: 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20   occurs...      
30f0: 20 20 20 20 72 20 3d 20 52 65 73 65 74 28 73 74      r = Reset(st
3100: 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  mt);....        
3110: 20 20 69 66 20 28 72 20 3d 3d 20 53 51 4c 69 74    if (r == SQLit
3120: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
3130: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
3140: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
3150: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
3160: 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
3170: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
3180: 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (r == SQLiteErro
3190: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
31a0: 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  r == SQLiteError
31b0: 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20 73 74  Code.Busy) && st
31c0: 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e  mt._command != n
31d0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
31e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
31f0: 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20  / Keep trying.. 
3200: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
3210: 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46  nd == null) // F
3220: 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65 20  irst time we've 
3230: 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20  encountered the 
3240: 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  lock..          
3250: 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61      rnd = new Ra
3260: 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndom();....     
3270: 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27         // If we'
3280: 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65 20  ve exceeded the 
3290: 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75  command's timeou
32a0: 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20 74  t, give up and t
32b0: 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20  hrow an error.. 
32c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
32d0: 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74  uint)Environment
32e0: 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61  .TickCount - sta
32f0: 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74  rttick > timeout
3300: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3320: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
3330: 45 78 63 65 70 74 69 6f 6e 28 72 2c 20 47 65 74  Exception(r, Get
3340: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
3350: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
3360: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
3370: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3380: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3390: 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65 70 20  Otherwise sleep 
33a0: 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f  for a random amo
33b0: 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74  unt of time up t
33c0: 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20  o 150ms..       
33d0: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68         System.Th
33e0: 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53  reading.Thread.S
33f0: 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c  leep(rnd.Next(1,
3400: 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20   150));..       
3410: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
3420: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
3430: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
3440: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
3450: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
3460: 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28 53 51  rorCode Reset(SQ
3470: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
3480: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
3490: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
34a0: 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  e n;....#if !SQL
34b0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
34c0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
34d0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
34e0: 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f  te3_reset_intero
34f0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
3500: 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  tmt);..#else..  
3510: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
3520: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3530: 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74 2e 5f  te3_reset(stmt._
3540: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23  sqlite_stmt);..#
3550: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 2f  endif....      /
3560: 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20  / If the schema 
3570: 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61 6e 64  changed, try and
3580: 20 72 65 2d 70 72 65 70 61 72 65 20 69 74 0d 0a   re-prepare it..
3590: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
35a0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53  QLiteErrorCode.S
35b0: 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 7b 0d  chema)..      {.
35c0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65 63 72  .        // Recr
35d0: 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73 74 61  eate a dummy sta
35e0: 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  tement..        
35f0: 73 74 72 69 6e 67 20 73 74 72 3b 0d 0a 20 20 20  string str;..   
3600: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
3610: 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6d 70 20  teStatement tmp 
3620: 3d 20 50 72 65 70 61 72 65 28 6e 75 6c 6c 2c 20  = Prepare(null, 
3630: 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65 6d 65  stmt._sqlStateme
3640: 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e 74 29  nt, null, (uint)
3650: 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f  (stmt._command._
3660: 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a  commandTimeout *
3670: 20 31 30 30 30 29 2c 20 6f 75 74 20 73 74 72 29   1000), out str)
3680: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
3690: 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e 61 6c          // Final
36a0: 69 7a 65 20 74 68 65 20 65 78 69 73 74 69 6e 67  ize the existing
36b0: 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20   statement..    
36c0: 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69        stmt._sqli
36d0: 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73 65 28  te_stmt.Dispose(
36e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  );..          //
36f0: 20 52 65 61 73 73 69 67 6e 20 61 20 6e 65 77 20   Reassign a new 
3700: 73 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e 74 65  statement pointe
3710: 72 20 74 6f 20 74 68 65 20 6f 6c 64 20 73 74 61  r to the old sta
3720: 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65 61 72  tement and clear
3730: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 6f   the temporary o
3740: 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  ne..          st
3750: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20  mt._sqlite_stmt 
3760: 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74  = tmp._sqlite_st
3770: 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  mt;..          t
3780: 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20  mp._sqlite_stmt 
3790: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
37a0: 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c 79 20       // Reapply 
37b0: 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20 20  parameters..    
37c0: 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e 64 50        stmt.BindP
37d0: 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a 20 20  arameters();..  
37e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
37f0: 20 72 65 74 75 72 6e 20 28 53 51 4c 69 74 65 45   return (SQLiteE
3800: 72 72 6f 72 43 6f 64 65 29 28 2d 31 29 3b 20 2f  rrorCode)(-1); /
3810: 2f 20 52 65 73 65 74 20 77 61 73 20 4f 4b 2c 20  / Reset was OK, 
3820: 77 69 74 68 20 73 63 68 65 6d 61 20 63 68 61 6e  with schema chan
3830: 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  ge..      }..   
3840: 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
3850: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
3860: 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20  .Locked || n == 
3870: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
3880: 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20 20 72  Busy)..        r
3890: 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a 20 20 20 20  eturn n;....    
38a0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
38b0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
38c0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
38d0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
38e0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
38f0: 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  r());....      r
3900: 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
3910: 72 43 6f 64 65 2e 4f 6b 3b 20 2f 2f 20 57 65 20  rCode.Ok; // We 
3920: 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20 73 63 68  reset OK, no sch
3930: 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a 20 20 20  ema changes..   
3940: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3950: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
3960: 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  ng GetLastError(
3970: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3980: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 42 61 73  return SQLiteBas
3990: 65 2e 47 65 74 4c 61 73 74 45 72 72 6f 72 28 5f  e.GetLastError(_
39a0: 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20  sql, _sql);..   
39b0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
39c0: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
39d0: 74 65 53 74 61 74 65 6d 65 6e 74 20 50 72 65 70  teStatement Prep
39e0: 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  are(SQLiteConnec
39f0: 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e 67  tion cnn, string
3a00: 20 73 74 72 53 71 6c 2c 20 53 51 4c 69 74 65 53   strSql, SQLiteS
3a10: 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69 6f 75  tatement previou
3a20: 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 4d  s, uint timeoutM
3a30: 53 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 73 74  S, out string st
3a40: 72 52 65 6d 61 69 6e 29 0d 0a 20 20 20 20 7b 0d  rRemain)..    {.
3a50: 0a 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69  .      if (!Stri
3a60: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
3a70: 28 73 74 72 53 71 6c 29 29 0d 0a 20 20 20 20 20  (strSql))..     
3a80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a   {..        //..
3a90: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
3aa0: 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74   SQLite does not
3ab0: 20 73 75 70 70 6f 72 74 20 74 68 65 20 63 6f 6e   support the con
3ac0: 63 65 70 74 20 6f 66 20 73 65 70 61 72 61 74 65  cept of separate
3ad0: 20 73 63 68 65 6d 61 73 0d 0a 20 20 20 20 20 20   schemas..      
3ae0: 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 20 6f 6e    //       in on
3af0: 65 20 64 61 74 61 62 61 73 65 3b 20 74 68 65 72  e database; ther
3b00: 65 66 6f 72 65 2c 20 72 65 6d 6f 76 65 20 74 68  efore, remove th
3b10: 65 20 62 61 73 65 20 73 63 68 65 6d 61 20 6e 61  e base schema na
3b20: 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  me..        //  
3b30: 20 20 20 20 20 75 73 65 64 20 74 6f 20 73 6d 6f       used to smo
3b40: 6f 74 68 20 69 6e 74 65 67 72 61 74 69 6f 6e 20  oth integration 
3b50: 77 69 74 68 20 74 68 65 20 62 61 73 65 20 2e 4e  with the base .N
3b60: 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d 0a 20 20  ET Framework..  
3b70: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
3b80: 61 74 61 20 63 6c 61 73 73 65 73 2e 0d 0a 20 20  ata classes...  
3b90: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3ba0: 20 20 73 74 72 69 6e 67 20 62 61 73 65 53 63 68    string baseSch
3bb0: 65 6d 61 4e 61 6d 65 20 3d 20 28 63 6e 6e 20 21  emaName = (cnn !
3bc0: 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 62  = null) ? cnn._b
3bd0: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3a 20  aseSchemaName : 
3be0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
3bf0: 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
3c00: 75 6c 6c 4f 72 45 6d 70 74 79 28 62 61 73 65 53  ullOrEmpty(baseS
3c10: 63 68 65 6d 61 4e 61 6d 65 29 29 0d 0a 20 20 20  chemaName))..   
3c20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3c30: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71    strSql = strSq
3c40: 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20  l.Replace(..    
3c50: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
3c60: 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  .Format(CultureI
3c70: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
3c80: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
3c90: 20 20 20 20 20 22 5b 7b 30 7d 5d 2e 22 2c 20 62       "[{0}].", b
3ca0: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20  aseSchemaName), 
3cb0: 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
3cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 53  ..          strS
3cd0: 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c  ql = strSql.Repl
3ce0: 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
3cf0: 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
3d00: 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  t(CultureInfo.In
3d10: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d  variantCulture,.
3d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
3d30: 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d  {0}.", baseSchem
3d40: 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45  aName), String.E
3d50: 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  mpty);..        
3d60: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....  
3d70: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
3d80: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 20  tionFlags flags 
3d90: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 28 63 6e  =..          (cn
3da0: 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e  n != null) ? cnn
3db0: 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69 74 65 43  .Flags : SQLiteC
3dc0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44  onnectionFlags.D
3dd0: 65 66 61 75 6c 74 3b 0d 0a 0d 0a 23 69 66 20 21  efault;....#if !
3de0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
3df0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
3e00: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
3e10: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
3e20: 61 67 73 2e 4c 6f 67 50 72 65 70 61 72 65 29 20  ags.LogPrepare) 
3e30: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
3e40: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70  ionFlags.LogPrep
3e50: 61 72 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  are)..      {.. 
3e60: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 73 74           if ((st
3e70: 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  rSql == null) ||
3e80: 20 28 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20   (strSql.Length 
3e90: 3d 3d 20 30 29 20 7c 7c 20 28 73 74 72 53 71 6c  == 0) || (strSql
3ea0: 2e 54 72 69 6d 28 29 2e 4c 65 6e 67 74 68 20 3d  .Trim().Length =
3eb0: 3d 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20 20  = 0))..         
3ec0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
3ed0: 6f 67 4d 65 73 73 61 67 65 28 22 50 72 65 70 61  ogMessage("Prepa
3ee0: 72 69 6e 67 20 7b 3c 6e 6f 74 68 69 6e 67 3e 7d  ring {<nothing>}
3ef0: 2e 2e 2e 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ...");..        
3f00: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
3f10: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
3f20: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
3f30: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
3f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
3f50: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
3f60: 43 75 6c 74 75 72 65 2c 20 22 50 72 65 70 61 72  Culture, "Prepar
3f70: 69 6e 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c  ing {{{0}}}...",
3f80: 20 73 74 72 53 71 6c 29 29 3b 0d 0a 20 20 20 20   strSql));..    
3f90: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
3fa0: 20 20 20 20 20 49 6e 74 50 74 72 20 73 74 6d 74       IntPtr stmt
3fb0: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
3fc0: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74  .      IntPtr pt
3fd0: 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
3fe0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
3ff0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  = 0;..      SQLi
4000: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
4010: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
4020: 53 63 68 65 6d 61 3b 0d 0a 20 20 20 20 20 20 69  Schema;..      i
4030: 6e 74 20 72 65 74 72 69 65 73 20 3d 20 30 3b 0d  nt retries = 0;.
4040: 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20  .      byte[] b 
4050: 3d 20 54 6f 55 54 46 38 28 73 74 72 53 71 6c 29  = ToUTF8(strSql)
4060: 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ;..      string 
4070: 74 79 70 65 64 65 66 73 20 3d 20 6e 75 6c 6c 3b  typedefs = null;
4080: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53 74  ..      SQLiteSt
4090: 61 74 65 6d 65 6e 74 20 63 6d 64 20 3d 20 6e 75  atement cmd = nu
40a0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f  ll;..      Rando
40b0: 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  m rnd = null;.. 
40c0: 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74 74       uint startt
40d0: 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69  ick = (uint)Envi
40e0: 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e  ronment.TickCoun
40f0: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 47 43 48 61  t;....      GCHa
4100: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 47 43  ndle handle = GC
4110: 48 61 6e 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20  Handle.Alloc(b, 
4120: 47 43 48 61 6e 64 6c 65 54 79 70 65 2e 50 69 6e  GCHandleType.Pin
4130: 6e 65 64 29 3b 0d 0a 20 20 20 20 20 20 49 6e 74  ned);..      Int
4140: 50 74 72 20 70 73 71 6c 20 3d 20 68 61 6e 64 6c  Ptr psql = handl
4150: 65 2e 41 64 64 72 4f 66 50 69 6e 6e 65 64 4f 62  e.AddrOfPinnedOb
4160: 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 53  ject();..      S
4170: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
4180: 6e 64 6c 65 20 73 74 61 74 65 6d 65 6e 74 48 61  ndle statementHa
4190: 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  ndle = null;..  
41a0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 7b      try..      {
41b0: 0d 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20  ..        while 
41c0: 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
41d0: 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 20 7c 7c  orCode.Schema ||
41e0: 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   n == SQLiteErro
41f0: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
4200: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
4210: 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20 72 65  Code.Busy) && re
4220: 74 72 69 65 73 20 3c 20 33 29 0d 0a 20 20 20 20  tries < 3)..    
4230: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4240: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
4250: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
4260: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
4270: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4280: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a        finally /*
4290: 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62   NOTE: Thread.Ab
42a0: 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e  ort() protection
42b0: 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  . */..          
42c0: 7b 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 20  TANDARD..       
42e0: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
42f0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
4300: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74  ite3_prepare_int
4310: 65 72 6f 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c  erop(_sql, psql,
4320: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f   b.Length - 1, o
4330: 75 74 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72  ut stmt, out ptr
4340: 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c  , out len);..#el
4350: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
4360: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
4370: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
4380: 70 72 65 70 61 72 65 28 5f 73 71 6c 2c 20 70 73  prepare(_sql, ps
4390: 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31  ql, b.Length - 1
43a0: 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75 74 20  , out stmt, out 
43b0: 70 74 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ptr);..         
43c0: 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 23 65     len = -1;..#e
43d0: 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 21 4e 45 54  ndif....#if !NET
43e0: 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
43f0: 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 0d 0a  RACE_STATEMENT..
4400: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4410: 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69  e.WriteLine(Stri
4420: 6e 67 2e 46 6f 72 6d 61 74 28 22 50 72 65 70 61  ng.Format("Prepa
4430: 72 65 20 28 7b 30 7d 29 3a 20 7b 31 7d 22 2c 20  re ({0}): {1}", 
4440: 6e 2c 20 73 74 6d 74 29 29 3b 0d 0a 23 65 6e 64  n, stmt));..#end
4450: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
4460: 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69    if ((n == SQLi
4470: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
4480: 26 26 20 28 73 74 6d 74 20 21 3d 20 49 6e 74 50  && (stmt != IntP
4490: 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20  tr.Zero))..     
44a0: 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
44b0: 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53  ntHandle = new S
44c0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
44d0: 6e 64 6c 65 28 5f 73 71 6c 2c 20 73 74 6d 74 29  ndle(_sql, stmt)
44e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
44f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
4500: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
4510: 43 6f 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20  Code.Schema)..  
4520: 20 20 20 20 20 20 20 20 20 20 72 65 74 72 69 65            retrie
4530: 73 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s++;..          
4540: 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
4550: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
4560: 72 6f 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ror)..          
4570: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
4580: 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  f (String.Compar
4590: 65 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  e(GetLastError()
45a0: 2c 20 22 6e 65 61 72 20 5c 22 54 59 50 45 53 5c  , "near \"TYPES\
45b0: 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 22  ": syntax error"
45c0: 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
45d0: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
45e0: 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20  Case) == 0)..   
45f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4600: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 70 6f            int po
4610: 73 20 3d 20 73 74 72 53 71 6c 2e 49 6e 64 65 78  s = strSql.Index
4620: 4f 66 28 27 3b 27 29 3b 0d 0a 20 20 20 20 20 20  Of(';');..      
4630: 20 20 20 20 20 20 20 20 69 66 20 28 70 6f 73 20          if (pos 
4640: 3d 3d 20 2d 31 29 20 70 6f 73 20 3d 20 73 74 72  == -1) pos = str
4650: 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 31 3b 0d  Sql.Length - 1;.
4660: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4670: 20 74 79 70 65 64 65 66 73 20 3d 20 73 74 72 53   typedefs = strS
4680: 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20  ql.Substring(0, 
4690: 70 6f 73 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20  pos + 1);..     
46a0: 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20           strSql 
46b0: 3d 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69  = strSql.Substri
46c0: 6e 67 28 70 6f 73 20 2b 20 31 29 3b 0d 0a 0d 0a  ng(pos + 1);....
46d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
46e0: 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 0d  rRemain = "";...
46f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77  .              w
4700: 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c  hile (cmd == nul
4710: 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67  l && strSql.Leng
4720: 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20  th > 0)..       
4730: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4740: 20 20 20 20 20 20 20 20 20 20 63 6d 64 20 3d 20            cmd = 
4750: 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73 74 72  Prepare(cnn, str
4760: 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20 74  Sql, previous, t
4770: 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74  imeoutMS, out st
4780: 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20  rRemain);..     
4790: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71             strSq
47a0: 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a  l = strRemain;..
47b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
47c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
47d0: 20 69 66 20 28 63 6d 64 20 21 3d 20 6e 75 6c 6c   if (cmd != null
47e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
47f0: 20 20 20 63 6d 64 2e 53 65 74 54 79 70 65 73 28     cmd.SetTypes(
4800: 74 79 70 65 64 65 66 73 29 3b 0d 0a 0d 0a 20 20  typedefs);....  
4810: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4820: 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20  rn cmd;..       
4830: 20 20 20 20 20 7d 0d 0a 23 69 66 20 28 4e 45 54       }..#if (NET
4840: 5f 33 35 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c  _35 || NET_40 ||
4850: 20 4e 45 54 5f 34 35 29 20 26 26 20 21 50 4c 41   NET_45) && !PLA
4860: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
4870: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
4880: 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 62 75      else if (_bu
4890: 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 3d 20  ildingSchema == 
48a0: 66 61 6c 73 65 20 26 26 20 53 74 72 69 6e 67 2e  false && String.
48b0: 43 6f 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45  Compare(GetLastE
48c0: 72 72 6f 72 28 29 2c 20 30 2c 20 22 6e 6f 20 73  rror(), 0, "no s
48d0: 75 63 68 20 74 61 62 6c 65 3a 20 54 45 4d 50 2e  uch table: TEMP.
48e0: 53 43 48 45 4d 41 22 2c 20 30 2c 20 32 36 2c 20  SCHEMA", 0, 26, 
48f0: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
4900: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
4910: 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  se) == 0)..     
4920: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4930: 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61 69          strRemai
4940: 6e 20 3d 20 22 22 3b 0d 0a 20 20 20 20 20 20 20  n = "";..       
4950: 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e 67         _building
4960: 53 63 68 65 6d 61 20 3d 20 74 72 75 65 3b 0d 0a  Schema = true;..
4970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
4980: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
4990: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
49a0: 20 20 20 20 49 53 51 4c 69 74 65 53 63 68 65 6d      ISQLiteSchem
49b0: 61 45 78 74 65 6e 73 69 6f 6e 73 20 65 78 74 20  aExtensions ext 
49c0: 3d 20 28 28 49 53 65 72 76 69 63 65 50 72 6f 76  = ((IServiceProv
49d0: 69 64 65 72 29 53 51 4c 69 74 65 46 61 63 74 6f  ider)SQLiteFacto
49e0: 72 79 2e 49 6e 73 74 61 6e 63 65 29 2e 47 65 74  ry.Instance).Get
49f0: 53 65 72 76 69 63 65 28 74 79 70 65 6f 66 28 49  Service(typeof(I
4a00: 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65  SQLiteSchemaExte
4a10: 6e 73 69 6f 6e 73 29 29 20 61 73 20 49 53 51 4c  nsions)) as ISQL
4a20: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
4a30: 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ons;....        
4a40: 20 20 20 20 20 20 20 20 69 66 20 28 65 78 74 20          if (ext 
4a50: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 65 78 74 2e              ext.
4a70: 42 75 69 6c 64 54 65 6d 70 53 63 68 65 6d 61 28  BuildTempSchema(
4a80: 63 6e 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  cnn);....       
4a90: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
4aa0: 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73  cmd == null && s
4ab0: 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30  trSql.Length > 0
4ac0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4ad0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4ae0: 20 20 20 20 20 20 20 20 63 6d 64 20 3d 20 50 72          cmd = Pr
4af0: 65 70 61 72 65 28 63 6e 6e 2c 20 73 74 72 53 71  epare(cnn, strSq
4b00: 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d  l, previous, tim
4b10: 65 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74 72 52  eoutMS, out strR
4b20: 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20  emain);..       
4b30: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71             strSq
4b40: 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a  l = strRemain;..
4b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
4b70: 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b       return cmd;
4b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4b90: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
4ba0: 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
4bb0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4bc0: 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c             _buil
4bd0: 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 66 61 6c  dingSchema = fal
4be0: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
4bf0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
4c00: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20    }..#endif..   
4c10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4c20: 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d      else if (n =
4c30: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
4c40: 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d  e.Locked || n ==
4c50: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
4c60: 2e 42 75 73 79 29 20 2f 2f 20 4c 6f 63 6b 65 64  .Busy) // Locked
4c70: 20 2d 2d 20 64 65 6c 61 79 20 61 20 73 6d 61 6c   -- delay a smal
4c80: 6c 20 61 6d 6f 75 6e 74 20 62 65 66 6f 72 65 20  l amount before 
4c90: 72 65 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20  retrying..      
4ca0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4cb0: 20 20 20 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e     // Keep tryin
4cc0: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  g..            i
4cd0: 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20  f (rnd == null) 
4ce0: 2f 2f 20 46 69 72 73 74 20 74 69 6d 65 20 77 65  // First time we
4cf0: 27 76 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  've encountered 
4d00: 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20  the lock..      
4d10: 20 20 20 20 20 20 20 20 72 6e 64 20 3d 20 6e 65          rnd = ne
4d20: 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20  w Random();.... 
4d30: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66             // If
4d40: 20 77 65 27 76 65 20 65 78 63 65 65 64 65 64 20   we've exceeded 
4d50: 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69  the command's ti
4d60: 6d 65 6f 75 74 2c 20 67 69 76 65 20 75 70 20 61  meout, give up a
4d70: 6e 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f  nd throw an erro
4d80: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  r..            i
4d90: 66 20 28 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e  f ((uint)Environ
4da0: 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d  ment.TickCount -
4db0: 20 73 74 61 72 74 74 69 63 6b 20 3e 20 74 69 6d   starttick > tim
4dc0: 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20 20 20 20  eoutMS)..       
4dd0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4de0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
4df0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
4e00: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
4e10: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
4e20: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
4e30: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
4e40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4e50: 20 20 20 2f 2f 20 4f 74 68 65 72 77 69 73 65 20     // Otherwise 
4e60: 73 6c 65 65 70 20 66 6f 72 20 61 20 72 61 6e 64  sleep for a rand
4e70: 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d  om amount of tim
4e80: 65 20 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20  e up to 150ms.. 
4e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
4ea0: 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54 68  tem.Threading.Th
4eb0: 72 65 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e  read.Sleep(rnd.N
4ec0: 65 78 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20  ext(1, 150));.. 
4ed0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
4ee0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4ef0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4f00: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
4f10: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
4f20: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
4f30: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
4f40: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20  tError());....  
4f50: 20 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20        strRemain 
4f60: 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  = UTF8ToString(p
4f70: 74 72 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20  tr, len);....   
4f80: 20 20 20 20 20 69 66 20 28 73 74 61 74 65 6d 65       if (stateme
4f90: 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c  ntHandle != null
4fa0: 29 20 63 6d 64 20 3d 20 6e 65 77 20 53 51 4c 69  ) cmd = new SQLi
4fb0: 74 65 53 74 61 74 65 6d 65 6e 74 28 74 68 69 73  teStatement(this
4fc0: 2c 20 66 6c 61 67 73 2c 20 73 74 61 74 65 6d 65  , flags, stateme
4fd0: 6e 74 48 61 6e 64 6c 65 2c 20 73 74 72 53 71 6c  ntHandle, strSql
4fe0: 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20 73 74  .Substring(0, st
4ff0: 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 73 74  rSql.Length - st
5000: 72 52 65 6d 61 69 6e 2e 4c 65 6e 67 74 68 29 2c  rRemain.Length),
5010: 20 70 72 65 76 69 6f 75 73 29 3b 0d 0a 0d 0a 20   previous);.... 
5020: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d         return cm
5030: 64 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  d;..      }..   
5040: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
5050: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 68 61 6e    {..        han
5060: 64 6c 65 2e 46 72 65 65 28 29 3b 0d 0a 20 20 20  dle.Free();..   
5070: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23     }..    }....#
5080: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
5090: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
50a0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61     protected sta
50b0: 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64  tic void LogBind
50c0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
50d0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69  Handle handle, i
50e0: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
50f0: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
5100: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
5110: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
5120: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
5130: 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46  Message(String.F
5140: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
5150: 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61      "Binding sta
5160: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
5170: 74 65 72 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c  ter #{1} as NULL
5180: 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
5190: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
51a0: 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d   index));..    }
51b0: 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ....    protecte
51c0: 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f  d static void Lo
51d0: 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74  gBind(SQLiteStat
51e0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
51f0: 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 56  le, int index, V
5200: 61 6c 75 65 54 79 70 65 20 76 61 6c 75 65 29 0d  alueType value).
5210: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5220: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
5230: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
5240: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
5250: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
5260: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
5270: 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69            "Bindi
5280: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d  ng statement {0}
5290: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61   paramter #{1} a
52a0: 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20  s type {2} with 
52b0: 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e  value {{{3}}}...
52c0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
52d0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
52e0: 64 65 78 2c 20 76 61 6c 75 65 2e 47 65 74 54 79  dex, value.GetTy
52f0: 70 65 28 29 2c 20 76 61 6c 75 65 29 29 3b 0d 0a  pe(), value));..
5300: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
5310: 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
5320: 6e 67 20 46 6f 72 6d 61 74 44 61 74 65 54 69 6d  ng FormatDateTim
5330: 65 28 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65  e(DateTime value
5340: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5350: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
5360: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
5370: 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d  ingBuilder();...
5380: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
5390: 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54 6f 53  Append(value.ToS
53a0: 74 72 69 6e 67 28 22 79 79 79 79 2d 4d 4d 2d 64  tring("yyyy-MM-d
53b0: 64 54 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46  dTHH:mm:ss.FFFFF
53c0: 46 46 4b 22 29 29 3b 0d 0a 20 20 20 20 20 20 20  FFK"));..       
53d0: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27   result.Append('
53e0: 20 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65   ');..        re
53f0: 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75  sult.Append(valu
5400: 65 2e 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20  e.Kind);..      
5410: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
5420: 27 20 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  ' ');..        r
5430: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c  esult.Append(val
5440: 75 65 2e 54 69 63 6b 73 29 3b 0d 0a 0d 0a 20 20  ue.Ticks);....  
5450: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
5460: 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  ult.ToString();.
5470: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
5480: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
5490: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
54a0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
54b0: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
54c0: 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20 76 61  dex, DateTime va
54d0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
54e0: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
54f0: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
5500: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
5510: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
5520: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
5530: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  (..            "
5540: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
5550: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
5560: 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20  {1} as type {2} 
5570: 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d  with value {{{3}
5580: 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  }}...",..       
5590: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
55a0: 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66  r, index, typeof
55b0: 28 44 61 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d  (DateTime), Form
55c0: 61 74 44 61 74 65 54 69 6d 65 28 76 61 6c 75 65  atDateTime(value
55d0: 29 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  )));..    }.... 
55e0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61     protected sta
55f0: 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64  tic void LogBind
5600: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
5610: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69  Handle handle, i
5620: 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67  nt index, string
5630: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
5640: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
5650: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
5660: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
5670: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
5680: 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72  ssage(String.For
5690: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
56a0: 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65    "Binding state
56b0: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
56c0: 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b  r #{1} as type {
56d0: 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b  2} with value {{
56e0: 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20  {3}}}...",..    
56f0: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
5700: 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70  tPtr, index, typ
5710: 65 6f 66 28 53 74 72 69 6e 67 29 2c 20 28 76 61  eof(String), (va
5720: 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76  lue != null) ? v
5730: 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29  alue : "<null>")
5740: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
5750: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
5760: 73 74 72 69 6e 67 20 54 6f 48 65 78 61 64 65 63  string ToHexadec
5770: 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20  imalString(..   
5780: 20 20 20 20 20 62 79 74 65 5b 5d 20 61 72 72 61       byte[] arra
5790: 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  y..        )..  
57a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
57b0: 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d  (array == null).
57c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
57d0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
57e0: 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64       StringBuild
57f0: 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  er result = new 
5800: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 61 72  StringBuilder(ar
5810: 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b  ray.Length * 2);
5820: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  ....        int 
5830: 6c 65 6e 67 74 68 20 3d 20 61 72 72 61 79 2e 4c  length = array.L
5840: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
5850: 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
5860: 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65   = 0; index < le
5870: 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a  ngth; index++)..
5880: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
5890: 6c 74 2e 41 70 70 65 6e 64 28 61 72 72 61 79 5b  lt.Append(array[
58a0: 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28  index].ToString(
58b0: 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  "x2"));....     
58c0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
58d0: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
58e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
58f0: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
5900: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
5910: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
5920: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
5930: 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d  , byte[] value).
5940: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5950: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
5960: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
5970: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
5980: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
5990: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
59a0: 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69            "Bindi
59b0: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d  ng statement {0}
59c0: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61   paramter #{1} a
59d0: 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20  s type {2} with 
59e0: 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e  value {{{3}}}...
59f0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
5a00: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
5a10: 64 65 78 2c 20 74 79 70 65 6f 66 28 42 79 74 65  dex, typeof(Byte
5a20: 5b 5d 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e  []), (value != n
5a30: 75 6c 6c 29 20 3f 20 54 6f 48 65 78 61 64 65 63  ull) ? ToHexadec
5a40: 69 6d 61 6c 53 74 72 69 6e 67 28 76 61 6c 75 65  imalString(value
5a50: 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d  ) : "<null>"));.
5a60: 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a  .    }..#endif..
5a70: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
5a80: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
5a90: 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53  d_Double(SQLiteS
5aa0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
5ab0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5ac0: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
5ad0: 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61  index, double va
5ae0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
5af0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
5b00: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
5b10: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
5b20: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
5b30: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
5b40: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
5b50: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
5b60: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5b70: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
5b80: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5b90: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
5ba0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
5bb0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
5bc0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
5bd0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
5be0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
5bf0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
5c00: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
5c10: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
5c20: 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c  d_double(handle,
5c30: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
5c40: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
5c50: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
5c60: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
5c70: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5c80: 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  bind_double_inte
5c90: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
5ca0: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
5cb0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
5cc0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
5cd0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
5ce0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
5cf0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
5d00: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
5d10: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
5d20: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
5d30: 42 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69 74  Bind_Int32(SQLit
5d40: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
5d50: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5d60: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
5d70: 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 76 61 6c  t index, int val
5d80: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
5d90: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
5da0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
5db0: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
5dc0: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
5dd0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
5de0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
5df0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
5e00: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
5e10: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
5e20: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
5e30: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
5e40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5e50: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
5e60: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
5e70: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
5e80: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
5e90: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
5ea0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
5eb0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
5ec0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68 61 6e  te3_bind_int(han
5ed0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
5ee0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e);..        if 
5ef0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
5f00: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
5f10: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
5f20: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
5f30: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
5f40: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
5f50: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
5f60: 64 5f 55 49 6e 74 33 32 28 53 51 4c 69 74 65 53  d_UInt32(SQLiteS
5f70: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
5f80: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5f90: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
5fa0: 69 6e 64 65 78 2c 20 75 69 6e 74 20 76 61 6c 75  index, uint valu
5fb0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
5fc0: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
5fd0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
5fe0: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
5ff0: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
6000: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
6010: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
6020: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
6030: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6040: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
6050: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6060: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
6070: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6080: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
6090: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
60a0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
60b0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
60c0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
60d0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
60e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
60f0: 65 33 5f 62 69 6e 64 5f 75 69 6e 74 28 68 61 6e  e3_bind_uint(han
6100: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
6110: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e);..        if 
6120: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
6130: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
6140: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
6150: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
6160: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
6170: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
6180: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
6190: 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74  d_Int64(SQLiteSt
61a0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
61b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
61c0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
61d0: 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c 75 65  ndex, long value
61e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
61f0: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
6200: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
6210: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
6220: 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  mt;....#if !PLAT
6230: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
6240: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
6250: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
6260: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6270: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
6280: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6290: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
62a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
62b0: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
62c0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
62d0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
62e0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
62f0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
6300: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6310: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
6320: 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64  nt64(handle, ind
6330: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ex, value);..#el
6340: 73 65 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  se..        SQLi
6350: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
6360: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6370: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
6380: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68  _int64_interop(h
6390: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
63a0: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69  f value);..#endi
63b0: 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  f..        if (n
63c0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
63d0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
63e0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
63f0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
6400: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
6410: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
6420: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
6430: 55 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61  UInt64(SQLiteSta
6440: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
6450: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6460: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
6470: 64 65 78 2c 20 75 6c 6f 6e 67 20 76 61 6c 75 65  dex, ulong value
6480: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
6490: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
64a0: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
64b0: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
64c0: 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  mt;....#if !PLAT
64d0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
64e0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
64f0: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
6500: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6510: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
6520: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6530: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
6540: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6550: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
6560: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
6570: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
6580: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
6590: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
65a0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
65b0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75  s.sqlite3_bind_u
65c0: 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e  int64(handle, in
65d0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  dex, value);..#e
65e0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  lse..        SQL
65f0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
6600: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6610: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
6620: 64 5f 75 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  d_uint64_interop
6630: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
6640: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  ref value);..#en
6650: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20  dif..        if 
6660: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
6670: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
6680: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
6690: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
66a0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
66b0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
66c0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
66d0: 64 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74 61  d_Text(SQLiteSta
66e0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
66f0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6700: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
6710: 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  dex, string valu
6720: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
6730: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
6740: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
6750: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
6760: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
6770: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
6780: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
6790: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
67a0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
67b0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
67c0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
67d0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
67e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
67f0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
6800: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
6810: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
6820: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
6830: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
6840: 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a  UTF8(value);....
6850: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
6860: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
6870: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
6880: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
6890: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
68a0: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
68b0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
68c0: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
68d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
68e0: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
68f0: 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20  dex, b);..      
6900: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
6910: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
6920: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
6930: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6940: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
6950: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
6960: 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c  b, b.Length - 1,
6970: 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
6980: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
6990: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
69a0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
69b0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
69c0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
69d0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
69e0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
69f0: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 61  ide void Bind_Da
6a00: 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61  teTime(SQLiteSta
6a10: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
6a20: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6a30: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
6a40: 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74  dex, DateTime dt
6a50: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
6a60: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
6a70: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
6a80: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
6a90: 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  mt;....#if !PLAT
6aa0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
6ab0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
6ac0: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
6ad0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6ae0: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
6af0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6b00: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
6b10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6b20: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
6b30: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b  dle, index, dt);
6b40: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
6b50: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  dif....        s
6b60: 77 69 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65  witch (_datetime
6b70: 46 6f 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20  Format)..       
6b80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6b90: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
6ba0: 6f 72 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20  ormats.Ticks:.. 
6bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
6bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6bd0: 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65        long value
6be0: 20 3d 20 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a   = dt.Ticks;....
6bf0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
6c00: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
6c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c20: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
6c30: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6c40: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
6c50: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
6c60: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
6c70: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6c80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ca0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
6cb0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
6cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6cd0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
6cf0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
6d00: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
6d10: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
6d20: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
6d30: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
6d40: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
6d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
6d60: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
6d70: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6d80: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
6d90: 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  d_int64_interop(
6da0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
6db0: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ef value);..#end
6dc0: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
6dd0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
6de0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6df0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
6e00: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
6e10: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
6e20: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6e30: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
6e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
6e60: 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f  ase SQLiteDateFo
6e70: 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79 3a  rmats.JulianDay:
6e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6e90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6ea0: 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20           double 
6eb0: 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69 61 6e  value = ToJulian
6ec0: 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20  Day(dt);....#if 
6ed0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
6ee0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
6ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f00: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
6f10: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6f20: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
6f30: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6f40: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
6f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f                Lo
6f80: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
6f90: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
6fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6fb0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
6fc0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
6fd0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
6fe0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6ff0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
7000: 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69  double(handle, i
7010: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
7020: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
7030: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
7040: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
7050: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7060: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  s.sqlite3_bind_d
7070: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61  ouble_interop(ha
7080: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
7090: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
70a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
70b0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
70c0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
70d0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
70e0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
70f0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
7100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7110: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
7120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
7140: 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e SQLiteDateForm
7150: 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 3a 0d 0a  ats.UnixEpoch:..
7160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7170: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7180: 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75         long valu
7190: 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e  e = Convert.ToIn
71a0: 74 36 34 28 64 74 2e 53 75 62 74 72 61 63 74 28  t64(dt.Subtract(
71b0: 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f 74 61 6c  UnixEpoch).Total
71c0: 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a 23 69 66  Seconds);....#if
71d0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
71e0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
71f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7200: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
7210: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7220: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
7230: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7240: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
7250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7260: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
7280: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
7290: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
72c0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
72d0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
72e0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
72f0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
7300: 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69  _int64(handle, i
7310: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
7320: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
7330: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
7340: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
7350: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7360: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
7370: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
7380: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
7390: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
73a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
73b0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
73c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
73d0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
73e0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
73f0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
7400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7410: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
7420: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
7430: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
7440: 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ult:..          
7450: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7460: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74               byt
7470: 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 64  e[] b = ToUTF8(d
7480: 74 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  t);....#if !PLAT
7490: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
74a0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
74b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
74c0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
74d0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
74e0: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
74f0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7500: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
7510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
7520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7530: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
7540: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
7550: 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b);..           
7560: 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64           }..#end
7570: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
7580: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
7590: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
75a0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
75b0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  s.sqlite3_bind_t
75c0: 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ext(handle, inde
75d0: 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  x, b, b.Length -
75e0: 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29   1, (IntPtr)(-1)
75f0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7600: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
7610: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
7620: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
7630: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
7640: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
7650: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7660: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
7670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7680: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
7690: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
76a0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
76b0: 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69  d Bind_Blob(SQLi
76c0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
76d0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
76e0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
76f0: 6e 74 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d  nt index, byte[]
7700: 20 62 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20 20   blobData)..    
7710: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
7720: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
7730: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
7740: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
7750: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
7760: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
7770: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
7780: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
7790: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
77a0: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
77b0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
77c0: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
77d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
77e0: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
77f0: 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 29 3b 0d  dex, blobData);.
7800: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
7810: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  if....        SQ
7820: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
7830: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
7840: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
7850: 6e 64 5f 62 6c 6f 62 28 68 61 6e 64 6c 65 2c 20  nd_blob(handle, 
7860: 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 2c  index, blobData,
7870: 20 62 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74 68   blobData.Length
7880: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
7890: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
78a0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
78b0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
78c0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
78d0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
78e0: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
78f0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
7900: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 4e  ride void Bind_N
7910: 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ull(SQLiteStatem
7920: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
7930: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
7940: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
7950: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7960: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
7970: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
7980: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
7990: 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  mt;....#if !PLAT
79a0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
79b0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
79c0: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
79d0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
79e0: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
79f0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7a00: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
7a10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7a20: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
7a30: 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  dle, index);..  
7a40: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
7a50: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
7a60: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
7a70: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
7a80: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
7a90: 6e 75 6c 6c 28 68 61 6e 64 6c 65 2c 20 69 6e 64  null(handle, ind
7aa0: 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  ex);..        if
7ab0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
7ac0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
7ad0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
7ae0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
7af0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
7b00: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
7b10: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e  override int Bin
7b20: 64 5f 50 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c  d_ParamCount(SQL
7b30: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
7b40: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
7b50: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d  ionFlags flags).
7b60: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
7b70: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
7b80: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
7b90: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
7ba0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 76  ;..        int v
7bb0: 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74  alue = UnsafeNat
7bc0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
7bd0: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
7be0: 72 5f 63 6f 75 6e 74 28 68 61 6e 64 6c 65 29 3b  r_count(handle);
7bf0: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
7c00: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
7c10: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
7c20: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
7c30: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
7c40: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
7c50: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7c60: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
7c70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7c80: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
7c90: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
7ca0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
7cb0: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
7cc0: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
7cd0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
7ce0: 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b      "Statement {
7cf0: 30 7d 20 70 61 72 61 6d 74 65 72 20 63 6f 75 6e  0} paramter coun
7d00: 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20  t is {1}.",..   
7d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e               han
7d20: 64 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c 75 65  dleIntPtr, value
7d30: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
7d40: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
7d50: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
7d60: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
7d70: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
7d80: 73 74 72 69 6e 67 20 42 69 6e 64 5f 50 61 72 61  string Bind_Para
7d90: 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  mName(SQLiteStat
7da0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
7db0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7dc0: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
7dd0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
7de0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
7df0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
7e00: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
7e10: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 73  stmt;..        s
7e20: 74 72 69 6e 67 20 6e 61 6d 65 3b 0d 0a 0d 0a 23  tring name;....#
7e30: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
7e40: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ARD..        int
7e50: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 6e   len;..        n
7e60: 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ame = UTF8ToStri
7e70: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
7e80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
7e90: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
7ea0: 6d 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  me_interop(handl
7eb0: 65 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65  e, index, out le
7ec0: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
7ed0: 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d  ..        name =
7ee0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
7ef0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7f00: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  s.sqlite3_bind_p
7f10: 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 68 61  arameter_name(ha
7f20: 6e 64 6c 65 2c 20 69 6e 64 65 78 29 2c 20 2d 31  ndle, index), -1
7f30: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69  );..#endif....#i
7f40: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
7f50: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
7f60: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
7f70: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
7f80: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
7f90: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
7fa0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
7fb0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
7fc0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
7fd0: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
7fe0: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
7ff0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
8000: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
8010: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
8020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
8030: 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72  tatement {0} par
8040: 61 6d 74 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20  amter #{1} name 
8050: 69 73 20 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20  is {{{2}}}.",.. 
8060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
8070: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
8080: 65 78 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20  ex, name));..   
8090: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
80a0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
80b0: 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d   name;..    }...
80c0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
80d0: 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f  erride int Bind_
80e0: 50 61 72 61 6d 49 6e 64 65 78 28 53 51 4c 69 74  ParamIndex(SQLit
80f0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
8100: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8110: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 73 74  nFlags flags, st
8120: 72 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65 29 0d  ring paramName).
8130: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
8140: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
8150: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
8160: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8170: 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  ;..        int i
8180: 6e 64 65 78 20 3d 20 55 6e 73 61 66 65 4e 61 74  ndex = UnsafeNat
8190: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
81a0: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
81b0: 72 5f 69 6e 64 65 78 28 68 61 6e 64 6c 65 2c 20  r_index(handle, 
81c0: 54 6f 55 54 46 38 28 70 61 72 61 6d 4e 61 6d 65  ToUTF8(paramName
81d0: 29 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  ));....#if !PLAT
81e0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
81f0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
8200: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
8210: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8220: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
8230: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
8240: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
8250: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8260: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
8270: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
8280: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
8290: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
82a0: 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f  essage(String.Fo
82b0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
82c0: 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e         "Statemen
82d0: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 69  t {0} paramter i
82e0: 6e 64 65 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b  ndex of name {{{
82f0: 31 7d 7d 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d  1}}} is #{2}.",.
8300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8310: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70   handleIntPtr, p
8320: 61 72 61 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29  aramName, index)
8330: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
8340: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
8350: 20 72 65 74 75 72 6e 20 69 6e 64 65 78 3b 0d 0a   return index;..
8360: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
8370: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
8380: 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53  nt ColumnCount(S
8390: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
83a0: 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tmt)..    {..   
83b0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
83c0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
83d0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75  lite3_column_cou
83e0: 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  nt(stmt._sqlite_
83f0: 73 74 6d 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  stmt);..    }...
8400: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
8410: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f  erride string Co
8420: 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53  lumnName(SQLiteS
8430: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
8440: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
8450: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
8460: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e  ANDARD..      in
8470: 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65  t len;..      re
8480: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
8490: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
84a0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
84b0: 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  lumn_name_intero
84c0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
84d0: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
84e0: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
84f0: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
8500: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
8510: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
8520: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
8530: 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69  _name(stmt._sqli
8540: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
8550: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   -1);..#endif.. 
8560: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
8570: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54 79  rnal override Ty
8580: 70 65 41 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d  peAffinity Colum
8590: 6e 41 66 66 69 6e 69 74 79 28 53 51 4c 69 74 65  nAffinity(SQLite
85a0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
85b0: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
85c0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
85d0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
85e0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
85f0: 6d 6e 5f 74 79 70 65 28 73 74 6d 74 2e 5f 73 71  mn_type(stmt._sq
8600: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
8610: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
8620: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
8630: 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
8640: 54 79 70 65 28 53 51 4c 69 74 65 53 74 61 74 65  Type(SQLiteState
8650: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
8660: 6e 64 65 78 2c 20 6f 75 74 20 54 79 70 65 41 66  ndex, out TypeAf
8670: 66 69 6e 69 74 79 20 6e 41 66 66 69 6e 69 74 79  finity nAffinity
8680: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8690: 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66 20 21 53  int len;..#if !S
86a0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
86b0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d        IntPtr p =
86c0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
86d0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
86e0: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f 69 6e 74  umn_decltype_int
86f0: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
8700: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
8710: 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ut len);..#else.
8720: 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b  .      len = -1;
8730: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
8740: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
8750: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
8760: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73  olumn_decltype(s
8770: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8780: 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69  , index);..#endi
8790: 66 0d 0a 20 20 20 20 20 20 6e 41 66 66 69 6e 69  f..      nAffini
87a0: 74 79 20 3d 20 43 6f 6c 75 6d 6e 41 66 66 69 6e  ty = ColumnAffin
87b0: 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ity(stmt, index)
87c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70  ;....      if (p
87d0: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
87e0: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
87f0: 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20  ring(p, len);.. 
8800: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
8810: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69   {..        stri
8820: 6e 67 5b 5d 20 61 72 20 3d 20 73 74 6d 74 2e 54  ng[] ar = stmt.T
8830: 79 70 65 44 65 66 69 6e 69 74 69 6f 6e 73 3b 0d  ypeDefinitions;.
8840: 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72 20  .        if (ar 
8850: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
8860: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69    {..          i
8870: 66 20 28 69 6e 64 65 78 20 3c 20 61 72 2e 4c 65  f (index < ar.Le
8880: 6e 67 74 68 20 26 26 20 61 72 5b 69 6e 64 65 78  ngth && ar[index
8890: 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  ] != null)..    
88a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61          return a
88b0: 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20  r[index];..     
88c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65     }..        re
88d0: 74 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74  turn String.Empt
88e0: 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  y;....        //
88f0: 73 77 69 74 63 68 20 28 6e 41 66 66 69 6e 69 74  switch (nAffinit
8900: 79 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7b 0d  y)..        //{.
8910: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73  .        //  cas
8920: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49  e TypeAffinity.I
8930: 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 2f  nt64:..        /
8940: 2f 20 20 20 20 72 65 74 75 72 6e 20 22 42 49 47  /    return "BIG
8950: 49 4e 54 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f  INT";..        /
8960: 2f 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69  /  case TypeAffi
8970: 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20  nity.Double:..  
8980: 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75        //    retu
8990: 72 6e 20 22 44 4f 55 42 4c 45 22 3b 0d 0a 20 20  rn "DOUBLE";..  
89a0: 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54        //  case T
89b0: 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62  ypeAffinity.Blob
89c0: 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  :..        //   
89d0: 20 72 65 74 75 72 6e 20 22 42 4c 4f 42 22 3b 0d   return "BLOB";.
89e0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 64 65 66  .        //  def
89f0: 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 2f  ault:..        /
8a00: 2f 20 20 20 20 72 65 74 75 72 6e 20 22 54 45 58  /    return "TEX
8a10: 54 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7d  T";..        //}
8a20: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
8a30: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
8a40: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f   override int Co
8a50: 6c 75 6d 6e 49 6e 64 65 78 28 53 51 4c 69 74 65  lumnIndex(SQLite
8a60: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
8a70: 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d  string columnNam
8a80: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
8a90: 20 69 6e 74 20 78 20 3d 20 43 6f 6c 75 6d 6e 43   int x = ColumnC
8aa0: 6f 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20  ount(stmt);.... 
8ab0: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20       for (int n 
8ac0: 3d 20 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29  = 0; n < x; n++)
8ad0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
8ae0: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f     if (String.Co
8af0: 6d 70 61 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65  mpare(columnName
8b00: 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d  , ColumnName(stm
8b10: 74 2c 20 6e 29 2c 20 53 74 72 69 6e 67 43 6f 6d  t, n), StringCom
8b20: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
8b30: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
8b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
8b50: 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  rn n;..      }..
8b60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b        return -1;
8b70: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
8b80: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
8b90: 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72   string ColumnOr
8ba0: 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51 4c 69 74  iginalName(SQLit
8bb0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
8bc0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
8bd0: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
8be0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
8bf0: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
8c00: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
8c10: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
8c20: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8c30: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
8c40: 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  me_interop(stmt.
8c50: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
8c60: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  dex, out len), l
8c70: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
8c80: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
8c90: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
8ca0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8cb0: 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
8cc0: 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69  _name(stmt._sqli
8cd0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
8ce0: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   -1);..#endif.. 
8cf0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
8d00: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
8d10: 72 69 6e 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62  ring ColumnDatab
8d20: 61 73 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  aseName(SQLiteSt
8d30: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
8d40: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
8d50: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
8d60: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
8d70: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74   len;..      ret
8d80: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
8d90: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
8da0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
8db0: 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
8dc0: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
8dd0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
8de0: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
8df0: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
8e00: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
8e10: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
8e20: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
8e30: 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
8e40: 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c  e_name(stmt._sql
8e50: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
8e60: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
8e70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
8e80: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
8e90: 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c  tring ColumnTabl
8ea0: 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eName(SQLiteStat
8eb0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
8ec0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
8ed0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
8ee0: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
8ef0: 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  en;..      retur
8f00: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
8f10: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
8f20: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
8f30: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74  n_table_name_int
8f40: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
8f50: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
8f60: 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ut len), len);..
8f70: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
8f80: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
8f90: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
8fa0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
8fb0: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73  umn_table_name(s
8fc0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8fd0: 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a  , index), -1);..
8fe0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
8ff0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
9000: 65 72 72 69 64 65 20 76 6f 69 64 20 43 6f 6c 75  erride void Colu
9010: 6d 6e 4d 65 74 61 44 61 74 61 28 73 74 72 69 6e  mnMetaData(strin
9020: 67 20 64 61 74 61 42 61 73 65 2c 20 73 74 72 69  g dataBase, stri
9030: 6e 67 20 74 61 62 6c 65 2c 20 73 74 72 69 6e 67  ng table, string
9040: 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 73 74 72   column, out str
9050: 69 6e 67 20 64 61 74 61 54 79 70 65 2c 20 6f 75  ing dataType, ou
9060: 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65  t string collate
9070: 53 65 71 75 65 6e 63 65 2c 20 6f 75 74 20 62 6f  Sequence, out bo
9080: 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20  ol notNull, out 
9090: 62 6f 6f 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c  bool primaryKey,
90a0: 20 6f 75 74 20 62 6f 6f 6c 20 61 75 74 6f 49 6e   out bool autoIn
90b0: 63 72 65 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d  crement)..    {.
90c0: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 64 61  .      IntPtr da
90d0: 74 61 54 79 70 65 50 74 72 3b 0d 0a 20 20 20 20  taTypePtr;..    
90e0: 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 53 65 71    IntPtr collSeq
90f0: 50 74 72 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  Ptr;..      int 
9100: 6e 6e 6f 74 4e 75 6c 6c 3b 0d 0a 20 20 20 20 20  nnotNull;..     
9110: 20 69 6e 74 20 6e 70 72 69 6d 61 72 79 4b 65 79   int nprimaryKey
9120: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 61 75  ;..      int nau
9130: 74 6f 49 6e 63 3b 0d 0a 20 20 20 20 20 20 53 51  toInc;..      SQ
9140: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b  LiteErrorCode n;
9150: 0d 0a 20 20 20 20 20 20 69 6e 74 20 64 74 4c 65  ..      int dtLe
9160: 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 73  n;..      int cs
9170: 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  Len;....#if !SQL
9180: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
9190: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
91a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
91b0: 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
91c0: 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74 65 72 6f  _metadata_intero
91d0: 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64  p(_sql, ToUTF8(d
91e0: 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38  ataBase), ToUTF8
91f0: 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28  (table), ToUTF8(
9200: 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 64 61 74  column), out dat
9210: 61 54 79 70 65 50 74 72 2c 20 6f 75 74 20 63 6f  aTypePtr, out co
9220: 6c 6c 53 65 71 50 74 72 2c 20 6f 75 74 20 6e 6e  llSeqPtr, out nn
9230: 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e 70 72 69  otNull, out npri
9240: 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20 6e 61 75  maryKey, out nau
9250: 74 6f 49 6e 63 2c 20 6f 75 74 20 64 74 4c 65 6e  toInc, out dtLen
9260: 2c 20 6f 75 74 20 63 73 4c 65 6e 29 3b 0d 0a 23  , out csLen);..#
9270: 65 6c 73 65 0d 0a 20 20 20 20 20 20 64 74 4c 65  else..      dtLe
9280: 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 63  n = -1;..      c
9290: 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20  sLen = -1;....  
92a0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
92b0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
92c0: 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
92d0: 5f 6d 65 74 61 64 61 74 61 28 5f 73 71 6c 2c 20  _metadata(_sql, 
92e0: 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65 29  ToUTF8(dataBase)
92f0: 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c  , ToUTF8(table),
9300: 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c   ToUTF8(column),
9310: 20 6f 75 74 20 64 61 74 61 54 79 70 65 50 74 72   out dataTypePtr
9320: 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71 50 74 72  , out collSeqPtr
9330: 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20  , out nnotNull, 
9340: 6f 75 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c  out nprimaryKey,
9350: 20 6f 75 74 20 6e 61 75 74 6f 49 6e 63 29 3b 0d   out nautoInc);.
9360: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69  .#endif..      i
9370: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
9380: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
9390: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
93a0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
93b0: 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
93c0: 20 20 20 64 61 74 61 54 79 70 65 20 3d 20 55 54     dataType = UT
93d0: 46 38 54 6f 53 74 72 69 6e 67 28 64 61 74 61 54  F8ToString(dataT
93e0: 79 70 65 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d  ypePtr, dtLen);.
93f0: 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 65 53 65  .      collateSe
9400: 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53  quence = UTF8ToS
9410: 74 72 69 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72  tring(collSeqPtr
9420: 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20  , csLen);....   
9430: 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e     notNull = (nn
9440: 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20  otNull == 1);.. 
9450: 20 20 20 20 20 70 72 69 6d 61 72 79 4b 65 79 20       primaryKey 
9460: 3d 20 28 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d  = (nprimaryKey =
9470: 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 61 75 74  = 1);..      aut
9480: 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61  oIncrement = (na
9490: 75 74 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20  utoInc == 1);.. 
94a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
94b0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f  rnal override do
94c0: 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 53  uble GetDouble(S
94d0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
94e0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
94f0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f  .    {..      do
9500: 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66  uble value;..#if
9510: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
9520: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
9530: 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66     value = Unsaf
9540: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9550: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
9560: 75 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  uble(stmt._sqlit
9570: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
9580: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e  .#else..      Un
9590: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
95a0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
95b0: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
95c0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
95d0: 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 76 61  t, index, out va
95e0: 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lue);..#endif.. 
95f0: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
9600: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
9610: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
9620: 64 65 20 69 6e 74 20 47 65 74 49 6e 74 33 32 28  de int GetInt32(
9630: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
9640: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
9650: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
9660: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
9670: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9680: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d  3_column_int(stm
9690: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
96a0: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a  index);..    }..
96b0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
96c0: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
96d0: 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74  Int64(SQLiteStat
96e0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
96f0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
9700: 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 3b       long value;
9710: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
9720: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
9730: 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
9740: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9750: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
9760: 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e 5f 73  mn_int64(stmt._s
9770: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
9780: 78 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  x);..#else..    
9790: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
97a0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
97b0: 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74 65 72  lumn_int64_inter
97c0: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
97d0: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74  stmt, index, out
97e0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
97f0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
9800: 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alue;..    }....
9810: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9820: 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74  rride string Get
9830: 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74 65  Text(SQLiteState
9840: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
9850: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
9860: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
9870: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
9880: 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n;..      return
9890: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
98a0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
98b0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
98c0: 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74  _text_interop(st
98d0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
98e0: 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29   index, out len)
98f0: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
9900: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
9910: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
9920: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9930: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
9940: 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
9950: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  tmt, index), -1)
9960: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
9970: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
9980: 20 6f 76 65 72 72 69 64 65 20 44 61 74 65 54 69   override DateTi
9990: 6d 65 20 47 65 74 44 61 74 65 54 69 6d 65 28 53  me GetDateTime(S
99a0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
99b0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
99c0: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
99d0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
99e0: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20      int len;..  
99f0: 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74      return ToDat
9a00: 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69  eTime(UnsafeNati
9a10: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9a20: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e  3_column_text_in
9a30: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
9a40: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
9a50: 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  out len), len);.
9a60: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
9a70: 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28  turn ToDateTime(
9a80: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9a90: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
9aa0: 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71  mn_text(stmt._sq
9ab0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
9ac0: 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  ), -1);..#endif.
9ad0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
9ae0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
9af0: 6c 6f 6e 67 20 47 65 74 42 79 74 65 73 28 53 51  long GetBytes(SQ
9b00: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
9b10: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69  mt, int index, i
9b20: 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20  nt nDataOffset, 
9b30: 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e  byte[] bDest, in
9b40: 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c  t nStart, int nL
9b50: 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20  ength)..    {.. 
9b60: 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20       int nlen = 
9b70: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9b80: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
9b90: 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73  mn_bytes(stmt._s
9ba0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
9bb0: 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20  x);....      // 
9bc0: 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f  If no destinatio
9bd0: 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e  n buffer, return
9be0: 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64   the size needed
9bf0: 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65  ...      if (bDe
9c00: 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75  st == null) retu
9c10: 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20  rn nlen;....    
9c20: 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20    int nCopied = 
9c30: 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  nLength;....    
9c40: 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20    if (nCopied + 
9c50: 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c  nStart > bDest.L
9c60: 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d  ength) nCopied =
9c70: 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20   bDest.Length - 
9c80: 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69  nStart;..      i
9c90: 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61  f (nCopied + nDa
9ca0: 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29  taOffset > nlen)
9cb0: 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20   nCopied = nlen 
9cc0: 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a  - nDataOffset;..
9cd0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
9ce0: 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  ied > 0)..      
9cf0: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
9d00: 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61  r ptr = UnsafeNa
9d10: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9d20: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28  te3_column_blob(
9d30: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
9d40: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20  t, index);....  
9d50: 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f        Marshal.Co
9d60: 70 79 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e  py((IntPtr)(ptr.
9d70: 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74  ToInt64() + nDat
9d80: 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c  aOffset), bDest,
9d90: 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64   nStart, nCopied
9da0: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
9db0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b     else..      {
9dc0: 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65  ..        nCopie
9dd0: 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d  d = 0;..      }.
9de0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
9df0: 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d  nCopied;..    }.
9e00: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
9e10: 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
9e20: 74 43 68 61 72 73 28 53 51 4c 69 74 65 53 74 61  tChars(SQLiteSta
9e30: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
9e40: 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74   index, int nDat
9e50: 61 4f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d 20  aOffset, char[] 
9e60: 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72  bDest, int nStar
9e70: 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d  t, int nLength).
9e80: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
9e90: 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69  t nlen;..      i
9ea0: 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65  nt nCopied = nLe
9eb0: 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 73  ngth;....      s
9ec0: 74 72 69 6e 67 20 73 74 72 20 3d 20 47 65 74 54  tring str = GetT
9ed0: 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ext(stmt, index)
9ee0: 3b 0d 0a 20 20 20 20 20 20 6e 6c 65 6e 20 3d 20  ;..      nlen = 
9ef0: 73 74 72 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20  str.Length;.... 
9f00: 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d       if (bDest =
9f10: 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e  = null) return n
9f20: 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  len;....      if
9f30: 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61   (nCopied + nSta
9f40: 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74  rt > bDest.Lengt
9f50: 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65  h) nCopied = bDe
9f60: 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61  st.Length - nSta
9f70: 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  rt;..      if (n
9f80: 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66  Copied + nDataOf
9f90: 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f  fset > nlen) nCo
9fa0: 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44  pied = nlen - nD
9fb0: 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20  ataOffset;....  
9fc0: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
9fd0: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 73 74  > 0)..        st
9fe0: 72 2e 43 6f 70 79 54 6f 28 6e 44 61 74 61 4f 66  r.CopyTo(nDataOf
9ff0: 66 73 65 74 2c 20 62 44 65 73 74 2c 20 6e 53 74  fset, bDest, nSt
a000: 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a  art, nCopied);..
a010: 20 20 20 20 20 20 65 6c 73 65 20 6e 43 6f 70 69        else nCopi
a020: 65 64 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  ed = 0;....     
a030: 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b   return nCopied;
a040: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
a050: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
a060: 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c   bool IsNull(SQL
a070: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
a080: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
a090: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
a0a0: 72 6e 20 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  rn (ColumnAffini
a0b0: 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  ty(stmt, index) 
a0c0: 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  == TypeAffinity.
a0d0: 4e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Null);..    }...
a0e0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
a0f0: 65 72 72 69 64 65 20 69 6e 74 20 41 67 67 72 65  erride int Aggre
a100: 67 61 74 65 43 6f 75 6e 74 28 49 6e 74 50 74 72  gateCount(IntPtr
a110: 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b   context)..    {
a120: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
a130: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
a140: 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65  ds.sqlite3_aggre
a150: 67 61 74 65 5f 63 6f 75 6e 74 28 63 6f 6e 74 65  gate_count(conte
a160: 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  xt);..    }.... 
a170: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
a180: 72 69 64 65 20 76 6f 69 64 20 43 72 65 61 74 65  ride void Create
a190: 46 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67 20  Function(string 
a1a0: 73 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74  strFunction, int
a1b0: 20 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65   nArgs, bool nee
a1c0: 64 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65  dCollSeq, SQLite
a1d0: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53  Callback func, S
a1e0: 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75  QLiteCallback fu
a1f0: 6e 63 73 74 65 70 2c 20 53 51 4c 69 74 65 46 69  ncstep, SQLiteFi
a200: 6e 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  nalCallback func
a210: 66 69 6e 61 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20  final)..    {.. 
a220: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
a230: 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21  Code n;....#if !
a240: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
a250: 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
a260: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a270: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
a280: 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f  nction_interop(_
a290: 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46  sql, ToUTF8(strF
a2a0: 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c  unction), nArgs,
a2b0: 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   4, IntPtr.Zero,
a2c0: 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c   func, funcstep,
a2d0: 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65   funcfinal, (nee
a2e0: 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65  dCollSeq == true
a2f0: 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 20 20 20  ) ? 1 : 0);..   
a300: 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
a310: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
a320: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
a330: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a340: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
a350: 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f  interop(_sql, To
a360: 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e  UTF8(strFunction
a370: 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74  ), nArgs, 1, Int
a380: 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20  Ptr.Zero, func, 
a390: 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69  funcstep, funcfi
a3a0: 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65  nal, (needCollSe
a3b0: 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a  q == true) ? 1 :
a3c0: 20 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20   0);..#else..   
a3d0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
a3e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a3f0: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
a400: 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  on(_sql, ToUTF8(
a410: 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41  strFunction), nA
a420: 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a  rgs, 4, IntPtr.Z
a430: 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ero, func, funcs
a440: 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b  tep, funcfinal);
a450: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
a460: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
a470: 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e  .Ok) n = UnsafeN
a480: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a490: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
a4a0: 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46  tion(_sql, ToUTF
a4b0: 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
a4c0: 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72  nArgs, 1, IntPtr
a4d0: 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
a4e0: 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
a4f0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
a500: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
a510: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
a520: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
a530: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
a540: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
a550: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
a560: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
a570: 64 20 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f  d CreateCollatio
a580: 6e 28 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 6c  n(string strColl
a590: 61 74 69 6f 6e 2c 20 53 51 4c 69 74 65 43 6f 6c  ation, SQLiteCol
a5a0: 6c 61 74 69 6f 6e 20 66 75 6e 63 2c 20 53 51 4c  lation func, SQL
a5b0: 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e  iteCollation fun
a5c0: 63 31 36 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  c16)..    {..   
a5d0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
a5e0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
a5f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a600: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
a610: 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  ion(_sql, ToUTF8
a620: 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20  (strCollation), 
a630: 32 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  2, IntPtr.Zero, 
a640: 66 75 6e 63 31 36 29 3b 0d 0a 20 20 20 20 20 20  func16);..      
a650: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
a660: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d  rrorCode.Ok) n =
a670: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
a680: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
a690: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73  ate_collation(_s
a6a0: 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f  ql, ToUTF8(strCo
a6b0: 6c 6c 61 74 69 6f 6e 29 2c 20 31 2c 20 49 6e 74  llation), 1, Int
a6c0: 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 29 3b  Ptr.Zero, func);
a6d0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
a6e0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
a6f0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
a700: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
a710: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
a720: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
a730: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a740: 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f  de int ContextCo
a750: 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c  llateCompare(Col
a760: 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
a770: 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63  um enc, IntPtr c
a780: 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 73  ontext, string s
a790: 31 2c 20 73 74 72 69 6e 67 20 73 32 29 0d 0a 20  1, string s2).. 
a7a0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
a7b0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
a7c0: 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20    byte[] b1;..  
a7d0: 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a      byte[] b2;..
a7e0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78        System.Tex
a7f0: 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65  t.Encoding conve
a800: 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rter = null;....
a810: 20 20 20 20 20 20 73 77 69 74 63 68 20 28 65 6e        switch (en
a820: 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  c)..      {..   
a830: 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
a840: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
a850: 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20  UTF8:..         
a860: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
a870: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
a880: 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20  g.UTF8;..       
a890: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
a8a0: 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
a8b0: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
a8c0: 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16LE:..        
a8d0: 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
a8e0: 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
a8f0: 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20  ng.Unicode;..   
a900: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
a910: 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
a920: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
a930: 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20  m.UTF16BE:..    
a940: 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
a950: 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
a960: 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e  coding.BigEndian
a970: 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
a980: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
a990: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20    }....      b1 
a9a0: 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
a9b0: 79 74 65 73 28 73 31 29 3b 0d 0a 20 20 20 20 20  ytes(s1);..     
a9c0: 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e   b2 = converter.
a9d0: 47 65 74 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d  GetBytes(s2);...
a9e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
a9f0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
aa00: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  s.sqlite3_contex
aa10: 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e  t_collcompare_in
aa20: 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62  terop(context, b
aa30: 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32  1, b1.Length, b2
aa40: 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23  , b2.Length);..#
aa50: 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
aa60: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
aa70: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
aa80: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
aa90: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
aaa0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e  override int Con
aab0: 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61  textCollateCompa
aac0: 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  re(CollationEnco
aad0: 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e  dingEnum enc, In
aae0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 63 68  tPtr context, ch
aaf0: 61 72 5b 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20  ar[] c1, char[] 
ab00: 63 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  c2)..    {..#if 
ab10: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
ab20: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
ab30: 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  1;..      byte[]
ab40: 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74   b2;..      Syst
ab50: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
ab60: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c   converter = nul
ab70: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74  l;....      swit
ab80: 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20  ch (enc)..      
ab90: 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  {..        case 
aba0: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
abb0: 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20  gEnum.UTF8:..   
abc0: 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72         converter
abd0: 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45   = System.Text.E
abe0: 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20  ncoding.UTF8;.. 
abf0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
ac00: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
ac10: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
ac20: 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20  num.UTF16LE:..  
ac30: 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
ac40: 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
ac50: 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65  Encoding.Unicode
ac60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
ac70: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
ac80: 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
ac90: 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a  ingEnum.UTF16BE:
aca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
acb0: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
acc0: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67  ext.Encoding.Big
acd0: 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a  EndianUnicode;..
ace0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
acf0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
ad00: 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65     b1 = converte
ad10: 72 2e 47 65 74 42 79 74 65 73 28 63 31 29 3b 0d  r.GetBytes(c1);.
ad20: 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76  .      b2 = conv
ad30: 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 63  erter.GetBytes(c
ad40: 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  2);....      ret
ad50: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
ad60: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
ad70: 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70  context_collcomp
ad80: 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  are_interop(cont
ad90: 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67  ext, b1, b1.Leng
ada0: 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74  th, b2, b2.Lengt
adb0: 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  h);..#else..    
adc0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
add0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
ade0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
adf0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
ae00: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 43  ernal override C
ae10: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
ae20: 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71   GetCollationSeq
ae30: 75 65 6e 63 65 28 53 51 4c 69 74 65 46 75 6e 63  uence(SQLiteFunc
ae40: 74 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74  tion func, IntPt
ae50: 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20  r context)..    
ae60: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
ae70: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 43  TANDARD..      C
ae80: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
ae90: 20 73 65 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61   seq = new Colla
aea0: 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d  tionSequence();.
aeb0: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
aec0: 0a 20 20 20 20 20 20 69 6e 74 20 74 79 70 65 3b  .      int type;
aed0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 65 6e 63 3b  ..      int enc;
aee0: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
aef0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
af00: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
af10: 6f 6e 74 65 78 74 5f 63 6f 6c 6c 73 65 71 5f 69  ontext_collseq_i
af20: 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20  nterop(context, 
af30: 6f 75 74 20 74 79 70 65 2c 20 6f 75 74 20 65 6e  out type, out en
af40: 63 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 0d 0a  c, out len);....
af50: 20 20 20 20 20 20 69 66 20 28 70 20 21 3d 20 6e        if (p != n
af60: 75 6c 6c 29 20 73 65 71 2e 4e 61 6d 65 20 3d 20  ull) seq.Name = 
af70: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20  UTF8ToString(p, 
af80: 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 73 65 71  len);..      seq
af90: 2e 54 79 70 65 20 3d 20 28 43 6f 6c 6c 61 74 69  .Type = (Collati
afa0: 6f 6e 54 79 70 65 45 6e 75 6d 29 74 79 70 65 3b  onTypeEnum)type;
afb0: 0d 0a 20 20 20 20 20 20 73 65 71 2e 5f 66 75 6e  ..      seq._fun
afc0: 63 20 3d 20 66 75 6e 63 3b 0d 0a 20 20 20 20 20  c = func;..     
afd0: 20 73 65 71 2e 45 6e 63 6f 64 69 6e 67 20 3d 20   seq.Encoding = 
afe0: 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69  (CollationEncodi
aff0: 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20  ngEnum)enc;.... 
b000: 20 20 20 20 20 72 65 74 75 72 6e 20 73 65 71 3b       return seq;
b010: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
b020: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
b030: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
b040: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
b050: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
b060: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
b070: 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 42 79   GetParamValueBy
b080: 74 65 73 28 49 6e 74 50 74 72 20 70 2c 20 69 6e  tes(IntPtr p, in
b090: 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62  t nDataOffset, b
b0a0: 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74  yte[] bDest, int
b0b0: 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65   nStart, int nLe
b0c0: 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ngth)..    {..  
b0d0: 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55      int nlen = U
b0e0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b0f0: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
b100: 5f 62 79 74 65 73 28 70 29 3b 0d 0a 0d 0a 20 20  _bytes(p);....  
b110: 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73      // If no des
b120: 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c  tination buffer,
b130: 20 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65   return the size
b140: 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20   needed...      
b150: 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c  if (bDest == nul
b160: 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d  l) return nlen;.
b170: 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f  ...      int nCo
b180: 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d  pied = nLength;.
b190: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
b1a0: 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20  pied + nStart > 
b1b0: 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43  bDest.Length) nC
b1c0: 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65  opied = bDest.Le
b1d0: 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a  ngth - nStart;..
b1e0: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
b1f0: 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20  d + nDataOffset 
b200: 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20  > nlen) nCopied 
b210: 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66  = nlen - nDataOf
b220: 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  fset;....      i
b230: 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d  f (nCopied > 0).
b240: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
b250: 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55    IntPtr ptr = U
b260: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b270: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
b280: 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20 20  _blob(p);....   
b290: 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70       Marshal.Cop
b2a0: 79 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54  y((IntPtr)(ptr.T
b2b0: 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61  oInt64() + nData
b2c0: 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20  Offset), bDest, 
b2d0: 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29  nStart, nCopied)
b2e0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
b2f0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d    else..      {.
b300: 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64  .        nCopied
b310: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a   = 0;..      }..
b320: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e  ..      return n
b330: 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a  Copied;..    }..
b340: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
b350: 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47  verride double G
b360: 65 74 50 61 72 61 6d 56 61 6c 75 65 44 6f 75 62  etParamValueDoub
b370: 6c 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a  le(IntPtr ptr)..
b380: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75      {..      dou
b390: 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20  ble value;..#if 
b3a0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
b3b0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
b3c0: 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65    value = Unsafe
b3d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b3e0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62  lite3_value_doub
b3f0: 6c 65 28 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d  le(ptr);..#else.
b400: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
b410: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b420: 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f  e3_value_double_
b430: 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74  interop(ptr, out
b440: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
b450: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
b460: 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alue;..    }....
b470: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
b480: 72 72 69 64 65 20 69 6e 74 20 47 65 74 50 61 72  rride int GetPar
b490: 61 6d 56 61 6c 75 65 49 6e 74 33 32 28 49 6e 74  amValueInt32(Int
b4a0: 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
b4b0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
b4c0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
b4d0: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
b4e0: 69 6e 74 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d  int(ptr);..    }
b4f0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
b500: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
b510: 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 36  etParamValueInt6
b520: 34 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  4(IntPtr ptr).. 
b530: 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 36     {..      Int6
b540: 34 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50  4 value;..#if !P
b550: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
b560: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
b570: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
b580: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b590: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28  te3_value_int64(
b5a0: 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ptr);..#else..  
b5b0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
b5c0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b5d0: 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65  value_int64_inte
b5e0: 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 76 61 6c  rop(ptr, out val
b5f0: 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ue);..#endif..  
b600: 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65      return value
b610: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
b620: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
b630: 65 20 73 74 72 69 6e 67 20 47 65 74 50 61 72 61  e string GetPara
b640: 6d 56 61 6c 75 65 54 65 78 74 28 49 6e 74 50 74  mValueText(IntPt
b650: 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23  r ptr)..    {..#
b660: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
b670: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
b680: 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  en;..      retur
b690: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
b6a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b6b0: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
b6c0: 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 70 74  _text_interop(pt
b6d0: 72 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e  r, out len), len
b6e0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
b6f0: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
b700: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
b710: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
b720: 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 74 72 29  _value_text(ptr)
b730: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
b740: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
b750: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54  ernal override T
b760: 79 70 65 41 66 66 69 6e 69 74 79 20 47 65 74 50  ypeAffinity GetP
b770: 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28 49 6e  aramValueType(In
b780: 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
b790: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
b7a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b7b0: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
b7c0: 5f 74 79 70 65 28 70 74 72 29 3b 0d 0a 20 20 20  _type(ptr);..   
b7d0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
b7e0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
b7f0: 20 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e 74 50   ReturnBlob(IntP
b800: 74 72 20 63 6f 6e 74 65 78 74 2c 20 62 79 74 65  tr context, byte
b810: 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  [] value)..    {
b820: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
b830: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b840: 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28  te3_result_blob(
b850: 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 2c 20  context, value, 
b860: 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20 28 49  value.Length, (I
b870: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
b880: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
b890: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
b8a0: 64 20 52 65 74 75 72 6e 44 6f 75 62 6c 65 28 49  d ReturnDouble(I
b8b0: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 64  ntPtr context, d
b8c0: 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20  ouble value)..  
b8d0: 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
b8e0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
b8f0: 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  ORK..      Unsaf
b900: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b910: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f  qlite3_result_do
b920: 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 76 61  uble(context, va
b930: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
b940: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
b950: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b960: 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e  result_double_in
b970: 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72  terop(context, r
b980: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ef value);..#end
b990: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
b9a0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b9b0: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 45 72  de void ReturnEr
b9c0: 72 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ror(IntPtr conte
b9d0: 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  xt, string value
b9e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
b9f0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
ba00: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
ba10: 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74  lt_error(context
ba20: 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c  , ToUTF8(value),
ba30: 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d   value.Length);.
ba40: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
ba50: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
ba60: 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 33 32  void ReturnInt32
ba70: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
ba80: 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20   int value)..   
ba90: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
baa0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
bab0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
bac0: 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29  (context, value)
bad0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
bae0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
baf0: 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74  e void ReturnInt
bb00: 36 34 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  64(IntPtr contex
bb10: 74 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a  t, long value)..
bb20: 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
bb30: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
bb40: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73  EWORK..      Uns
bb50: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
bb60: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
bb70: 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20 76  int64(context, v
bb80: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
bb90: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
bba0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
bbb0: 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e  _result_int64_in
bbc0: 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72  terop(context, r
bbd0: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ef value);..#end
bbe0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
bbf0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
bc00: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 4e 75  de void ReturnNu
bc10: 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  ll(IntPtr contex
bc20: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
bc30: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
bc40: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
bc50: 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74  ult_null(context
bc60: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
bc70: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
bc80: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 54 65  de void ReturnTe
bc90: 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  xt(IntPtr contex
bca0: 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29  t, string value)
bcb0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 62  ..    {..      b
bcc0: 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38  yte[] b = ToUTF8
bcd0: 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20  (value);..      
bce0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
bcf0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
bd00: 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c  lt_text(context,
bd10: 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20   ToUTF8(value), 
bd20: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49  b.Length - 1, (I
bd30: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
bd40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
bd50: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 49 6e 74  nal override Int
bd60: 50 74 72 20 41 67 67 72 65 67 61 74 65 43 6f 6e  Ptr AggregateCon
bd70: 74 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74  text(IntPtr cont
bd80: 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ext)..    {..   
bd90: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
bda0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
bdb0: 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f  lite3_aggregate_
bdc0: 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 2c  context(context,
bdd0: 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   1);..    }.... 
bde0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
bdf0: 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65  ..    /// Enable
be00: 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78  s or disabled ex
be10: 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e 67 20  tension loading 
be20: 62 79 20 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20  by SQLite...    
be30: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
be40: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
be50: 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20  ame="bOnOff">.. 
be60: 20 20 20 2f 2f 2f 20 54 72 75 65 20 74 6f 20 65     /// True to e
be70: 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67 20 6f 66  nable loading of
be80: 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20 66 61 6c   extensions, fal
be90: 73 65 20 74 6f 20 64 69 73 61 62 6c 65 2e 0d 0a  se to disable...
bea0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
beb0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
bec0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
bed0: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 62 6f  LoadExtension(bo
bee0: 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20  ol bOnOff)..    
bef0: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
bf00: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
bf10: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
bf20: 64 73 2e 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  ds.sqlite3_enabl
bf30: 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e_load_extension
bf40: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  (..            _
bf50: 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d  sql, (bOnOff ? -
bf60: 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20  1 : 0));....    
bf70: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
bf80: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
bf90: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
bfa0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
bfb0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
bfc0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
bfd0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
bfe0: 2f 2f 2f 20 4c 6f 61 64 73 20 61 20 53 51 4c 69  /// Loads a SQLi
bff0: 74 65 20 65 78 74 65 6e 73 69 6f 6e 20 6c 69 62  te extension lib
c000: 72 61 72 79 20 66 72 6f 6d 20 74 68 65 20 6e 61  rary from the na
c010: 6d 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 2f  med file...    /
c020: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
c030: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
c040: 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a  me="fileName">..
c050: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65      /// The name
c060: 20 6f 66 20 74 68 65 20 64 79 6e 61 6d 69 63 20   of the dynamic 
c070: 6c 69 6e 6b 20 6c 69 62 72 61 72 79 20 66 69 6c  link library fil
c080: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
c090: 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20   extension...   
c0a0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
c0b0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
c0c0: 6d 65 3d 22 70 72 6f 63 4e 61 6d 65 22 3e 0d 0a  me="procName">..
c0d0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65      /// The name
c0e0: 20 6f 66 20 74 68 65 20 65 78 70 6f 72 74 65 64   of the exported
c0f0: 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 64 20 74   function used t
c100: 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65  o initialize the
c110: 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20   extension...   
c120: 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c 2c 20 74 68   /// If null, th
c130: 65 20 64 65 66 61 75 6c 74 20 22 73 71 6c 69 74  e default "sqlit
c140: 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69  e3_extension_ini
c150: 74 22 20 77 69 6c 6c 20 62 65 20 75 73 65 64 2e  t" will be used.
c160: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
c170: 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
c180: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c   override void L
c190: 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 73 74 72  oadExtension(str
c1a0: 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 20 73 74  ing fileName, st
c1b0: 72 69 6e 67 20 70 72 6f 63 4e 61 6d 65 29 0d 0a  ring procName)..
c1c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
c1d0: 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d 3d 20 6e  f (fileName == n
c1e0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
c1f0: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
c200: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
c210: 6e 28 22 66 69 6c 65 4e 61 6d 65 22 29 3b 0d 0a  n("fileName");..
c220: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
c230: 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72   pError = IntPtr
c240: 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Zero;....      
c250: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
c260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79  ..            by
c270: 74 65 5b 5d 20 75 74 66 38 46 69 6c 65 4e 61 6d  te[] utf8FileNam
c280: 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67  e = UTF8Encoding
c290: 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73 28 66  .UTF8.GetBytes(f
c2a0: 69 6c 65 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b  ileName + '\0');
c2b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79  ..            by
c2c0: 74 65 5b 5d 20 75 74 66 38 50 72 6f 63 4e 61 6d  te[] utf8ProcNam
c2d0: 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  e = null;....   
c2e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 72 6f           if (pro
c2f0: 63 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  cName != null)..
c300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c310: 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20 55  utf8ProcName = U
c320: 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38  TF8Encoding.UTF8
c330: 2e 47 65 74 42 79 74 65 73 28 70 72 6f 63 4e 61  .GetBytes(procNa
c340: 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 0d 0a 20  me + '\0');.... 
c350: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
c360: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
c370: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
c380: 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f  ds.sqlite3_load_
c390: 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20  extension(..    
c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
c3b0: 2c 20 75 74 66 38 46 69 6c 65 4e 61 6d 65 2c 20  , utf8FileName, 
c3c0: 75 74 66 38 50 72 6f 63 4e 61 6d 65 2c 20 72 65  utf8ProcName, re
c3d0: 66 20 70 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20  f pError);....  
c3e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
c3f0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
c400: 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
c410: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
c420: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
c430: 6e 28 6e 2c 20 55 54 46 38 54 6f 53 74 72 69 6e  n(n, UTF8ToStrin
c440: 67 28 70 45 72 72 6f 72 2c 20 2d 31 29 29 3b 0d  g(pError, -1));.
c450: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
c460: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
c470: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c480: 20 20 20 20 69 66 20 28 70 45 72 72 6f 72 20 21      if (pError !
c490: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
c4a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
c4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
c4c0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
c4d0: 64 73 2e 73 71 6c 69 74 65 33 5f 66 72 65 65 28  ds.sqlite3_free(
c4e0: 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20  pError);..      
c4f0: 20 20 20 20 20 20 20 20 20 20 70 45 72 72 6f 72            pError
c500: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
c510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
c520: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
c530: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62  ....    /// Enab
c540: 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20  les or disabled 
c550: 65 78 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20  extended result 
c560: 63 6f 64 65 73 20 72 65 74 75 72 6e 65 64 20 62  codes returned b
c570: 79 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 69 6e  y SQLite..    in
c580: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
c590: 76 6f 69 64 20 53 65 74 45 78 74 65 6e 64 65 64  void SetExtended
c5a0: 52 65 73 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c  ResultCodes(bool
c5b0: 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d   bOnOff)..    {.
c5c0: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
c5d0: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
c5e0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c5f0: 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
c600: 72 65 73 75 6c 74 5f 63 6f 64 65 73 28 0d 0a 20  result_codes(.. 
c610: 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 28           _sql, (
c620: 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29  bOnOff ? -1 : 0)
c630: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
c640: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
c650: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
c660: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
c670: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
c680: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20  or());..    }.. 
c690: 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20     /// Gets the 
c6a0: 6c 61 73 74 20 53 51 4c 69 74 65 20 65 72 72 6f  last SQLite erro
c6b0: 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65  r code..    inte
c6c0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
c6d0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65  LiteErrorCode Re
c6e0: 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20  sultCode()..    
c6f0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
c700: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
c710: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 72 72 63  ods.sqlite3_errc
c720: 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ode(_sql);..    
c730: 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20  }..    /// Gets 
c740: 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20  the last SQLite 
c750: 65 78 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63  extended error c
c760: 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ode..    interna
c770: 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
c780: 65 45 72 72 6f 72 43 6f 64 65 20 45 78 74 65 6e  eErrorCode Exten
c790: 64 65 64 52 65 73 75 6c 74 43 6f 64 65 28 29 0d  dedResultCode().
c7a0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
c7b0: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
c7c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c7d0: 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64  _extended_errcod
c7e0: 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d  e(_sql);..    }.
c7f0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20 61  ...    /// Add a
c800: 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76 69 61   log message via
c810: 20 74 68 65 20 53 51 4c 69 74 65 20 73 71 6c 69   the SQLite sqli
c820: 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63  te3_log interfac
c830: 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  e...    internal
c840: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c   override void L
c850: 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65  ogMessage(SQLite
c860: 45 72 72 6f 72 43 6f 64 65 20 69 45 72 72 43 6f  ErrorCode iErrCo
c870: 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73 73  de, string zMess
c880: 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  age)..    {..   
c890: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
c8a0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c  ethods.sqlite3_l
c8b0: 6f 67 28 69 45 72 72 43 6f 64 65 2c 20 54 6f 55  og(iErrCode, ToU
c8c0: 54 46 38 28 7a 4d 65 73 73 61 67 65 29 29 3b 0d  TF8(zMessage));.
c8d0: 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e  .    }....#if IN
c8e0: 54 45 52 4f 50 5f 43 4f 44 45 43 0d 0a 20 20 20  TEROP_CODEC..   
c8f0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c900: 64 65 20 76 6f 69 64 20 53 65 74 50 61 73 73 77  de void SetPassw
c910: 6f 72 64 28 62 79 74 65 5b 5d 20 70 61 73 73 77  ord(byte[] passw
c920: 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b  ordBytes)..    {
c930: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
c940: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
c950: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
c960: 73 71 6c 69 74 65 33 5f 6b 65 79 28 5f 73 71 6c  sqlite3_key(_sql
c970: 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 2c  , passwordBytes,
c980: 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c   passwordBytes.L
c990: 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69  ength);..      i
c9a0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
c9b0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
c9c0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
c9d0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
c9e0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
c9f0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
ca00: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
ca10: 68 61 6e 67 65 50 61 73 73 77 6f 72 64 28 62 79  hangePassword(by
ca20: 74 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f 72 64  te[] newPassword
ca30: 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20  Bytes)..    {.. 
ca40: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
ca50: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
ca60: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
ca70: 69 74 65 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c  ite3_rekey(_sql,
ca80: 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65   newPasswordByte
ca90: 73 2c 20 28 6e 65 77 50 61 73 73 77 6f 72 64 42  s, (newPasswordB
caa0: 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20  ytes == null) ? 
cab0: 30 20 3a 20 6e 65 77 50 61 73 73 77 6f 72 64 42  0 : newPasswordB
cac0: 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20  ytes.Length);.. 
cad0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
cae0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
caf0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
cb00: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
cb10: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
cb20: 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a  .    }..#endif..
cb30: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
cb40: 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
cb50: 55 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c 69 74  UpdateHook(SQLit
cb60: 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
cb70: 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
cb80: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
cb90: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
cba0: 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f 73 71 6c  update_hook(_sql
cbb0: 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
cbc0: 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ero);..    }....
cbd0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
cbe0: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 43 6f  rride void SetCo
cbf0: 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74 65 43  mmitHook(SQLiteC
cc00: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20 66 75  ommitCallback fu
cc10: 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nc)..    {..    
cc20: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
cc30: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
cc40: 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20  mmit_hook(_sql, 
cc50: 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
cc60: 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
cc70: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
cc80: 69 64 65 20 76 6f 69 64 20 53 65 74 54 72 61 63  ide void SetTrac
cc90: 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65  eCallback(SQLite
cca0: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 66 75  TraceCallback fu
ccb0: 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nc)..    {..    
ccc0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
ccd0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 72  thods.sqlite3_tr
cce0: 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20  ace(_sql, func, 
ccf0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20  IntPtr.Zero);.. 
cd00: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
cd10: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
cd20: 69 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f  id SetRollbackHo
cd30: 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63  ok(SQLiteRollbac
cd40: 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  kCallback func).
cd50: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
cd60: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
cd70: 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61  s.sqlite3_rollba
cd80: 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75  ck_hook(_sql, fu
cd90: 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
cda0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
cdb0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
cdc0: 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74 68     /// Allows th
cdd0: 65 20 73 65 74 74 69 6e 67 20 6f 66 20 61 20 6c  e setting of a l
cde0: 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20  ogging callback 
cdf0: 69 6e 76 6f 6b 65 64 20 62 79 20 53 51 4c 69 74  invoked by SQLit
ce00: 65 20 77 68 65 6e 20 61 0d 0a 20 20 20 20 2f 2f  e when a..    //
ce10: 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f 63 63 75  / log event occu
ce20: 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20 63 61  rs.  Only one ca
ce30: 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65 20 73 65  llback may be se
ce40: 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69 73 20 70  t.  If NULL is p
ce50: 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20  assed,..    /// 
ce60: 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c  the logging call
ce70: 62 61 63 6b 20 69 73 20 75 6e 72 65 67 69 73 74  back is unregist
ce80: 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ered...    /// <
ce90: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
cea0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
ceb0: 66 75 6e 63 22 3e 54 68 65 20 63 61 6c 6c 62 61  func">The callba
cec0: 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 69  ck function to i
ced0: 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  nvoke.</param>..
cee0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
cef0: 3e 52 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c  >Returns a resul
cf00: 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e  t code</returns>
cf10: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
cf20: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
cf30: 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f 67 43 61  rorCode SetLogCa
cf40: 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c 6f 67  llback(SQLiteLog
cf50: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
cf60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
cf70: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
cf80: 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
cf90: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
cfa0: 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a 20 20 20  config_log(..   
cfb0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
cfc0: 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c  onfigOpsEnum.SQL
cfd0: 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20  ITE_CONFIG_LOG, 
cfe0: 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
cff0: 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  o);....        r
d000: 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d  eturn rc;..    }
d010: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
d020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d070: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f  ///////....    /
d080: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
d090: 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 20    /// Creates a 
d0a0: 6e 65 77 20 53 51 4c 69 74 65 20 62 61 63 6b 75  new SQLite backu
d0b0: 70 20 6f 62 6a 65 63 74 20 62 61 73 65 64 20 6f  p object based o
d0c0: 6e 20 74 68 65 20 70 72 6f 76 69 64 65 64 20 64  n the provided d
d0d0: 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20  estination..    
d0e0: 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 63 6f 6e  /// database con
d0f0: 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 73 6f  nection.  The so
d100: 75 72 63 65 20 64 61 74 61 62 61 73 65 20 63 6f  urce database co
d110: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74 68 65 20  nnection is the 
d120: 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73  one..    /// ass
d130: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
d140: 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 65 20 73  s object.  The s
d150: 6f 75 72 63 65 20 61 6e 64 20 64 65 73 74 69 6e  ource and destin
d160: 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 0d 0a  ation database..
d170: 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69      /// connecti
d180: 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 74 68  ons cannot be th
d190: 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f  e same...    ///
d1a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
d1b0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
d1c0: 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68 65 20 64  ="destCnn">The d
d1d0: 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62  estination datab
d1e0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c  ase connection.<
d1f0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
d200: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65   <param name="de
d210: 73 74 4e 61 6d 65 22 3e 54 68 65 20 64 65 73 74  stName">The dest
d220: 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65  ination database
d230: 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a   name.</param>..
d240: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
d250: 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d 65 22  ame="sourceName"
d260: 3e 54 68 65 20 73 6f 75 72 63 65 20 64 61 74 61  >The source data
d270: 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61  base name.</para
d280: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
d290: 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c 79 20 63  urns>The newly c
d2a0: 72 65 61 74 65 64 20 62 61 63 6b 75 70 20 6f 62  reated backup ob
d2b0: 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ject.</returns>.
d2c0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d2d0: 65 72 72 69 64 65 20 53 51 4c 69 74 65 42 61 63  erride SQLiteBac
d2e0: 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a 65 42 61  kup InitializeBa
d2f0: 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53  ckup(..        S
d300: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
d310: 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20 20 20 20  destCnn,..      
d320: 20 20 73 74 72 69 6e 67 20 64 65 73 74 4e 61 6d    string destNam
d330: 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  e,..        stri
d340: 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65 0d 0a 20  ng sourceName.. 
d350: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
d360: 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73  .        if (des
d370: 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tCnn == null).. 
d380: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
d390: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
d3a0: 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74  lException("dest
d3b0: 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Cnn");....      
d3c0: 20 20 69 66 20 28 64 65 73 74 4e 61 6d 65 20 3d    if (destName =
d3d0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
d3e0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
d3f0: 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
d400: 74 69 6f 6e 28 22 64 65 73 74 4e 61 6d 65 22 29  tion("destName")
d410: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
d420: 28 73 6f 75 72 63 65 4e 61 6d 65 20 3d 3d 20 6e  (sourceName == n
d430: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
d440: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
d450: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
d460: 6e 28 22 73 6f 75 72 63 65 4e 61 6d 65 22 29 3b  n("sourceName");
d470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
d480: 74 65 33 20 64 65 73 74 53 71 6c 69 74 65 33 20  te3 destSqlite3 
d490: 3d 20 64 65 73 74 43 6e 6e 2e 5f 73 71 6c 20 61  = destCnn._sql a
d4a0: 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a 20 20  s SQLite3;....  
d4b0: 20 20 20 20 20 20 69 66 20 28 64 65 73 74 53 71        if (destSq
d4c0: 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  lite3 == null)..
d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
d4e0: 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78  w new ArgumentEx
d4f0: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
d500: 20 20 20 20 20 20 20 20 20 20 22 44 65 73 74 69            "Desti
d510: 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  nation connectio
d520: 6e 20 68 61 73 20 6e 6f 20 77 72 61 70 70 65 72  n has no wrapper
d530: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
d540: 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b       "destCnn");
d550: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
d560: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64  teConnectionHand
d570: 6c 65 20 64 65 73 74 48 61 6e 64 6c 65 20 3d 20  le destHandle = 
d580: 64 65 73 74 53 71 6c 69 74 65 33 2e 5f 73 71 6c  destSqlite3._sql
d590: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
d5a0: 28 64 65 73 74 48 61 6e 64 6c 65 20 3d 3d 20 6e  (destHandle == n
d5b0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
d5c0: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
d5d0: 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a  mentException(..
d5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5f0: 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e  "Destination con
d600: 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69  nection has an i
d610: 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 2c  nvalid handle.",
d620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d630: 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d    "destCnn");...
d640: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43  .        SQLiteC
d650: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20  onnectionHandle 
d660: 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 20 5f  sourceHandle = _
d670: 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  sql;....        
d680: 69 66 20 28 73 6f 75 72 63 65 48 61 6e 64 6c 65  if (sourceHandle
d690: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
d6a0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
d6b0: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
d6c0: 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
d6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 6f               "So
d6e0: 75 72 63 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  urce connection 
d6f0: 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
d700: 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20  andle.");....   
d710: 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 44 65 73       byte[] zDes
d720: 74 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28 64  tName = ToUTF8(d
d730: 65 73 74 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  estName);..     
d740: 20 20 20 62 79 74 65 5b 5d 20 7a 53 6f 75 72 63     byte[] zSourc
d750: 65 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28 73  eName = ToUTF8(s
d760: 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  ourceName);.... 
d770: 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
d780: 6b 75 70 48 61 6e 64 6c 65 20 62 61 63 6b 75 70  kupHandle backup
d790: 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  Handle = null;..
d7a0: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
d7b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d7c0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
d7d0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
d7e0: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
d7f0: 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64   /* NOTE: Thread
d800: 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74  .Abort() protect
d810: 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ion. */..       
d820: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d830: 49 6e 74 50 74 72 20 62 61 63 6b 75 70 20 3d 20  IntPtr backup = 
d840: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d850: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
d860: 75 70 5f 69 6e 69 74 28 0d 0a 20 20 20 20 20 20  up_init(..      
d870: 20 20 20 20 20 20 20 20 20 20 64 65 73 74 48 61            destHa
d880: 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c  ndle, zDestName,
d890: 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 20 7a   sourceHandle, z
d8a0: 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  SourceName);....
d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d8c0: 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50 74 72  backup == IntPtr
d8d0: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
d8e0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
d8f0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
d900: 6e 28 52 65 73 75 6c 74 43 6f 64 65 28 29 2c 20  n(ResultCode(), 
d910: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
d920: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d930: 62 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e  backupHandle = n
d940: 65 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48  ew SQLiteBackupH
d950: 61 6e 64 6c 65 28 64 65 73 74 48 61 6e 64 6c 65  andle(destHandle
d960: 2c 20 62 61 63 6b 75 70 29 3b 0d 0a 20 20 20 20  , backup);..    
d970: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
d980: 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69   return new SQLi
d990: 74 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  teBackup(..     
d9a0: 20 20 20 20 20 20 20 74 68 69 73 2c 20 62 61 63         this, bac
d9b0: 6b 75 70 48 61 6e 64 6c 65 2c 20 64 65 73 74 48  kupHandle, destH
d9c0: 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65  andle, zDestName
d9d0: 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 0d  , sourceHandle,.
d9e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 53 6f  .            zSo
d9f0: 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  urceName);..    
da00: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
da10: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
da20: 43 6f 70 69 65 73 20 75 70 20 74 6f 20 4e 20 70  Copies up to N p
da30: 61 67 65 73 20 66 72 6f 6d 20 74 68 65 20 73 6f  ages from the so
da40: 75 72 63 65 20 64 61 74 61 62 61 73 65 20 74 6f  urce database to
da50: 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e   the destination
da60: 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61  ..    /// databa
da70: 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  se associated wi
da80: 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
da90: 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d   backup object..
daa0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
dab0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
dac0: 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
dad0: 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
dae0: 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72  ect to use.</par
daf0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
db00: 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22  ram name="nPage"
db10: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
db20: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
db30: 6f 20 63 6f 70 79 2c 20 6e 65 67 61 74 69 76 65  o copy, negative
db40: 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20 72 65 6d   to copy all rem
db50: 61 69 6e 69 6e 67 20 70 61 67 65 73 2e 0d 0a 20  aining pages... 
db60: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
db70: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
db80: 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e 0d 0a 20  name="retry">.. 
db90: 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f 20 74 72     /// Set to tr
dba0: 75 65 20 69 66 20 74 68 65 20 6f 70 65 72 61 74  ue if the operat
dbb0: 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ion needs to be 
dbc0: 72 65 74 72 69 65 64 20 64 75 65 20 74 6f 20 64  retried due to d
dbd0: 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f  atabase..    ///
dbe0: 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75 65 73 3b   locking issues;
dbf0: 20 6f 74 68 65 72 77 69 73 65 2c 20 73 65 74 20   otherwise, set 
dc00: 74 6f 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f  to false...    /
dc10: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
dc20: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
dc30: 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20      /// True if 
dc40: 74 68 65 72 65 20 61 72 65 20 6d 6f 72 65 20 70  there are more p
dc50: 61 67 65 73 20 74 6f 20 62 65 20 63 6f 70 69 65  ages to be copie
dc60: 64 2c 20 66 61 6c 73 65 20 6f 74 68 65 72 77 69  d, false otherwi
dc70: 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  se...    /// </r
dc80: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
dc90: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
dca0: 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75 70 28 0d  ool StepBackup(.
dcb0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
dcc0: 61 63 6b 75 70 20 62 61 63 6b 75 70 2c 0d 0a 20  ackup backup,.. 
dcd0: 20 20 20 20 20 20 20 69 6e 74 20 6e 50 61 67 65         int nPage
dce0: 2c 0d 0a 20 20 20 20 20 20 20 20 6f 75 74 20 62  ,..        out b
dcf0: 6f 6f 6c 20 72 65 74 72 79 0d 0a 20 20 20 20 20  ool retry..     
dd00: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
dd10: 20 20 20 20 20 72 65 74 72 79 20 3d 20 66 61 6c       retry = fal
dd20: 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  se;....        i
dd30: 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c  f (backup == nul
dd40: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
dd50: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
dd60: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
dd70: 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20  "backup");....  
dd80: 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
dd90: 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  upHandle handle 
dda0: 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65  = backup._sqlite
ddb0: 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20  _backup;....    
ddc0: 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d      if (handle =
ddd0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
dde0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
ddf0: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
de00: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
de10: 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
de20: 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
de30: 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
de40: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49  ");....        I
de50: 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20  ntPtr handlePtr 
de60: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
de70: 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50       if (handleP
de80: 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tr == IntPtr.Zer
de90: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
dea0: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
deb0: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
dec0: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
ded0: 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
dee0: 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
def0: 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74  lid handle point
df00: 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  er.");....      
df10: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
df20: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
df30: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
df40: 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28 68 61  3_backup_step(ha
df50: 6e 64 6c 65 50 74 72 2c 20 6e 50 61 67 65 29 3b  ndlePtr, nPage);
df60: 0d 0a 20 20 20 20 20 20 20 20 62 61 63 6b 75 70  ..        backup
df70: 2e 5f 73 74 65 70 52 65 73 75 6c 74 20 3d 20 6e  ._stepResult = n
df80: 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 76 65 20  ; /* NOTE: Save 
df90: 66 6f 72 20 75 73 65 20 62 79 20 46 69 6e 69 73  for use by Finis
dfa0: 68 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20  hBackup. */.... 
dfb0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
dfc0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
dfd0: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  Ok)..        {..
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
dff0: 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
e000: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
e010: 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
e020: 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29  eErrorCode.Busy)
e030: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
e040: 20 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d           retry =
e050: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
e060: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
e070: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
e080: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
e090: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
e0a0: 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20 20 20  de.Locked)..    
e0b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e0c0: 20 20 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b     retry = true;
e0d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
e0e0: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
e0f0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
e100: 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  lse if (n == SQL
e110: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e  iteErrorCode.Don
e120: 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  e)..        {.. 
e130: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
e140: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
e150: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
e160: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
e170: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
e180: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
e190: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
e1a0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
e1b0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
e1c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
e1d0: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
e1e0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
e1f0: 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f  ges remaining to
e200: 20 62 65 20 63 6f 70 69 65 64 20 66 72 6f 6d 20   be copied from 
e210: 74 68 65 20 73 6f 75 72 63 65 0d 0a 20 20 20 20  the source..    
e220: 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 74 6f 20  /// database to 
e230: 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  the destination 
e240: 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
e250: 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65  ted with the spe
e260: 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  cified..    /// 
e270: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a  backup object...
e280: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
e290: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
e2a0: 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22  am name="backup"
e2b0: 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65  >The backup obje
e2c0: 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61  ct to check.</pa
e2d0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
e2e0: 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65  eturns>The numbe
e2f0: 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69  r of pages remai
e300: 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65  ning to be copie
e310: 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  d.</returns>..  
e320: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
e330: 69 64 65 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e  ide int Remainin
e340: 67 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  gBackup(..      
e350: 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62    SQLiteBackup b
e360: 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29  ackup..        )
e370: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
e380: 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e   if (backup == n
e390: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
e3a0: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
e3b0: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
e3c0: 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a  n("backup");....
e3d0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
e3e0: 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c  ckupHandle handl
e3f0: 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69  e = backup._sqli
e400: 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20  te_backup;....  
e410: 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
e420: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
e430: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
e440: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
e450: 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
e460: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
e470: 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
e480: 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
e490: 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
e4a0: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74   IntPtr handlePt
e4b0: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
e4c0: 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
e4d0: 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  ePtr == IntPtr.Z
e4e0: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
e4f0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
e500: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
e510: 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
e520: 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
e530: 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
e540: 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69  valid handle poi
e550: 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  nter.");....    
e560: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
e570: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
e580: 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 72 65  qlite3_backup_re
e590: 6d 61 69 6e 69 6e 67 28 68 61 6e 64 6c 65 50 74  maining(handlePt
e5a0: 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  r);..    }....  
e5b0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
e5c0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
e5d0: 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
e5e0: 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
e5f0: 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
e600: 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20  e associated..  
e610: 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 65 20 73    /// with the s
e620: 70 65 63 69 66 69 65 64 20 62 61 63 6b 75 70 20  pecified backup 
e630: 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
e640: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
e650: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
e660: 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61  ="backup">The ba
e670: 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63  ckup object to c
e680: 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  heck.</param>.. 
e690: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
e6a0: 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  The total number
e6b0: 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
e6c0: 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
e6d0: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
e6e0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
e6f0: 64 65 20 69 6e 74 20 50 61 67 65 43 6f 75 6e 74  de int PageCount
e700: 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
e710: 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61   SQLiteBackup ba
e720: 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d  ckup..        ).
e730: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
e740: 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75  if (backup == nu
e750: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
e760: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
e770: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
e780: 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20  ("backup");.... 
e790: 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
e7a0: 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  kupHandle handle
e7b0: 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74   = backup._sqlit
e7c0: 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20  e_backup;....   
e7d0: 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20       if (handle 
e7e0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
e7f0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
e800: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
e810: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
e820: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
e830: 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
e840: 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
e850: 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
e860: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72  IntPtr handlePtr
e870: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
e880: 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
e890: 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  Ptr == IntPtr.Ze
e8a0: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
e8b0: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
e8c0: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
e8d0: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
e8e0: 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
e8f0: 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
e900: 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e  alid handle poin
e910: 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ter.");....     
e920: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
e930: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e940: 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 70 61 67  lite3_backup_pag
e950: 65 63 6f 75 6e 74 28 68 61 6e 64 6c 65 50 74 72  ecount(handlePtr
e960: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
e970: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
e980: 20 20 20 20 2f 2f 2f 20 44 65 73 74 72 6f 79 73      /// Destroys
e990: 20 74 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65   the backup obje
e9a0: 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62 61 63 6b  ct, rolling back
e9b0: 20 61 6e 79 20 62 61 63 6b 75 70 20 74 68 61 74   any backup that
e9c0: 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20 20 20 20   may be in..    
e9d0: 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d 0a 20 20  /// progess...  
e9e0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
e9f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
ea00: 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54   name="backup">T
ea10: 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
ea20: 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c 2f 70 61   to destroy.</pa
ea30: 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
ea40: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
ea50: 20 46 69 6e 69 73 68 42 61 63 6b 75 70 28 0d 0a   FinishBackup(..
ea60: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
ea70: 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20  ckup backup..   
ea80: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
ea90: 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75         if (backu
eaa0: 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  p == null)..    
eab0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
eac0: 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
ead0: 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22  ception("backup"
eae0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
eaf0: 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
eb00: 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70   handle = backup
eb10: 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b  ._sqlite_backup;
eb20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
eb30: 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  handle == null).
eb40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
eb50: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
eb60: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
eb70: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
eb80: 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
eb90: 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
eba0: 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
ebb0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
ebc0: 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65  ndlePtr = handle
ebd0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
ebe0: 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e  (handlePtr == In
ebf0: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
ec00: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
ec10: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
ec20: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
ec30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
ec40: 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
ec50: 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
ec60: 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a  le pointer.");..
ec70: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
ec80: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
ec90: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
eca0: 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
ecb0: 5f 66 69 6e 69 73 68 28 68 61 6e 64 6c 65 50 74  _finish(handlePt
ecc0: 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 68 61 6e  r);..        han
ecd0: 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65 41 73 49  dle.SetHandleAsI
ece0: 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a 23 69 66  nvalid();....#if
ecf0: 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 0d 0a 20   COUNT_HANDLE.. 
ed00: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
ed10: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
ed20: 4f 6b 29 20 68 61 6e 64 6c 65 2e 57 61 73 52 65  Ok) handle.WasRe
ed30: 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a 23 65 6e  leasedOk();..#en
ed40: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  dif....        i
ed50: 66 20 28 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  f ((n != SQLiteE
ed60: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20  rrorCode.Ok) && 
ed70: 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e 5f 73 74  (n != backup._st
ed80: 65 70 52 65 73 75 6c 74 29 29 0d 0a 20 20 20 20  epResult))..    
ed90: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
eda0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
edb0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
edc0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
edd0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
ede0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee30: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
ee40: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
ee50: 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20  / Determines if 
ee60: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
ee70: 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e  library has been
ee80: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72   initialized for
ee90: 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75   the..    /// cu
eea0: 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a  rrent process...
eeb0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
eec0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
eed0: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  urns>..    /// A
eee0: 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74   boolean indicat
eef0: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
ef00: 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ot the SQLite co
ef10: 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
ef20: 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69  een..    /// ini
ef30: 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65  tialized for the
ef40: 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
ef50: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
ef60: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
ef70: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
ef80: 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  l IsInitialized(
ef90: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
efa0: 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 49    return StaticI
efb0: 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 3b 0d  sInitialized();.
efc0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
efd0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
efe0: 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20   /// Determines 
eff0: 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  if the SQLite co
f000: 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
f010: 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  een initialized 
f020: 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  for the..    ///
f030: 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
f040: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
f050: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
f060: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
f070: 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69  / A boolean indi
f080: 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
f090: 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65  r not the SQLite
f0a0: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
f0b0: 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20  s been..    /// 
f0c0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
f0d0: 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
f0e0: 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
f0f0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
f100: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f  ternal static bo
f110: 6f 6c 20 53 74 61 74 69 63 49 73 49 6e 69 74 69  ol StaticIsIniti
f120: 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d  alized()..    {.
f130: 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
f140: 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20       // BUGFIX: 
f150: 50 72 65 76 65 6e 74 20 72 61 63 65 73 20 77 69  Prevent races wi
f160: 74 68 20 6f 74 68 65 72 20 74 68 72 65 61 64 73  th other threads
f170: 20 66 6f 72 20 74 68 69 73 20 65 6e 74 69 72 65   for this entire
f180: 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20 20 20   block, due..   
f190: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
f1a0: 74 6f 20 74 68 65 20 74 72 79 2f 66 69 6e 61 6c  to the try/final
f1b0: 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e 20 20 53  ly semantics.  S
f1c0: 65 65 20 74 69 63 6b 65 74 20 5b 37 32 39 30 35  ee ticket [72905
f1d0: 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20 20 20  c9a77]...       
f1e0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63   //..        loc
f1f0: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20  k (syncRoot)..  
f200: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c        {..#if !PL
f210: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
f220: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
f230: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
f240: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 61       // NOTE: Sa
f250: 76 65 20 74 68 65 20 73 74 61 74 65 20 6f 66 20  ve the state of 
f260: 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c 61 73  the logging clas
f270: 73 20 61 6e 64 20 74 68 65 6e 20 72 65 73 74 6f  s and then resto
f280: 72 65 20 69 74 0d 0a 20 20 20 20 20 20 20 20 20  re it..         
f290: 20 20 20 2f 2f 20 20 20 20 20 20 20 61 66 74 65     //       afte
f2a0: 72 20 77 65 20 61 72 65 20 64 6f 6e 65 20 74 6f  r we are done to
f2b0: 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67 20 74   avoid logging t
f2c0: 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20 65 72  oo many false er
f2d0: 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  rors...         
f2e0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
f2f0: 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 45 6e 61     bool savedEna
f300: 62 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c 6f 67  bled = SQLiteLog
f310: 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20  .Enabled;..     
f320: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
f330: 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c 73 65  .Enabled = false
f340: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f350: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
f360: 20 20 7b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20    {..#endif..   
f370: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
f380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f390: 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6d   // NOTE: This m
f3a0: 65 74 68 6f 64 20 5b 61 62 5d 75 73 65 73 20 74  ethod [ab]uses t
f3b0: 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51 4c  he fact that SQL
f3c0: 69 74 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 0d  ite will always.
f3d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f3e0: 20 2f 2f 20 20 20 20 20 20 20 72 65 74 75 72 6e   //       return
f3f0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 66 6f   SQLITE_ERROR fo
f400: 72 20 61 6e 79 20 75 6e 6b 6e 6f 77 6e 20 63 6f  r any unknown co
f410: 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69  nfiguration opti
f420: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
f430: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 2a 75 6e      //       *un
f440: 6c 65 73 73 2a 20 74 68 65 20 53 51 4c 69 74 65  less* the SQLite
f450: 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72   library has alr
f460: 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61  eady been initia
f470: 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  lized...        
f480: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
f490: 20 49 6e 20 74 68 61 74 20 63 61 73 65 20 69 74   In that case it
f4a0: 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 72 65 74   will always ret
f4b0: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
f4c0: 45 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  E...            
f4d0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
f4e0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
f4f0: 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
f500: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
f510: 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f  .sqlite3_config_
f520: 6e 6f 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20  none(..         
f530: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
f540: 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53  eConfigOpsEnum.S
f550: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f 4e  QLITE_CONFIG_NON
f560: 45 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  E);....         
f570: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 72         return (r
f580: 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c == SQLiteError
f590: 43 6f 64 65 2e 4d 69 73 75 73 65 29 3b 0d 0a 23  Code.Misuse);..#
f5a0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
f5b0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
f5c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
f5d0: 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
f5e0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
f5f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f600: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62    SQLiteLog.Enab
f610: 6c 65 64 20 3d 20 73 61 76 65 64 45 6e 61 62 6c  led = savedEnabl
f620: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
f630: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20   }..#endif..    
f640: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
f650: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
f660: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65  >..    /// Helpe
f670: 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65  r function to re
f680: 74 72 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20  trieve a column 
f690: 6f 66 20 64 61 74 61 20 66 72 6f 6d 20 61 6e 20  of data from an 
f6a0: 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
f6b0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
f6c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
f6d0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74  param name="stmt
f6e0: 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  ">The statement 
f6f0: 62 65 69 6e 67 20 73 74 65 70 28 29 27 64 20 74  being step()'d t
f700: 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a  hrough</param>..
f710: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
f720: 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68 65 20  ame="index">The 
f730: 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20  column index to 
f740: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
f750: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
f760: 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20   name="typ">The 
f770: 74 79 70 65 20 6f 66 20 64 61 74 61 20 63 6f 6e  type of data con
f780: 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f  tained in the co
f790: 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74  lumn.  If Uninit
f7a0: 69 61 6c 69 7a 65 64 2c 20 74 68 69 73 20 66 75  ialized, this fu
f7b0: 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72  nction will retr
f7c0: 69 65 76 65 20 74 68 65 20 64 61 74 61 74 79 70  ieve the datatyp
f7d0: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f  e information.</
f7e0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
f7f0: 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73  <returns>Returns
f800: 20 74 68 65 20 64 61 74 61 20 69 6e 20 74 68 65   the data in the
f810: 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73   column</returns
f820: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
f830: 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20  override object 
f840: 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74 65 53  GetValue(SQLiteS
f850: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
f860: 6e 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65  nt index, SQLite
f870: 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b  Type typ)..    {
f880: 0d 0a 20 20 20 20 20 20 69 66 20 28 49 73 4e 75  ..      if (IsNu
f890: 6c 6c 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  ll(stmt, index))
f8a0: 20 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56   return DBNull.V
f8b0: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 54 79 70  alue;..      Typ
f8c0: 65 41 66 66 69 6e 69 74 79 20 61 66 66 20 3d 20  eAffinity aff = 
f8d0: 74 79 70 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20  typ.Affinity;.. 
f8e0: 20 20 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75       Type t = nu
f8f0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  ll;....      if 
f900: 28 74 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54  (typ.Type != DbT
f910: 79 70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20  ype.Object)..   
f920: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20     {..        t 
f930: 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e  = SQLiteConvert.
f940: 53 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65  SQLiteTypeToType
f950: 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  (typ);..        
f960: 61 66 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69  aff = TypeToAffi
f970: 6e 69 74 79 28 74 29 3b 0d 0a 20 20 20 20 20 20  nity(t);..      
f980: 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63  }....      switc
f990: 68 20 28 61 66 66 29 0d 0a 20 20 20 20 20 20 7b  h (aff)..      {
f9a0: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
f9b0: 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62  ypeAffinity.Blob
f9c0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  :..          if 
f9d0: 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54  (typ.Type == DbT
f9e0: 79 70 65 2e 47 75 69 64 20 26 26 20 74 79 70 2e  ype.Guid && typ.
f9f0: 41 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65  Affinity == Type
fa00: 41 66 66 69 6e 69 74 79 2e 54 65 78 74 29 0d 0a  Affinity.Text)..
fa10: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
fa20: 72 6e 20 6e 65 77 20 47 75 69 64 28 47 65 74 54  rn new Guid(GetT
fa30: 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ext(stmt, index)
fa40: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
fa50: 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29 47 65 74  int n = (int)Get
fa60: 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65  Bytes(stmt, inde
fa70: 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30  x, 0, null, 0, 0
fa80: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 79  );..          by
fa90: 74 65 5b 5d 20 62 20 3d 20 6e 65 77 20 62 79 74  te[] b = new byt
faa0: 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20  e[n];..         
fab0: 20 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20   GetBytes(stmt, 
fac0: 69 6e 64 65 78 2c 20 30 2c 20 62 2c 20 30 2c 20  index, 0, b, 0, 
fad0: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
fae0: 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d   if (typ.Type ==
faf0: 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26 20   DbType.Guid && 
fb00: 6e 20 3d 3d 20 31 36 29 0d 0a 20 20 20 20 20 20  n == 16)..      
fb10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
fb20: 20 47 75 69 64 28 62 29 3b 0d 0a 0d 0a 20 20 20   Guid(b);....   
fb30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 3b         return b;
fb40: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
fb50: 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65  ypeAffinity.Date
fb60: 54 69 6d 65 3a 0d 0a 20 20 20 20 20 20 20 20 20  Time:..         
fb70: 20 72 65 74 75 72 6e 20 47 65 74 44 61 74 65 54   return GetDateT
fb80: 69 6d 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ime(stmt, index)
fb90: 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
fba0: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75  TypeAffinity.Dou
fbb0: 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ble:..          
fbc0: 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72  if (t == null) r
fbd0: 65 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65 28  eturn GetDouble(
fbe0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
fbf0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
fc00: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
fc10: 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65  n Convert.Change
fc20: 54 79 70 65 28 47 65 74 44 6f 75 62 6c 65 28 73  Type(GetDouble(s
fc30: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20  tmt, index), t, 
fc40: 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  null);..        
fc50: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
fc60: 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20  y.Int64:..      
fc70: 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c      if (t == nul
fc80: 6c 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74  l) return GetInt
fc90: 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  64(stmt, index);
fca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
fcb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
fcc0: 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61  turn Convert.Cha
fcd0: 6e 67 65 54 79 70 65 28 47 65 74 49 6e 74 36 34  ngeType(GetInt64
fce0: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74  (stmt, index), t
fcf0: 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
fd00: 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20    default:..    
fd10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
fd20: 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
fd30: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
fd40: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
fd50: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
fd60: 47 65 74 43 75 72 73 6f 72 46 6f 72 54 61 62 6c  GetCursorForTabl
fd70: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
fd80: 74 20 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20  t stmt, int db, 
fd90: 69 6e 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20  int rootPage).. 
fda0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
fdb0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
fdc0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
fdd0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
fde0: 69 74 65 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f  ite3_table_curso
fdf0: 72 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  r_interop(stmt._
fe00: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 64 62 2c  sqlite_stmt, db,
fe10: 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a 23 65 6c   rootPage);..#el
fe20: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
fe30: 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20   -1;..#endif..  
fe40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
fe50: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
fe60: 67 20 47 65 74 52 6f 77 49 64 46 6f 72 43 75 72  g GetRowIdForCur
fe70: 73 6f 72 28 53 51 4c 69 74 65 53 74 61 74 65 6d  sor(SQLiteStatem
fe80: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 63 75  ent stmt, int cu
fe90: 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  rsor)..    {..#i
fea0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
feb0: 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 72  RD..      long r
fec0: 6f 77 69 64 3b 0d 0a 20 20 20 20 20 20 53 51 4c  owid;..      SQL
fed0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
fee0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
fef0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 75  thods.sqlite3_cu
ff00: 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72  rsor_rowid_inter
ff10: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
ff20: 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20 6f 75  stmt, cursor, ou
ff30: 74 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20  t rowid);..     
ff40: 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74   if (rc == SQLit
ff50: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 72  eErrorCode.Ok) r
ff60: 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a  eturn rowid;....
ff70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d        return 0;.
ff80: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
ff90: 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d  turn 0;..#endif.
ffa0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
ffb0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
ffc0: 76 6f 69 64 20 47 65 74 49 6e 64 65 78 43 6f 6c  void GetIndexCol
ffd0: 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f 28  umnExtendedInfo(
ffe0: 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 2c  string database,
fff0: 20 73 74 72 69 6e 67 20 69 6e 64 65 78 2c 20 73   string index, s
10000 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75  tring column, ou
10010 74 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20  t int sortMode, 
10020 6f 75 74 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c  out int onError,
10030 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c   out string coll
10040 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a  ationSequence)..
10050 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
10060 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
10070 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 3b 0d     IntPtr coll;.
10080 0a 20 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c  .      int colll
10090 65 6e 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74  en;..      SQLit
100a0 65 45 72 72 6f 72 43 6f 64 65 20 72 63 3b 0d 0a  eErrorCode rc;..
100b0 0d 0a 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73  ..      rc = Uns
100c0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
100d0 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63  .sqlite3_index_c
100e0 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72  olumn_info_inter
100f0 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  op(_sql, ToUTF8(
10100 64 61 74 61 62 61 73 65 29 2c 20 54 6f 55 54 46  database), ToUTF
10110 38 28 69 6e 64 65 78 29 2c 20 54 6f 55 54 46 38  8(index), ToUTF8
10120 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 73 6f  (column), out so
10130 72 74 4d 6f 64 65 2c 20 6f 75 74 20 6f 6e 45 72  rtMode, out onEr
10140 72 6f 72 2c 20 6f 75 74 20 63 6f 6c 6c 2c 20 6f  ror, out coll, o
10150 75 74 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20  ut colllen);..  
10160 20 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51      if (rc != SQ
10170 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
10180 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
10190 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20  teException(rc, 
101a0 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  null);....      
101b0 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  collationSequenc
101c0 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
101d0 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b  (coll, colllen);
101e0 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 73  ..#else..      s
101f0 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20 20  ortMode = 0;..  
10200 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20 32 3b      onError = 2;
10210 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f  ..      collatio
10220 6e 53 65 71 75 65 6e 63 65 20 3d 20 22 42 49 4e  nSequence = "BIN
10230 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ARY";..#endif.. 
10240 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
10250 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
10260 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69  LiteErrorCode Fi
10270 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72 69 6e 67  leControl(string
10280 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74 20 6f 70   zDbName, int op
10290 2c 20 49 6e 74 50 74 72 20 70 41 72 67 29 0d 0a  , IntPtr pArg)..
102a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
102b0 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
102c0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
102d0 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71  file_control(_sq
102e0 6c 2c 20 28 7a 44 62 4e 61 6d 65 20 21 3d 20 6e  l, (zDbName != n
102f0 75 6c 6c 29 20 3f 20 54 6f 55 54 46 38 28 7a 44  ull) ? ToUTF8(zD
10300 62 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f  bName) : null, o
10310 70 2c 20 70 41 72 67 29 3b 0d 0a 20 20 20 20 7d  p, pArg);..    }
10320 0d 0a 20 20 7d 0d 0a 7d 0d 0a                    ..  }..}..