System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 24c4b58b9bec6be3ad39c1de4956fe8507418bd6:


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 33 2e 30  sion = "1.0.83.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 29 20 26 26 20 21 50 4c 41 54 46 4f 52  _40) && !PLATFOR
0a30: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
0a40: 52 4b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  RK..    private 
0a50: 62 6f 6f 6c 20 5f 62 75 69 6c 64 69 6e 67 53 63  bool _buildingSc
0a60: 68 65 6d 61 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  hema;..#endif...
0a70: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0a80: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
0a90: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
0aa0: 63 74 69 6f 6e 73 20 72 65 67 69 73 74 65 72 65  ctions registere
0ab0: 64 20 6f 6e 20 74 68 69 73 20 63 6f 6e 6e 65 63  d on this connec
0ac0: 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  tion..    /// </
0ad0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
0ae0: 6f 74 65 63 74 65 64 20 53 51 4c 69 74 65 46 75  otected SQLiteFu
0af0: 6e 63 74 69 6f 6e 5b 5d 20 5f 66 75 6e 63 74 69  nction[] _functi
0b00: 6f 6e 73 41 72 72 61 79 3b 0d 0a 0d 0a 20 20 20  onsArray;....   
0b10: 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65   internal SQLite
0b20: 33 28 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  3(SQLiteDateForm
0b30: 61 74 73 20 66 6d 74 2c 20 44 61 74 65 54 69 6d  ats fmt, DateTim
0b40: 65 4b 69 6e 64 20 6b 69 6e 64 29 0d 0a 20 20 20  eKind kind)..   
0b50: 20 20 20 3a 20 62 61 73 65 28 66 6d 74 2c 20 6b     : base(fmt, k
0b60: 69 6e 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ind)..    {..   
0b70: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
0b80: 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
0be0: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
0bf0: 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d  able "Pattern" M
0c00: 65 6d 62 65 72 73 0d 0a 20 20 20 20 70 72 69 76  embers..    priv
0c10: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
0c20: 64 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  d;..    private 
0c30: 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73  void CheckDispos
0c40: 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ed() /* throw */
0c50: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52  ..    {..#if THR
0c60: 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a  OW_ON_DISPOSED..
0c70: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
0c80: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
0c90: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a     throw new Obj
0ca0: 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70  ectDisposedExcep
0cb0: 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c 69  tion(typeof(SQLi
0cc0: 74 65 33 29 2e 4e 61 6d 65 29 3b 0d 0a 23 65 6e  te3).Name);..#en
0cd0: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
0ce0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  /....    protect
0d50: 65 64 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  ed override void
0d60: 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69   Dispose(bool di
0d70: 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d  sposing)..    {.
0d80: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
0d90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
0da0: 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73       if (!dispos
0db0: 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
0dc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
0dd0: 20 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73      //if (dispos
0de0: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
0df0: 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20        //{..     
0e00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
0e10: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
0e40: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20         //    // 
0e50: 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20  dispose managed 
0e60: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
0e70: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
0e80: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
0e90: 2f 2f 2f 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 0d 0a 20  /////////////.. 
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0ec0: 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  /}....          
0ed0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
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 0d 0a 20 20  ////////////..  
0f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
0f10: 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67   release unmanag
0f20: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
0f30: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
0f40: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
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 0d 0a 0d 0a  ////////////....
0f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f80: 43 6c 6f 73 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  Close();....    
0f90: 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70              disp
0fa0: 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20  osed = true;..  
0fb0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
0fc0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
0fd0: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
0fe0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
0ff0: 62 61 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73  base.Dispose(dis
1000: 70 6f 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20  posing);..      
1010: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20    }..    }..    
1020: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1030: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49 74 20 69  /....    // It i
10a0: 73 6e 27 74 20 6e 65 63 65 73 73 61 72 79 20 74  sn't necessary t
10b0: 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79 20 66 75  o cleanup any fu
10c0: 6e 63 74 69 6f 6e 73 20 77 65 27 76 65 20 72 65  nctions we've re
10d0: 67 69 73 74 65 72 65 64 2e 20 20 49 66 20 74 68  gistered.  If th
10e0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20  e connection..  
10f0: 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20 74 68 65    // goes to the
1100: 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20 72 65 73   pool and is res
1110: 75 72 72 65 63 74 65 64 20 6c 61 74 65 72 2c 20  urrected later, 
1120: 72 65 2d 72 65 67 69 73 74 65 72 65 64 20 66 75  re-registered fu
1130: 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 6f 76 65  nctions will ove
1140: 72 77 72 69 74 65 20 74 68 65 0d 0a 20 20 20 20  rwrite the..    
1150: 2f 2f 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63  // previous func
1160: 74 69 6f 6e 73 2e 20 20 54 68 65 20 53 51 4c 69  tions.  The SQLi
1170: 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69 65  teFunctionCookie
1180: 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74 61 6b 65  Handle will take
1190: 20 63 61 72 65 20 6f 66 20 66 72 65 65 69 6e 67   care of freeing
11a0: 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20   unmanaged..    
11b0: 2f 2f 20 72 65 73 6f 75 72 63 65 73 20 62 65 6c  // resources bel
11c0: 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20 70 72  onging to the pr
11d0: 65 76 69 6f 75 73 6c 79 2d 72 65 67 69 73 74 65  eviously-registe
11e0: 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a  red functions...
11f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1200: 72 72 69 64 65 20 76 6f 69 64 20 43 6c 6f 73 65  rride void Close
1210: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
1220: 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c   if (_sql != nul
1230: 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
1240: 20 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50         if (_useP
1250: 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ool)..          
1260: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1270: 20 53 51 4c 69 74 65 42 61 73 65 2e 52 65 73 65   SQLiteBase.Rese
1280: 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f 73 71 6c  tConnection(_sql
1290: 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20  , _sql);..      
12a0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
12b0: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41 64 64  nnectionPool.Add
12c0: 28 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 73 71 6c  (_fileName, _sql
12d0: 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b  , _poolVersion);
12e0: 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
12f0: 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
1300: 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
1310: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1320: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
1330: 67 2e 46 6f 72 6d 61 74 28 22 43 6c 6f 73 65 20  g.Format("Close 
1340: 28 50 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 5f 73  (Pool): {0}", _s
1350: 71 6c 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ql));..#endif.. 
1360: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1370: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
1380: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1390: 20 20 20 20 20 20 20 5f 73 71 6c 2e 44 69 73 70         _sql.Disp
13a0: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
13b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 5f    }..          _
13c0: 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  sql = null;..   
13d0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
13e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
13f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1440: 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  //....    intern
1450: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
1460: 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20 20 7b   Cancel()..    {
1470: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
1480: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1490: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 5f 73  te3_interrupt(_s
14a0: 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ql);..    }.... 
14b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
14c0: 72 69 64 65 20 73 74 72 69 6e 67 20 56 65 72 73  ride string Vers
14d0: 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ion..    {..    
14e0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
14f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
1500: 51 4c 69 74 65 33 2e 53 51 4c 69 74 65 56 65 72  QLite3.SQLiteVer
1510: 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  sion;..      }..
1520: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
1530: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72  ernal static str
1540: 69 6e 67 20 44 65 66 69 6e 65 43 6f 6e 73 74 61  ing DefineConsta
1550: 6e 74 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nts..    {..    
1560: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
1570: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1580: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65  StringBuilder re
1590: 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e  sult = new Strin
15a0: 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20  gBuilder();..   
15b0: 20 20 20 20 20 20 20 20 20 49 4c 69 73 74 3c 73           IList<s
15c0: 74 72 69 6e 67 3e 20 6c 69 73 74 20 3d 20 53 51  tring> list = SQ
15d0: 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61  LiteDefineConsta
15e0: 6e 74 73 2e 4f 70 74 69 6f 6e 4c 69 73 74 3b 0d  nts.OptionList;.
15f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1600: 66 20 28 6c 69 73 74 20 21 3d 20 6e 75 6c 6c 29  f (list != null)
1610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1630: 20 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67   foreach (string
1640: 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 73 74   element in list
1650: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1660: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1670: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6c            if (el
1680: 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ement == null)..
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a0: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
16b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16c0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
16d0: 75 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d  ult.Length > 0).
16e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16f0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
1700: 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a  Append(' ');....
1710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1720: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
1730: 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  d(element);..   
1740: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1750: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
1770: 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72  urn result.ToStr
1780: 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ing();..        
1790: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
17a0: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
17b0: 73 74 72 69 6e 67 20 53 51 4c 69 74 65 56 65 72  string SQLiteVer
17c0: 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  sion..    {..   
17d0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
17e0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
17f0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
1800: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1810: 2e 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73  .sqlite3_libvers
1820: 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a 20 20 20  ion(), -1);..   
1830: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
1840: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
1850: 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65  ic string SQLite
1860: 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d  SourceId..    {.
1870: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
1880: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
1890: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
18a0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
18b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 6f 75  hods.sqlite3_sou
18c0: 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 20  rceid(), -1);.. 
18d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
18e0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
18f0: 65 72 72 69 64 65 20 62 6f 6f 6c 20 41 75 74 6f  erride bool Auto
1900: 43 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d 0a 20  Commit..    {.. 
1910: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
1920: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
1930: 6e 20 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28 5f  n IsAutocommit(_
1940: 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20  sql, _sql);..   
1950: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
1960: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
1970: 72 69 64 65 20 6c 6f 6e 67 20 4c 61 73 74 49 6e  ride long LastIn
1980: 73 65 72 74 52 6f 77 49 64 0d 0a 20 20 20 20 7b  sertRowId..    {
1990: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
19a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
19b0: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
19c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
19d0: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
19e0: 69 64 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20  id(_sql);..     
19f0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
1a00: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
1a10: 64 65 20 69 6e 74 20 43 68 61 6e 67 65 73 0d 0a  de int Changes..
1a20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
1a30: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
1a40: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
1a50: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1a60: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 5f 73  lite3_changes(_s
1a70: 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ql);..      }.. 
1a80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
1a90: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
1aa0: 6e 67 20 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20  ng MemoryUsed.. 
1ab0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
1ac0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
1ad0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
1ae0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1af0: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64  ite3_memory_used
1b00: 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ();..      }..  
1b10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1b20: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
1b30: 67 20 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65  g MemoryHighwate
1b40: 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  r..    {..      
1b50: 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  get..      {..  
1b60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
1b70: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1b80: 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f  .sqlite3_memory_
1b90: 68 69 67 68 77 61 74 65 72 28 30 29 3b 0d 0a 20  highwater(0);.. 
1ba0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
1bb0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1bc0: 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
1bd0: 6f 72 43 6f 64 65 20 53 65 74 4d 65 6d 6f 72 79  orCode SetMemory
1be0: 53 74 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75  Status(bool valu
1bf0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
1c00: 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63     return Static
1c10: 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28  SetMemoryStatus(
1c20: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  value);..    }..
1c30: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
1c40: 74 61 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f  tatic SQLiteErro
1c50: 72 43 6f 64 65 20 53 74 61 74 69 63 53 65 74 4d  rCode StaticSetM
1c60: 65 6d 6f 72 79 53 74 61 74 75 73 28 62 6f 6f 6c  emoryStatus(bool
1c70: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
1c80: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
1c90: 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
1ca0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1cb0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f  .sqlite3_config_
1cc0: 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  int(..          
1cd0: 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70    SQLiteConfigOp
1ce0: 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e  sEnum.SQLITE_CON
1cf0: 46 49 47 5f 4d 45 4d 53 54 41 54 55 53 2c 20 76  FIG_MEMSTATUS, v
1d00: 61 6c 75 65 20 3f 20 31 20 3a 20 30 29 3b 0d 0a  alue ? 1 : 0);..
1d10: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1d20: 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   rc;..    }.... 
1d30: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1d40: 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f  ..    /// Shutdo
1d50: 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e  wn the SQLite en
1d60: 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20  gine so that it 
1d70: 63 61 6e 20 62 65 20 72 65 73 74 61 72 74 65 64  can be restarted
1d80: 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 20   with different 
1d90: 63 6f 6e 66 69 67 20 6f 70 74 69 6f 6e 73 2e 0d  config options..
1da0: 0a 20 20 20 20 2f 2f 2f 20 57 65 20 64 65 70 65  .    /// We depe
1db0: 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69  nd on auto initi
1dc0: 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63  alization to rec
1dd0: 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  over...    /// <
1de0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
1df0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
1e00: 72 6e 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64  rns a result cod
1e10: 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  e</returns>..   
1e20: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
1e30: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
1e40: 64 65 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a 20  de Shutdown().. 
1e50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
1e60: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
1e70: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
1e80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73  ethods.sqlite3_s
1e90: 68 75 74 64 6f 77 6e 28 29 3b 0d 0a 20 20 20 20  hutdown();..    
1ea0: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a      return rc;..
1eb0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
1ec0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
1ed0: 6f 6f 6c 20 49 73 4f 70 65 6e 28 29 0d 0a 20 20  ool IsOpen()..  
1ee0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
1ef0: 75 72 6e 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c  urn (_sql != nul
1f00: 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
1f10: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
1f20: 69 64 65 20 76 6f 69 64 20 4f 70 65 6e 28 73 74  ide void Open(st
1f30: 72 69 6e 67 20 73 74 72 46 69 6c 65 6e 61 6d 65  ring strFilename
1f40: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
1f50: 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e 65 63 74 69  onFlags connecti
1f60: 6f 6e 46 6c 61 67 73 2c 20 53 51 4c 69 74 65 4f  onFlags, SQLiteO
1f70: 70 65 6e 46 6c 61 67 73 45 6e 75 6d 20 6f 70 65  penFlagsEnum ope
1f80: 6e 46 6c 61 67 73 2c 20 69 6e 74 20 6d 61 78 50  nFlags, int maxP
1f90: 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f 6c 20 75 73  oolSize, bool us
1fa0: 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20  ePool)..    {.. 
1fb0: 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 21 3d       if (_sql !=
1fc0: 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 3b 0d 0a   null) return;..
1fd0: 0d 0a 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c  ..      _usePool
1fe0: 20 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20   = usePool;..   
1ff0: 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 73     _fileName = s
2000: 74 72 46 69 6c 65 6e 61 6d 65 3b 0d 0a 0d 0a 20  trFilename;.... 
2010: 20 20 20 20 20 69 66 20 28 75 73 65 50 6f 6f 6c       if (usePool
2020: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
2030: 20 20 20 20 5f 73 71 6c 20 3d 20 53 51 4c 69 74      _sql = SQLit
2040: 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e  eConnectionPool.
2050: 52 65 6d 6f 76 65 28 73 74 72 46 69 6c 65 6e 61  Remove(strFilena
2060: 6d 65 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c  me, maxPoolSize,
2070: 20 6f 75 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f   out _poolVersio
2080: 6e 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f  n);....#if !NET_
2090: 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
20a0: 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
20b0: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
20c0: 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46  iteLine(String.F
20d0: 6f 72 6d 61 74 28 22 4f 70 65 6e 20 28 50 6f 6f  ormat("Open (Poo
20e0: 6c 29 3a 20 7b 30 7d 22 2c 20 28 5f 73 71 6c 20  l): {0}", (_sql 
20f0: 21 3d 20 6e 75 6c 6c 29 20 3f 20 5f 73 71 6c 2e  != null) ? _sql.
2100: 54 6f 53 74 72 69 6e 67 28 29 20 3a 20 22 3c 6e  ToString() : "<n
2110: 75 6c 6c 3e 22 29 29 3b 0d 0a 23 65 6e 64 69 66  ull>"));..#endif
2120: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
2130: 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
2140: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ull)..      {.. 
2150: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 64 62         IntPtr db
2160: 3b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ;..        SQLit
2170: 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d  eErrorCode n;...
2180: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
2190: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 69  NDARD..        i
21a0: 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  f ((connectionFl
21b0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
21c0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78  ectionFlags.NoEx
21d0: 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73  tensionFunctions
21e0: 29 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) != SQLiteConne
21f0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78 74  ctionFlags.NoExt
2200: 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 29  ensionFunctions)
2210: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2220: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
2230: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
2240: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65  qlite3_open_inte
2250: 72 6f 70 28 54 6f 55 54 46 38 28 73 74 72 46 69  rop(ToUTF8(strFi
2260: 6c 65 6e 61 6d 65 29 2c 20 6f 70 65 6e 46 6c 61  lename), openFla
2270: 67 73 2c 20 6f 75 74 20 64 62 29 3b 0d 0a 20 20  gs, out db);..  
2280: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2290: 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20   else..#endif.. 
22a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22b0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
22c0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
22d0: 74 65 33 5f 6f 70 65 6e 5f 76 32 28 54 6f 55 54  te3_open_v2(ToUT
22e0: 46 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c  F8(strFilename),
22f0: 20 6f 75 74 20 64 62 2c 20 6f 70 65 6e 46 6c 61   out db, openFla
2300: 67 73 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  gs, IntPtr.Zero)
2310: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2320: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
2330: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
2340: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
2350: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
2360: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
2370: 4f 70 65 6e 3a 20 7b 30 7d 22 2c 20 64 62 29 29  Open: {0}", db))
2380: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
2390: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
23a0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
23b0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
23c0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e  teException(n, n
23d0: 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ull);....       
23e0: 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69   _sql = new SQLi
23f0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64  teConnectionHand
2400: 6c 65 28 64 62 29 3b 0d 0a 20 20 20 20 20 20 20  le(db);..       
2410: 20 6c 6f 63 6b 20 28 5f 73 71 6c 29 20 7b 20 2f   lock (_sql) { /
2420: 2a 20 48 41 43 4b 3a 20 46 6f 72 63 65 20 74 68  * HACK: Force th
2430: 65 20 53 79 6e 63 42 6c 6f 63 6b 20 74 6f 20 62  e SyncBlock to b
2440: 65 20 22 63 72 65 61 74 65 64 22 20 6e 6f 77 2e  e "created" now.
2450: 20 2a 2f 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a   */ }..      }..
2460: 20 20 20 20 20 20 2f 2f 20 42 69 6e 64 20 66 75        // Bind fu
2470: 6e 63 74 69 6f 6e 73 20 74 6f 20 74 68 69 73 20  nctions to this 
2480: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20  connection.  If 
2490: 61 6e 79 20 70 72 65 76 69 6f 75 73 20 66 75 6e  any previous fun
24a0: 63 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 73 61  ctions of the sa
24b0: 6d 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 2f  me name..      /
24c0: 2f 20 77 65 72 65 20 61 6c 72 65 61 64 79 20 62  / were already b
24d0: 6f 75 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 6e  ound, then the n
24e0: 65 77 20 62 69 6e 64 69 6e 67 73 20 72 65 70 6c  ew bindings repl
24f0: 61 63 65 20 74 68 65 20 6f 6c 64 2e 0d 0a 20 20  ace the old...  
2500: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 41 72      _functionsAr
2510: 72 61 79 20 3d 20 53 51 4c 69 74 65 46 75 6e 63  ray = SQLiteFunc
2520: 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f  tion.BindFunctio
2530: 6e 73 28 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74  ns(this, connect
2540: 69 6f 6e 46 6c 61 67 73 29 3b 0d 0a 20 20 20 20  ionFlags);..    
2550: 20 20 53 65 74 54 69 6d 65 6f 75 74 28 30 29 3b    SetTimeout(0);
2560: 0d 0a 20 20 20 20 20 20 47 43 2e 4b 65 65 70 41  ..      GC.KeepA
2570: 6c 69 76 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20  live(_sql);..   
2580: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
2590: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
25a0: 20 43 6c 65 61 72 50 6f 6f 6c 28 29 0d 0a 20 20   ClearPool()..  
25b0: 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
25c0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e  eConnectionPool.
25d0: 43 6c 65 61 72 50 6f 6f 6c 28 5f 66 69 6c 65 4e  ClearPool(_fileN
25e0: 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ame);..    }....
25f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
2600: 72 72 69 64 65 20 69 6e 74 20 43 6f 75 6e 74 50  rride int CountP
2610: 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ool()..    {..  
2620: 20 20 20 20 20 20 44 69 63 74 69 6f 6e 61 72 79        Dictionary
2630: 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e 20 63 6f  <string, int> co
2640: 75 6e 74 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  unts = null;..  
2650: 20 20 20 20 20 20 69 6e 74 20 6f 70 65 6e 43 6f        int openCo
2660: 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  unt = 0;..      
2670: 20 20 69 6e 74 20 63 6c 6f 73 65 43 6f 75 6e 74    int closeCount
2680: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 69   = 0;..        i
2690: 6e 74 20 74 6f 74 61 6c 43 6f 75 6e 74 20 3d 20  nt totalCount = 
26a0: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  0;....        SQ
26b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f  LiteConnectionPo
26c0: 6f 6c 2e 47 65 74 43 6f 75 6e 74 73 28 5f 66 69  ol.GetCounts(_fi
26d0: 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
26e0: 20 20 20 20 20 72 65 66 20 63 6f 75 6e 74 73 2c       ref counts,
26f0: 20 72 65 66 20 6f 70 65 6e 43 6f 75 6e 74 2c 20   ref openCount, 
2700: 72 65 66 20 63 6c 6f 73 65 43 6f 75 6e 74 2c 0d  ref closeCount,.
2710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2720: 20 74 6f 74 61 6c 43 6f 75 6e 74 29 3b 0d 0a 0d   totalCount);...
2730: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
2740: 74 6f 74 61 6c 43 6f 75 6e 74 3b 0d 0a 20 20 20  totalCount;..   
2750: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
2760: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
2770: 20 53 65 74 54 69 6d 65 6f 75 74 28 69 6e 74 20   SetTimeout(int 
2780: 6e 54 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20  nTimeoutMS)..   
2790: 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
27a0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
27b0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
27c0: 73 2e 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74  s.sqlite3_busy_t
27d0: 69 6d 65 6f 75 74 28 5f 73 71 6c 2c 20 6e 54 69  imeout(_sql, nTi
27e0: 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20 20 20 20 20  meoutMS);..     
27f0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
2800: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
2810: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
2820: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
2830: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
2840: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
2850: 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
2860: 20 53 74 65 70 28 53 51 4c 69 74 65 53 74 61 74   Step(SQLiteStat
2870: 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20  ement stmt)..   
2880: 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
2890: 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20  ErrorCode n;..  
28a0: 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d      Random rnd =
28b0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69   null;..      ui
28c0: 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28  nt starttick = (
28d0: 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74  uint)Environment
28e0: 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 20 20 20  .TickCount;..   
28f0: 20 20 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 20     uint timeout 
2900: 3d 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63  = (uint)(stmt._c
2910: 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54  ommand._commandT
2920: 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 3b 0d  imeout * 1000);.
2930: 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28  ...      while (
2940: 74 72 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  true)..      {..
2950: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
2960: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2970: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 73 74 6d  sqlite3_step(stm
2980: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b  t._sqlite_stmt);
2990: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
29a0: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
29b0: 43 6f 64 65 2e 52 6f 77 29 20 72 65 74 75 72 6e  Code.Row) return
29c0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
29d0: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
29e0: 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 20 72  rrorCode.Done) r
29f0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
2a00: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
2a10: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2a20: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  .Ok)..        {.
2a30: 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74  .          SQLit
2a40: 65 45 72 72 6f 72 43 6f 64 65 20 72 3b 0d 0a 0d  eErrorCode r;...
2a50: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 41 6e  .          // An
2a60: 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 2c   error occurred,
2a70: 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65 73 65   attempt to rese
2a80: 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 2e  t the statement.
2a90: 20 20 49 66 20 74 68 65 20 72 65 73 65 74 20 77    If the reset w
2aa0: 6f 72 6b 65 64 20 62 65 63 61 75 73 65 20 74 68  orked because th
2ab0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  e..          // 
2ac0: 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67  schema has chang
2ad0: 65 64 2c 20 72 65 2d 74 72 79 20 74 68 65 20 73  ed, re-try the s
2ae0: 74 65 70 20 61 67 61 69 6e 2e 20 20 49 66 20 69  tep again.  If i
2af0: 74 20 65 72 72 6f 72 65 64 20 6f 75 72 20 62 65  t errored our be
2b00: 63 61 75 73 65 20 74 68 65 20 64 61 74 61 62 61  cause the databa
2b10: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  se..          //
2b20: 20 69 73 20 6c 6f 63 6b 65 64 2c 20 74 68 65 6e   is locked, then
2b30: 20 6b 65 65 70 20 72 65 74 72 79 69 6e 67 20 75   keep retrying u
2b40: 6e 74 69 6c 20 74 68 65 20 63 6f 6d 6d 61 6e 64  ntil the command
2b50: 20 74 69 6d 65 6f 75 74 20 6f 63 63 75 72 73 2e   timeout occurs.
2b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 20 3d 20  ..          r = 
2b70: 52 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a  Reset(stmt);....
2b80: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 20            if (r 
2b90: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
2ba0: 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
2bb0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
2bc0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
2bd0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
2be0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 65  ;....          e
2bf0: 6c 73 65 20 69 66 20 28 28 72 20 3d 3d 20 53 51  lse if ((r == SQ
2c00: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f  LiteErrorCode.Lo
2c10: 63 6b 65 64 20 7c 7c 20 72 20 3d 3d 20 53 51 4c  cked || r == SQL
2c20: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73  iteErrorCode.Bus
2c30: 79 29 20 26 26 20 73 74 6d 74 2e 5f 63 6f 6d 6d  y) && stmt._comm
2c40: 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  and != null)..  
2c50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2c60: 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74         // Keep t
2c70: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
2c80: 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75     if (rnd == nu
2c90: 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d  ll) // First tim
2ca0: 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65  e we've encounte
2cb0: 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20  red the lock..  
2cc0: 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64 20              rnd 
2cd0: 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d  = new Random();.
2ce0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2cf0: 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65 65  / If we've excee
2d00: 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27  ded the command'
2d10: 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20  s timeout, give 
2d20: 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20  up and throw an 
2d30: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
2d40: 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76     if ((uint)Env
2d50: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
2d60: 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e  nt - starttick >
2d70: 20 74 69 6d 65 6f 75 74 29 0d 0a 20 20 20 20 20   timeout)..     
2d80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d90: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
2da0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
2db0: 6e 28 72 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(r, GetLastErro
2dc0: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
2dd0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2de0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
2df0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2e00: 20 20 20 20 20 2f 2f 20 4f 74 68 65 72 77 69 73       // Otherwis
2e10: 65 20 73 6c 65 65 70 20 66 6f 72 20 61 20 72 61  e sleep for a ra
2e20: 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74  ndom amount of t
2e30: 69 6d 65 20 75 70 20 74 6f 20 31 35 30 6d 73 0d  ime up to 150ms.
2e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
2e50: 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e  ystem.Threading.
2e60: 54 68 72 65 61 64 2e 53 6c 65 65 70 28 72 6e 64  Thread.Sleep(rnd
2e70: 2e 4e 65 78 74 28 31 2c 20 31 35 30 29 29 3b 0d  .Next(1, 150));.
2e80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2e90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2ea0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
2eb0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
2ec0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
2ed0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2ee0: 52 65 73 65 74 28 53 51 4c 69 74 65 53 74 61 74  Reset(SQLiteStat
2ef0: 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20  ement stmt)..   
2f00: 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
2f10: 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a  ErrorCode n;....
2f20: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
2f30: 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20  DARD..      n = 
2f40: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2f50: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65  ods.sqlite3_rese
2f60: 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  t_interop(stmt._
2f70: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23  sqlite_stmt);..#
2f80: 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20  else..      n = 
2f90: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2fa0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65  ods.sqlite3_rese
2fb0: 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
2fc0: 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  tmt);..#endif...
2fd0: 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65  .      // If the
2fe0: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 64 2c   schema changed,
2ff0: 20 74 72 79 20 61 6e 64 20 72 65 2d 70 72 65 70   try and re-prep
3000: 61 72 65 20 69 74 0d 0a 20 20 20 20 20 20 69 66  are it..      if
3010: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
3020: 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 29 0d 0a  orCode.Schema)..
3030: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3040: 20 2f 2f 20 52 65 63 72 65 61 74 65 20 61 20 64   // Recreate a d
3050: 75 6d 6d 79 20 73 74 61 74 65 6d 65 6e 74 0d 0a  ummy statement..
3060: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
3070: 74 72 3b 0d 0a 20 20 20 20 20 20 20 20 75 73 69  tr;..        usi
3080: 6e 67 20 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ng (SQLiteStatem
3090: 65 6e 74 20 74 6d 70 20 3d 20 50 72 65 70 61 72  ent tmp = Prepar
30a0: 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73 71  e(null, stmt._sq
30b0: 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c 6c  lStatement, null
30c0: 2c 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63  , (uint)(stmt._c
30d0: 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54  ommand._commandT
30e0: 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 2c 20  imeout * 1000), 
30f0: 6f 75 74 20 73 74 72 29 29 0d 0a 20 20 20 20 20  out str))..     
3100: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3110: 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74 68 65 20  // Finalize the 
3120: 65 78 69 73 74 69 6e 67 20 73 74 61 74 65 6d 65  existing stateme
3130: 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  nt..          st
3140: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2e  mt._sqlite_stmt.
3150: 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20  Dispose();..    
3160: 20 20 20 20 20 20 2f 2f 20 52 65 61 73 73 69 67        // Reassig
3170: 6e 20 61 20 6e 65 77 20 73 74 61 74 65 6d 65 6e  n a new statemen
3180: 74 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  t pointer to the
3190: 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e 74 20 61   old statement a
31a0: 6e 64 20 63 6c 65 61 72 20 74 68 65 20 74 65 6d  nd clear the tem
31b0: 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20 20  porary one..    
31c0: 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69        stmt._sqli
31d0: 74 65 5f 73 74 6d 74 20 3d 20 74 6d 70 2e 5f 73  te_stmt = tmp._s
31e0: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20  qlite_stmt;..   
31f0: 20 20 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c 69         tmp._sqli
3200: 74 65 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d  te_stmt = null;.
3210: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  ...          // 
3220: 52 65 61 70 70 6c 79 20 70 61 72 61 6d 65 74 65  Reapply paramete
3230: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  rs..          st
3240: 6d 74 2e 42 69 6e 64 50 61 72 61 6d 65 74 65 72  mt.BindParameter
3250: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  s();..        }.
3260: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
3270: 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  (SQLiteErrorCode
3280: 29 28 2d 31 29 3b 20 2f 2f 20 52 65 73 65 74 20  )(-1); // Reset 
3290: 77 61 73 20 4f 4b 2c 20 77 69 74 68 20 73 63 68  was OK, with sch
32a0: 65 6d 61 20 63 68 61 6e 67 65 0d 0a 20 20 20 20  ema change..    
32b0: 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 20    }..      else 
32c0: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
32d0: 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20  rrorCode.Locked 
32e0: 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  || n == SQLiteEr
32f0: 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20  rorCode.Busy).. 
3300: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b         return n;
3310: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  ....      if (n 
3320: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
3330: 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
3340: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
3350: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
3360: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
3370: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
3380: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
3390: 3b 20 2f 2f 20 57 65 20 72 65 73 65 74 20 4f 4b  ; // We reset OK
33a0: 2c 20 6e 6f 20 73 63 68 65 6d 61 20 63 68 61 6e  , no schema chan
33b0: 67 65 73 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ges..    }....  
33c0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
33d0: 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 4c 61  ide string GetLa
33e0: 73 74 45 72 72 6f 72 28 29 0d 0a 20 20 20 20 7b  stError()..    {
33f0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ..      return S
3400: 51 4c 69 74 65 42 61 73 65 2e 47 65 74 4c 61 73  QLiteBase.GetLas
3410: 74 45 72 72 6f 72 28 5f 73 71 6c 2c 20 5f 73 71  tError(_sql, _sq
3420: 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
3430: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
3440: 69 64 65 20 53 51 4c 69 74 65 53 74 61 74 65 6d  ide SQLiteStatem
3450: 65 6e 74 20 50 72 65 70 61 72 65 28 53 51 4c 69  ent Prepare(SQLi
3460: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e  teConnection cnn
3470: 2c 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c 2c  , string strSql,
3480: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
3490: 20 70 72 65 76 69 6f 75 73 2c 20 75 69 6e 74 20   previous, uint 
34a0: 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20 73  timeoutMS, out s
34b0: 74 72 69 6e 67 20 73 74 72 52 65 6d 61 69 6e 29  tring strRemain)
34c0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
34d0: 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
34e0: 6c 4f 72 45 6d 70 74 79 28 73 74 72 53 71 6c 29  lOrEmpty(strSql)
34f0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
3500: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3510: 2f 2f 20 4e 4f 54 45 3a 20 53 51 4c 69 74 65 20  // NOTE: SQLite 
3520: 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
3530: 20 74 68 65 20 63 6f 6e 63 65 70 74 20 6f 66 20   the concept of 
3540: 73 65 70 61 72 61 74 65 20 73 63 68 65 6d 61 73  separate schemas
3550: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
3560: 20 20 20 69 6e 20 6f 6e 65 20 64 61 74 61 62 61     in one databa
3570: 73 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72  se; therefore, r
3580: 65 6d 6f 76 65 20 74 68 65 20 62 61 73 65 20 73  emove the base s
3590: 63 68 65 6d 61 20 6e 61 6d 65 0d 0a 20 20 20 20  chema name..    
35a0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 73 65      //       use
35b0: 64 20 74 6f 20 73 6d 6f 6f 74 68 20 69 6e 74 65  d to smooth inte
35c0: 67 72 61 74 69 6f 6e 20 77 69 74 68 20 74 68 65  gration with the
35d0: 20 62 61 73 65 20 2e 4e 45 54 20 46 72 61 6d 65   base .NET Frame
35e0: 77 6f 72 6b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  work..        //
35f0: 20 20 20 20 20 20 20 64 61 74 61 20 63 6c 61 73         data clas
3600: 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ses...        //
3610: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
3620: 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20   baseSchemaName 
3630: 3d 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20  = (cnn != null) 
3640: 3f 20 63 6e 6e 2e 5f 62 61 73 65 53 63 68 65 6d  ? cnn._baseSchem
3650: 61 4e 61 6d 65 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d  aName : null;...
3660: 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74  .        if (!St
3670: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
3680: 74 79 28 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  ty(baseSchemaNam
3690: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  e))..        {..
36a0: 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c            strSql
36b0: 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63   = strSql.Replac
36c0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
36d0: 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
36e0: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
36f0: 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  riantCulture,.. 
3700: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5b 7b               "[{
3710: 30 7d 5d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d  0}].", baseSchem
3720: 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45  aName), String.E
3730: 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mpty);....      
3740: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
3750: 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20  Sql.Replace(..  
3760: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
3770: 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72  ng.Format(Cultur
3780: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
3790: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
37a0: 20 20 20 20 20 20 20 22 7b 30 7d 2e 22 2c 20 62         "{0}.", b
37b0: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20  aseSchemaName), 
37c0: 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
37d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
37e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69   }....      SQLi
37f0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
3800: 73 20 66 6c 61 67 73 20 3d 0d 0a 20 20 20 20 20  s flags =..     
3810: 20 20 20 20 20 28 63 6e 6e 20 21 3d 20 6e 75 6c       (cnn != nul
3820: 6c 29 20 3f 20 63 6e 6e 2e 46 6c 61 67 73 20 3a  l) ? cnn.Flags :
3830: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
3840: 6e 46 6c 61 67 73 2e 44 65 66 61 75 6c 74 3b 0d  nFlags.Default;.
3850: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
3860: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
3870: 4b 0d 0a 20 20 20 20 20 20 69 66 20 28 28 66 6c  K..      if ((fl
3880: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
3890: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50  ectionFlags.LogP
38a0: 72 65 70 61 72 65 29 20 3d 3d 20 53 51 4c 69 74  repare) == SQLit
38b0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
38c0: 2e 4c 6f 67 50 72 65 70 61 72 65 29 0d 0a 20 20  .LogPrepare)..  
38d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
38e0: 20 69 66 20 28 28 73 74 72 53 71 6c 20 3d 3d 20   if ((strSql == 
38f0: 6e 75 6c 6c 29 20 7c 7c 20 28 73 74 72 53 71 6c  null) || (strSql
3900: 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 20 7c 7c  .Length == 0) ||
3910: 20 28 73 74 72 53 71 6c 2e 54 72 69 6d 28 29 2e   (strSql.Trim().
3920: 4c 65 6e 67 74 68 20 3d 3d 20 30 29 29 0d 0a 20  Length == 0)).. 
3930: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
3940: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
3950: 65 28 22 50 72 65 70 61 72 69 6e 67 20 7b 3c 6e  e("Preparing {<n
3960: 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a  othing>}...");..
3970: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
3980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
3990: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
39a0: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
39b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
39c0: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
39d0: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
39e0: 20 22 50 72 65 70 61 72 69 6e 67 20 7b 7b 7b 30   "Preparing {{{0
39f0: 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72 53 71 6c 29  }}}...", strSql)
3a00: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 23 65 6e  );..      }..#en
3a10: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 49 6e 74  dif....      Int
3a20: 50 74 72 20 73 74 6d 74 20 3d 20 49 6e 74 50 74  Ptr stmt = IntPt
3a30: 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49  r.Zero;..      I
3a40: 6e 74 50 74 72 20 70 74 72 20 3d 20 49 6e 74 50  ntPtr ptr = IntP
3a50: 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
3a60: 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20  int len = 0;..  
3a70: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
3a80: 6f 64 65 20 6e 20 3d 20 53 51 4c 69 74 65 45 72  ode n = SQLiteEr
3a90: 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 3b 0d  rorCode.Schema;.
3aa0: 0a 20 20 20 20 20 20 69 6e 74 20 72 65 74 72 69  .      int retri
3ab0: 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 62  es = 0;..      b
3ac0: 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38  yte[] b = ToUTF8
3ad0: 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20 20 20 20  (strSql);..     
3ae0: 20 73 74 72 69 6e 67 20 74 79 70 65 64 65 66 73   string typedefs
3af0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
3b00: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
3b10: 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  cmd = null;..   
3b20: 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20     Random rnd = 
3b30: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e  null;..      uin
3b40: 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28 75  t starttick = (u
3b50: 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e  int)Environment.
3b60: 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20  TickCount;....  
3b70: 20 20 20 20 47 43 48 61 6e 64 6c 65 20 68 61 6e      GCHandle han
3b80: 64 6c 65 20 3d 20 47 43 48 61 6e 64 6c 65 2e 41  dle = GCHandle.A
3b90: 6c 6c 6f 63 28 62 2c 20 47 43 48 61 6e 64 6c 65  lloc(b, GCHandle
3ba0: 54 79 70 65 2e 50 69 6e 6e 65 64 29 3b 0d 0a 20  Type.Pinned);.. 
3bb0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 73 71 6c       IntPtr psql
3bc0: 20 3d 20 68 61 6e 64 6c 65 2e 41 64 64 72 4f 66   = handle.AddrOf
3bd0: 50 69 6e 6e 65 64 4f 62 6a 65 63 74 28 29 3b 0d  PinnedObject();.
3be0: 0a 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20  .      try..    
3bf0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 77 68 69    {..        whi
3c00: 6c 65 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65  le ((n == SQLite
3c10: 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61  ErrorCode.Schema
3c20: 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45   || n == SQLiteE
3c30: 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20  rrorCode.Locked 
3c40: 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  || n == SQLiteEr
3c50: 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 26 26  rorCode.Busy) &&
3c60: 20 72 65 74 72 69 65 73 20 3c 20 33 29 0d 0a 20   retries < 3).. 
3c70: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53         {..#if !S
3c80: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
3c90: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
3ca0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
3cb0: 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  s.sqlite3_prepar
3cc0: 65 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  e_interop(_sql, 
3cd0: 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  psql, b.Length -
3ce0: 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75   1, out stmt, ou
3cf0: 74 20 70 74 72 2c 20 6f 75 74 20 6c 65 6e 29 3b  t ptr, out len);
3d00: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
3d10: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
3d20: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
3d30: 65 33 5f 70 72 65 70 61 72 65 28 5f 73 71 6c 2c  e3_prepare(_sql,
3d40: 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20   psql, b.Length 
3d50: 2d 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f  - 1, out stmt, o
3d60: 75 74 20 70 74 72 29 3b 0d 0a 20 20 20 20 20 20  ut ptr);..      
3d70: 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 23      len = -1;..#
3d80: 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 21 4e 45  endif....#if !NE
3d90: 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
3da0: 54 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 0d  TRACE_STATEMENT.
3db0: 0a 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65  .          Trace
3dc0: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
3dd0: 67 2e 46 6f 72 6d 61 74 28 22 50 72 65 70 61 72  g.Format("Prepar
3de0: 65 20 28 7b 30 7d 29 3a 20 7b 31 7d 22 2c 20 6e  e ({0}): {1}", n
3df0: 2c 20 73 74 6d 74 29 29 3b 0d 0a 23 65 6e 64 69  , stmt));..#endi
3e00: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  f....          i
3e10: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
3e20: 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 29 0d  rorCode.Schema).
3e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
3e40: 72 69 65 73 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  ries++;..       
3e50: 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
3e60: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
3e70: 2e 45 72 72 6f 72 29 0d 0a 20 20 20 20 20 20 20  .Error)..       
3e80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3e90: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d    if (String.Com
3ea0: 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f  pare(GetLastErro
3eb0: 72 28 29 2c 20 22 6e 65 61 72 20 5c 22 54 59 50  r(), "near \"TYP
3ec0: 45 53 5c 22 3a 20 73 79 6e 74 61 78 20 65 72 72  ES\": syntax err
3ed0: 6f 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  or", StringCompa
3ee0: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
3ef0: 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a  oreCase) == 0)..
3f00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
3f20: 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 49 6e   pos = strSql.In
3f30: 64 65 78 4f 66 28 27 3b 27 29 3b 0d 0a 20 20 20  dexOf(';');..   
3f40: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
3f50: 6f 73 20 3d 3d 20 2d 31 29 20 70 6f 73 20 3d 20  os == -1) pos = 
3f60: 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20  strSql.Length - 
3f70: 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  1;....          
3f80: 20 20 20 20 74 79 70 65 64 65 66 73 20 3d 20 73      typedefs = s
3f90: 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28  trSql.Substring(
3fa0: 30 2c 20 70 6f 73 20 2b 20 31 29 3b 0d 0a 20 20  0, pos + 1);..  
3fb0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53              strS
3fc0: 71 6c 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73  ql = strSql.Subs
3fd0: 74 72 69 6e 67 28 70 6f 73 20 2b 20 31 29 3b 0d  tring(pos + 1);.
3fe0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3ff0: 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b   strRemain = "";
4000: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4010: 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20    while (cmd == 
4020: 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c  null && strSql.L
4030: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
4040: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4050: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64               cmd
4060: 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20   = Prepare(cnn, 
4070: 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73  strSql, previous
4080: 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74  , timeoutMS, out
4090: 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20   strRemain);..  
40a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
40b0: 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e  rSql = strRemain
40c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
40d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
40e0: 20 20 20 20 69 66 20 28 63 6d 64 20 21 3d 20 6e      if (cmd != n
40f0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
4100: 20 20 20 20 20 20 63 6d 64 2e 53 65 74 54 79 70        cmd.SetTyp
4110: 65 73 28 74 79 70 65 64 65 66 73 29 3b 0d 0a 0d  es(typedefs);...
4120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
4130: 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20  eturn cmd;..    
4140: 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 28          }..#if (
4150: 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f 34 30  NET_35 || NET_40
4160: 29 20 26 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43  ) && !PLATFORM_C
4170: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
4180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
4190: 65 20 69 66 20 28 5f 62 75 69 6c 64 69 6e 67 53  e if (_buildingS
41a0: 63 68 65 6d 61 20 3d 3d 20 66 61 6c 73 65 20 26  chema == false &
41b0: 26 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65  & String.Compare
41c0: 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c  (GetLastError(),
41d0: 20 30 2c 20 22 6e 6f 20 73 75 63 68 20 74 61 62   0, "no such tab
41e0: 6c 65 3a 20 54 45 4d 50 2e 53 43 48 45 4d 41 22  le: TEMP.SCHEMA"
41f0: 2c 20 30 2c 20 32 36 2c 20 53 74 72 69 6e 67 43  , 0, 26, StringC
4200: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
4210: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20  lIgnoreCase) == 
4220: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
4230: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4240: 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b   strRemain = "";
4250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4260: 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20  _buildingSchema 
4270: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
4280: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
4290: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
42a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 53 51               ISQ
42b0: 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73  LiteSchemaExtens
42c0: 69 6f 6e 73 20 65 78 74 20 3d 20 28 28 49 53 65  ions ext = ((ISe
42d0: 72 76 69 63 65 50 72 6f 76 69 64 65 72 29 53 51  rviceProvider)SQ
42e0: 4c 69 74 65 46 61 63 74 6f 72 79 2e 49 6e 73 74  LiteFactory.Inst
42f0: 61 6e 63 65 29 2e 47 65 74 53 65 72 76 69 63 65  ance).GetService
4300: 28 74 79 70 65 6f 66 28 49 53 51 4c 69 74 65 53  (typeof(ISQLiteS
4310: 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 29  chemaExtensions)
4320: 29 20 61 73 20 49 53 51 4c 69 74 65 53 63 68 65  ) as ISQLiteSche
4330: 6d 61 45 78 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d  maExtensions;...
4340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4350: 20 69 66 20 28 65 78 74 20 21 3d 20 6e 75 6c 6c   if (ext != null
4360: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4370: 20 20 20 20 20 65 78 74 2e 42 75 69 6c 64 54 65       ext.BuildTe
4380: 6d 70 53 63 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a  mpSchema(cnn);..
4390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
43a0: 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20    while (cmd == 
43b0: 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c  null && strSql.L
43c0: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
43d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43f0: 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63   cmd = Prepare(c
4400: 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76  nn, strSql, prev
4410: 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c  ious, timeoutMS,
4420: 20 6f 75 74 20 73 74 72 52 65 6d 61 69 6e 29 3b   out strRemain);
4430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4440: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
4450: 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20  Remain;..       
4460: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4480: 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20  turn cmd;..     
4490: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
44a0: 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
44b0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
44c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
44d0: 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68      _buildingSch
44e0: 65 6d 61 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  ema = false;..  
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4500: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
4510: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
4520: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  }..          els
4530: 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
4540: 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65  eErrorCode.Locke
4550: 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65  d || n == SQLite
4560: 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20  ErrorCode.Busy) 
4570: 2f 2f 20 4c 6f 63 6b 65 64 20 2d 2d 20 64 65 6c  // Locked -- del
4580: 61 79 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ay a small amoun
4590: 74 20 62 65 66 6f 72 65 20 72 65 74 72 79 69 6e  t before retryin
45a0: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  g..          {..
45b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b              // K
45c0: 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20  eep trying..    
45d0: 20 20 20 20 20 20 20 20 69 66 20 28 72 6e 64 20          if (rnd 
45e0: 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73  == null) // Firs
45f0: 74 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63  t time we've enc
4600: 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63  ountered the loc
4610: 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  k..             
4620: 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f   rnd = new Rando
4630: 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  m();....        
4640: 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20      // If we've 
4650: 65 78 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d  exceeded the com
4660: 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20  mand's timeout, 
4670: 67 69 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f  give up and thro
4680: 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20  w an error..    
4690: 20 20 20 20 20 20 20 20 69 66 20 28 28 75 69 6e          if ((uin
46a0: 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69  t)Environment.Ti
46b0: 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74  ckCount - startt
46c0: 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 4d 53 29  ick > timeoutMS)
46d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
46e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
46f0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
4700: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
4710: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
4720: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4730: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
4740: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f              // O
4760: 74 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66  therwise sleep f
4770: 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75  or a random amou
4780: 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f  nt of time up to
4790: 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20   150ms..        
47a0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72        System.Thr
47b0: 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c  eading.Thread.Sl
47c0: 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20  eep(rnd.Next(1, 
47d0: 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  150));..        
47e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
47f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
4800: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
4810: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
4820: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
4830: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
4840: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
4850: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  ));....        s
4860: 74 72 52 65 6d 61 69 6e 20 3d 20 55 54 46 38 54  trRemain = UTF8T
4870: 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e  oString(ptr, len
4880: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
4890: 20 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74 72   (stmt != IntPtr
48a0: 2e 5a 65 72 6f 29 20 63 6d 64 20 3d 20 6e 65 77  .Zero) cmd = new
48b0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
48c0: 28 74 68 69 73 2c 20 66 6c 61 67 73 2c 20 6e 65  (this, flags, ne
48d0: 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  w SQLiteStatemen
48e0: 74 48 61 6e 64 6c 65 28 5f 73 71 6c 2c 20 73 74  tHandle(_sql, st
48f0: 6d 74 29 2c 20 73 74 72 53 71 6c 2e 53 75 62 73  mt), strSql.Subs
4900: 74 72 69 6e 67 28 30 2c 20 73 74 72 53 71 6c 2e  tring(0, strSql.
4910: 4c 65 6e 67 74 68 20 2d 20 73 74 72 52 65 6d 61  Length - strRema
4920: 69 6e 2e 4c 65 6e 67 74 68 29 2c 20 70 72 65 76  in.Length), prev
4930: 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ious);....      
4940: 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20    return cmd;.. 
4950: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 66 69       }..      fi
4960: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 7b 0d 0a  nally..      {..
4970: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 46          handle.F
4980: 72 65 65 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ree();..      }.
4990: 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50  .    }....#if !P
49a0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
49b0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 70 72  RAMEWORK..    pr
49c0: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
49d0: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
49e0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
49f0: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
4a00: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
4a10: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
4a20: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
4a30: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
4a40: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
4a50: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
4a60: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  (..            "
4a70: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
4a80: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
4a90: 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e 2e 22 2c  {1} as NULL...",
4aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61  ..            ha
4ab0: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65  ndleIntPtr, inde
4ac0: 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  x));..    }.... 
4ad0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61     protected sta
4ae0: 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64  tic void LogBind
4af0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
4b00: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69  Handle handle, i
4b10: 6e 74 20 69 6e 64 65 78 2c 20 56 61 6c 75 65 54  nt index, ValueT
4b20: 79 70 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ype value)..    
4b30: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
4b40: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
4b50: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
4b60: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
4b70: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
4b80: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
4b90: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
4ba0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
4bb0: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
4bc0: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
4bd0: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
4be0: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
4bf0: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
4c00: 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 2c  value.GetType(),
4c10: 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d   value));..    }
4c20: 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
4c30: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 46 6f  static string Fo
4c40: 72 6d 61 74 44 61 74 65 54 69 6d 65 28 44 61 74  rmatDateTime(Dat
4c50: 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20  eTime value)..  
4c60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 74 72    {..        Str
4c70: 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c  ingBuilder resul
4c80: 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  t = new StringBu
4c90: 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20  ilder();....    
4ca0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
4cb0: 64 28 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67  d(value.ToString
4cc0: 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a  ("yyyy-MM-ddTHH:
4cd0: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22 29  mm:ss.FFFFFFFK")
4ce0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
4cf0: 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d  lt.Append(' ');.
4d00: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
4d10: 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b 69 6e  Append(value.Kin
4d20: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73  d);..        res
4d30: 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b  ult.Append(' ');
4d40: 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74  ..        result
4d50: 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54 69  .Append(value.Ti
4d60: 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  cks);....       
4d70: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54   return result.T
4d80: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
4d90: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
4da0: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
4db0: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
4dc0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
4dd0: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
4de0: 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d  DateTime value).
4df0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
4e00: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
4e10: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
4e20: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
4e30: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
4e40: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
4e50: 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69            "Bindi
4e60: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d  ng statement {0}
4e70: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61   paramter #{1} a
4e80: 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20  s type {2} with 
4e90: 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e  value {{{3}}}...
4ea0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
4eb0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
4ec0: 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61 74 65  dex, typeof(Date
4ed0: 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44 61 74  Time), FormatDat
4ee0: 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29 3b 0d  eTime(value)));.
4ef0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
4f00: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
4f10: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
4f20: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
4f30: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
4f40: 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  dex, string valu
4f50: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
4f60: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
4f70: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
4f80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
4f90: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
4fa0: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
4fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69  .            "Bi
4fc0: 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  nding statement 
4fd0: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31  {0} paramter #{1
4fe0: 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69  } as type {2} wi
4ff0: 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d  th value {{{3}}}
5000: 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
5010: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
5020: 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 53   index, typeof(S
5030: 74 72 69 6e 67 29 2c 20 28 76 61 6c 75 65 20 21  tring), (value !
5040: 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75 65 20  = null) ? value 
5050: 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20  : "<null>"));.. 
5060: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76     }....    priv
5070: 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
5080: 67 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c 53  g ToHexadecimalS
5090: 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20  tring(..        
50a0: 62 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a 20 20  byte[] array..  
50b0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
50c0: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 72 61          if (arra
50d0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
50e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
50f0: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
5100: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65  StringBuilder re
5110: 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e  sult = new Strin
5120: 67 42 75 69 6c 64 65 72 28 61 72 72 61 79 2e 4c  gBuilder(array.L
5130: 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d 0a 20  ength * 2);.... 
5140: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74         int lengt
5150: 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74 68  h = array.Length
5160: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  ;....        for
5170: 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
5180: 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b   index < length;
5190: 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20   index++)..     
51a0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
51b0: 70 65 6e 64 28 61 72 72 61 79 5b 69 6e 64 65 78  pend(array[index
51c0: 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78 32 22 29  ].ToString("x2")
51d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
51e0: 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74  turn result.ToSt
51f0: 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ring();..    }..
5200: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
5210: 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42  static void LogB
5220: 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ind(SQLiteStatem
5230: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
5240: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74  , int index, byt
5250: 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  e[] value)..    
5260: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
5270: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
5280: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
5290: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
52a0: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
52b0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
52c0: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
52d0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
52e0: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
52f0: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
5300: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
5310: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
5320: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
5330: 74 79 70 65 6f 66 28 42 79 74 65 5b 5d 29 2c 20  typeof(Byte[]), 
5340: 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20  (value != null) 
5350: 3f 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c 53  ? ToHexadecimalS
5360: 74 72 69 6e 67 28 76 61 6c 75 65 29 20 3a 20 22  tring(value) : "
5370: 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20  <null>"));..    
5380: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
5390: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
53a0: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 6f 75  de void Bind_Dou
53b0: 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
53c0: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
53d0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
53e0: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
53f0: 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d  , double value).
5400: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5410: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
5420: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
5430: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
5440: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
5450: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
5460: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
5470: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
5480: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5490: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
54a0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
54b0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
54c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
54d0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
54e0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
54f0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
5500: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
5510: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
5520: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5530: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75  sqlite3_bind_dou
5540: 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ble(handle, inde
5550: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  x, value);..#els
5560: 65 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  e..        SQLit
5570: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
5580: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
5590: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
55a0: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68  double_interop(h
55b0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
55c0: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69  f value);..#endi
55d0: 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  f..        if (n
55e0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
55f0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
5600: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
5610: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
5620: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
5630: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
5640: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
5650: 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74  Int32(SQLiteStat
5660: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
5670: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
5680: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
5690: 65 78 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a  ex, int value)..
56a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
56b0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
56c0: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
56d0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
56e0: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
56f0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
5700: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
5710: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
5720: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
5730: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
5740: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5750: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
5760: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5770: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
5780: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
5790: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
57a0: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  dif....        S
57b0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
57c0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
57d0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
57e0: 69 6e 64 5f 69 6e 74 28 68 61 6e 64 6c 65 2c 20  ind_int(handle, 
57f0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
5800: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
5810: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
5820: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
5830: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
5840: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
5850: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
5860: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5870: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e  de void Bind_UIn
5880: 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t32(SQLiteStatem
5890: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
58a0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
58b0: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
58c0: 2c 20 75 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20  , uint value).. 
58d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
58e0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
58f0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
5900: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
5910: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
5920: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
5930: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
5940: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
5950: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
5960: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
5970: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5980: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
5990: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
59a0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
59b0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
59c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
59d0: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  if....        SQ
59e0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
59f0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
5a00: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
5a10: 6e 64 5f 75 69 6e 74 28 68 61 6e 64 6c 65 2c 20  nd_uint(handle, 
5a20: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
5a30: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
5a40: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
5a50: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
5a60: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
5a70: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
5a80: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
5a90: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5aa0: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74  de void Bind_Int
5ab0: 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
5ac0: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
5ad0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
5ae0: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
5af0: 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20   long value)..  
5b00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
5b10: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
5b20: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
5b30: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
5b40: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
5b50: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
5b60: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
5b70: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
5b80: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
5b90: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
5ba0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
5bb0: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
5bc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5bd0: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
5be0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
5bf0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5c00: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
5c10: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
5c20: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5c30: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28  ite3_bind_int64(
5c40: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
5c50: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
5c60: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
5c70: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
5c80: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
5c90: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
5ca0: 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  4_interop(handle
5cb0: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
5cc0: 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ue);..#endif..  
5cd0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
5ce0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
5cf0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
5d00: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
5d10: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
5d20: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
5d30: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
5d40: 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 36   void Bind_UInt6
5d50: 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  4(SQLiteStatemen
5d60: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
5d70: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
5d80: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
5d90: 75 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20  ulong value)..  
5da0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
5db0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
5dc0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
5dd0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
5de0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
5df0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
5e00: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
5e10: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
5e20: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
5e30: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
5e40: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
5e50: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
5e60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5e70: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
5e80: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
5e90: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5ea0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
5eb0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
5ec0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5ed0: 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34  ite3_bind_uint64
5ee0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
5ef0: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
5f00: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
5f10: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
5f20: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5f30: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e  sqlite3_bind_uin
5f40: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
5f50: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
5f60: 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  alue);..#endif..
5f70: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
5f80: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
5f90: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
5fa0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
5fb0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
5fc0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
5fd0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5fe0: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 54 65 78  de void Bind_Tex
5ff0: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
6000: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
6010: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
6020: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
6030: 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20  string value).. 
6040: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
6050: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
6060: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
6070: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
6080: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
6090: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
60a0: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
60b0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
60c0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
60d0: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
60e0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
60f0: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
6100: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6110: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
6120: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
6130: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
6140: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 79  if....        by
6150: 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28  te[] b = ToUTF8(
6160: 76 61 6c 75 65 29 3b 0d 0a 0d 0a 23 69 66 20 21  value);....#if !
6170: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
6180: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
6190: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
61a0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
61b0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
61c0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
61d0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
61e0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
61f0: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
6200: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
6210: 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  b);..        }..
6220: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
6230: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
6240: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
6250: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6260: 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61 6e 64  3_bind_text(hand
6270: 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e  le, index, b, b.
6280: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74  Length - 1, (Int
6290: 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20  Ptr)(-1));..    
62a0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
62b0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
62c0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
62d0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
62e0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
62f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
6300: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
6310: 6f 69 64 20 42 69 6e 64 5f 44 61 74 65 54 69 6d  oid Bind_DateTim
6320: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
6330: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
6340: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
6350: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
6360: 44 61 74 65 54 69 6d 65 20 64 74 29 0d 0a 20 20  DateTime dt)..  
6370: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
6380: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
6390: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
63a0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
63b0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
63c0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
63d0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
63e0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
63f0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
6400: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
6410: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
6420: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
6430: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6440: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
6450: 69 6e 64 65 78 2c 20 64 74 29 3b 0d 0a 20 20 20  index, dt);..   
6460: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
6470: 0d 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68  ..        switch
6480: 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61   (_datetimeForma
6490: 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  t)..        {.. 
64a0: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
64b0: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
64c0: 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20 20 20 20  s.Ticks:..      
64d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
64e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64f0: 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20 64 74   long value = dt
6500: 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 23 69 66 20 21  .Ticks;....#if !
6510: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
6520: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
6530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6540: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
6550: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6560: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
6570: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6580: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
6590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
65b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67               Log
65c0: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
65d0: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
65e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
6600: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
6610: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
6620: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6630: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
6640: 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64  nt64(handle, ind
6650: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ex, value);..#el
6660: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
6670: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
6680: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
6690: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
66a0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
66b0: 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  64_interop(handl
66c0: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
66d0: 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lue);..#endif.. 
66e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66f0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
6700: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
6710: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
6720: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
6730: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
6740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6750: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
6760: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6770: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
6780: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
6790: 2e 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a 20 20 20  .JulianDay:..   
67a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
67b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67c0: 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65      double value
67d0: 20 3d 20 54 6f 4a 75 6c 69 61 6e 44 61 79 28 64   = ToJulianDay(d
67e0: 74 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  t);....#if !PLAT
67f0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
6800: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
6810: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
6820: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
6830: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
6840: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
6850: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6860: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
6870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6890: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
68a0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
68b0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
68c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
68d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
68e0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
68f0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
6900: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
6910: 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c  lite3_bind_doubl
6920: 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  e(handle, index,
6930: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
6940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6950: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
6960: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
6970: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6980: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
6990: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
69a0: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
69b0: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
69c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69d0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
69e0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
69f0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
6a00: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
6a10: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
6a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a30: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
6a40: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6a50: 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
6a60: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55  iteDateFormats.U
6a70: 6e 69 78 45 70 6f 63 68 3a 0d 0a 20 20 20 20 20  nixEpoch:..     
6a80: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6aa0: 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20 43    long value = C
6ab0: 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 36 34 28 64  onvert.ToInt64(d
6ac0: 74 2e 53 75 62 74 72 61 63 74 28 55 6e 69 78 45  t.Subtract(UnixE
6ad0: 70 6f 63 68 29 2e 54 6f 74 61 6c 53 65 63 6f 6e  poch).TotalSecon
6ae0: 64 73 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  ds);....#if !PLA
6af0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
6b00: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
6b10: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6b20: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
6b30: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
6b40: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
6b50: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6b60: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
6b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
6b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6b90: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
6ba0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
6bb0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
6bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6bd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6be0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
6bf0: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
6c00: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6c10: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
6c20: 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  4(handle, index,
6c30: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
6c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6c50: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
6c60: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
6c70: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6c80: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f  ite3_bind_int64_
6c90: 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20  interop(handle, 
6ca0: 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65  index, ref value
6cb0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
6cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6cd0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
6ce0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
6cf0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
6d00: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
6d10: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
6d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d30: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
6d40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6d50: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d         default:.
6d60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6d70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6d80: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
6d90: 20 3d 20 54 6f 55 54 46 38 28 64 74 29 3b 0d 0a   = ToUTF8(dt);..
6da0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
6db0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
6dc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6dd0: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
6de0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
6df0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
6e00: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
6e10: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
6e20: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nd)..           
6e30: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e50: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
6e60: 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a  le, index, b);..
6e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e80: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
6e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ea0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
6eb0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
6ec0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6ed0: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68  ite3_bind_text(h
6ee0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c  andle, index, b,
6ef0: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28   b.Length - 1, (
6f00: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
6f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f20: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
6f30: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
6f40: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
6f50: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
6f60: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f80: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
6f90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6fa0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
6fb0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
6fc0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
6fd0: 64 5f 42 6c 6f 62 28 53 51 4c 69 74 65 53 74 61  d_Blob(SQLiteSta
6fe0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
6ff0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7000: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
7010: 64 65 78 2c 20 62 79 74 65 5b 5d 20 62 6c 6f 62  dex, byte[] blob
7020: 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Data)..    {..  
7030: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
7040: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
7050: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
7060: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21  e_stmt;....#if !
7070: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
7080: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
7090: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
70a0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
70b0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
70c0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
70d0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
70e0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
70f0: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
7100: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
7110: 62 6c 6f 62 44 61 74 61 29 3b 0d 0a 20 20 20 20  blobData);..    
7120: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
7130: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
7140: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
7150: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7160: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c  .sqlite3_bind_bl
7170: 6f 62 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  ob(handle, index
7180: 2c 20 62 6c 6f 62 44 61 74 61 2c 20 62 6c 6f 62  , blobData, blob
7190: 44 61 74 61 2e 4c 65 6e 67 74 68 2c 20 28 49 6e  Data.Length, (In
71a0: 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20  tPtr)(-1));..   
71b0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
71c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
71d0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
71e0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
71f0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
7200: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
7210: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
7220: 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c 6c 28 53  void Bind_Null(S
7230: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
7240: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
7250: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
7260: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
7270: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
7280: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
7290: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
72a0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
72b0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
72c0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
72d0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
72e0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
72f0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
7300: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
7310: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
7320: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
7330: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7340: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
7350: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
7360: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
7370: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
7380: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
7390: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
73a0: 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28  lite3_bind_null(
73b0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d  handle, index);.
73c0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
73d0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
73e0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
73f0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
7400: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
7410: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
7420: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
7430: 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61 72  ide int Bind_Par
7440: 61 6d 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74  amCount(SQLiteSt
7450: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
7460: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7470: 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20  ags flags)..    
7480: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
7490: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
74a0: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
74b0: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20  sqlite_stmt;..  
74c0: 20 20 20 20 20 20 69 6e 74 20 76 61 6c 75 65 20        int value 
74d0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
74e0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
74f0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75  nd_parameter_cou
7500: 6e 74 28 68 61 6e 64 6c 65 29 3b 0d 0a 0d 0a 23  nt(handle);....#
7510: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
7520: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
7530: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
7540: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
7550: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
7560: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
7570: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
7580: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
7590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
75a0: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
75b0: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
75c0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
75d0: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
75e0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
7600: 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  Statement {0} pa
7610: 72 61 6d 74 65 72 20 63 6f 75 6e 74 20 69 73 20  ramter count is 
7620: 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  {1}.",..        
7630: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
7640: 74 50 74 72 2c 20 76 61 6c 75 65 29 29 3b 0d 0a  tPtr, value));..
7650: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
7660: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  f....        ret
7670: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
7680: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
7690: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
76a0: 67 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65  g Bind_ParamName
76b0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
76c0: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
76d0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
76e0: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  gs, int index)..
76f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
7700: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
7710: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
7720: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
7730: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
7740: 20 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53   name;....#if !S
7750: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
7760: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b          int len;
7770: 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d  ..        name =
7780: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
7790: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
77a0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  s.sqlite3_bind_p
77b0: 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f 69 6e  arameter_name_in
77c0: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
77d0: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  dex, out len), l
77e0: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
77f0: 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46 38       name = UTF8
7800: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
7810: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
7820: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
7830: 74 65 72 5f 6e 61 6d 65 28 68 61 6e 64 6c 65 2c  ter_name(handle,
7840: 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23   index), -1);..#
7850: 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 21 50 4c  endif....#if !PL
7860: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
7870: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
7880: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
7890: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
78a0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
78b0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
78c0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
78d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
78e0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
78f0: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
7900: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
7910: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
7920: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
7930: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
7940: 20 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d           "Statem
7950: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
7960: 20 23 7b 31 7d 20 6e 61 6d 65 20 69 73 20 7b 7b   #{1} name is {{
7970: 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20 20 20  {2}}}.",..      
7980: 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65            handle
7990: 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 6e  IntPtr, index, n
79a0: 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ame));..        
79b0: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
79c0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 61 6d 65       return name
79d0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
79e0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
79f0: 65 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d  e int Bind_Param
7a00: 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61 74  Index(SQLiteStat
7a10: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
7a20: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7a30: 73 20 66 6c 61 67 73 2c 20 73 74 72 69 6e 67 20  s flags, string 
7a40: 70 61 72 61 6d 4e 61 6d 65 29 0d 0a 20 20 20 20  paramName)..    
7a50: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
7a60: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
7a70: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
7a80: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20  sqlite_stmt;..  
7a90: 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20        int index 
7aa0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
7ab0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
7ac0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64  nd_parameter_ind
7ad0: 65 78 28 68 61 6e 64 6c 65 2c 20 54 6f 55 54 46  ex(handle, ToUTF
7ae0: 38 28 70 61 72 61 6d 4e 61 6d 65 29 29 3b 0d 0a  8(paramName));..
7af0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
7b00: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
7b10: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
7b20: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
7b30: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
7b40: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
7b50: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
7b60: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
7b70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7b80: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
7b90: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
7ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
7bb0: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
7bc0: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
7bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7be0: 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d    "Statement {0}
7bf0: 20 70 61 72 61 6d 74 65 72 20 69 6e 64 65 78 20   paramter index 
7c00: 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d 7d 20  of name {{{1}}} 
7c10: 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20 20 20  is #{2}.",..    
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
7c30: 6c 65 49 6e 74 50 74 72 2c 20 70 61 72 61 6d 4e  leIntPtr, paramN
7c40: 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20  ame, index));.. 
7c50: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
7c60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
7c70: 72 6e 20 69 6e 64 65 78 3b 0d 0a 20 20 20 20 7d  rn index;..    }
7c80: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
7c90: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f   override int Co
7ca0: 6c 75 6d 6e 43 6f 75 6e 74 28 53 51 4c 69 74 65  lumnCount(SQLite
7cb0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d  Statement stmt).
7cc0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
7cd0: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
7ce0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7cf0: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73 74  _column_count(st
7d00: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29  mt._sqlite_stmt)
7d10: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
7d20: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
7d30: 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e  e string ColumnN
7d40: 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
7d50: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
7d60: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
7d70: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
7d80: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
7d90: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
7da0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
7db0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7dc0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
7dd0: 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  name_interop(stm
7de0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
7df0: 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c  index, out len),
7e00: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
7e10: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
7e20: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
7e30: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
7e40: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
7e50: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
7e60: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b  mt, index), -1);
7e70: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
7e80: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
7e90: 6f 76 65 72 72 69 64 65 20 54 79 70 65 41 66 66  override TypeAff
7ea0: 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66 66 69  inity ColumnAffi
7eb0: 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61 74 65  nity(SQLiteState
7ec0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
7ed0: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
7ee0: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
7ef0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7f00: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79  qlite3_column_ty
7f10: 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  pe(stmt._sqlite_
7f20: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
7f30: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
7f40: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
7f50: 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70 65 28  ring ColumnType(
7f60: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
7f70: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
7f80: 20 6f 75 74 20 54 79 70 65 41 66 66 69 6e 69 74   out TypeAffinit
7f90: 79 20 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20 20  y nAffinity)..  
7fa0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c    {..      int l
7fb0: 65 6e 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  en;..#if !SQLITE
7fc0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
7fd0: 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61   IntPtr p = Unsa
7fe0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
7ff0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
8000: 65 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f 70 28  ecltype_interop(
8010: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
8020: 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65  t, index, out le
8030: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
8040: 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20    len = -1;..   
8050: 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
8060: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
8070: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
8080: 5f 64 65 63 6c 74 79 70 65 28 73 74 6d 74 2e 5f  _decltype(stmt._
8090: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
80a0: 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ex);..#endif..  
80b0: 20 20 20 20 6e 41 66 66 69 6e 69 74 79 20 3d 20      nAffinity = 
80c0: 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73  ColumnAffinity(s
80d0: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a  tmt, index);....
80e0: 20 20 20 20 20 20 69 66 20 28 70 20 21 3d 20 49        if (p != I
80f0: 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75  ntPtr.Zero) retu
8100: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
8110: 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20  p, len);..      
8120: 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  else..      {.. 
8130: 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
8140: 61 72 20 3d 20 73 74 6d 74 2e 54 79 70 65 44 65  ar = stmt.TypeDe
8150: 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a 20 20 20 20  finitions;..    
8160: 20 20 20 20 69 66 20 28 61 72 20 21 3d 20 6e 75      if (ar != nu
8170: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ll)..        {..
8180: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e            if (in
8190: 64 65 78 20 3c 20 61 72 2e 4c 65 6e 67 74 68 20  dex < ar.Length 
81a0: 26 26 20 61 72 5b 69 6e 64 65 78 5d 20 21 3d 20  && ar[index] != 
81b0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
81c0: 20 20 20 72 65 74 75 72 6e 20 61 72 5b 69 6e 64     return ar[ind
81d0: 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ex];..        }.
81e0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
81f0: 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d  String.Empty;...
8200: 0a 20 20 20 20 20 20 20 20 2f 2f 73 77 69 74 63  .        //switc
8210: 68 20 28 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20  h (nAffinity).. 
8220: 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20         //{..    
8230: 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70      //  case Typ
8240: 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a  eAffinity.Int64:
8250: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
8260: 72 65 74 75 72 6e 20 22 42 49 47 49 4e 54 22 3b  return "BIGINT";
8270: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61  ..        //  ca
8280: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
8290: 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20  Double:..       
82a0: 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 44   //    return "D
82b0: 4f 55 42 4c 45 22 3b 0d 0a 20 20 20 20 20 20 20  OUBLE";..       
82c0: 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41 66   //  case TypeAf
82d0: 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20  finity.Blob:..  
82e0: 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75        //    retu
82f0: 72 6e 20 22 42 4c 4f 42 22 3b 0d 0a 20 20 20 20  rn "BLOB";..    
8300: 20 20 20 20 2f 2f 20 20 64 65 66 61 75 6c 74 3a      //  default:
8310: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
8320: 72 65 74 75 72 6e 20 22 54 45 58 54 22 3b 0d 0a  return "TEXT";..
8330: 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 20 20 20          //}..   
8340: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
8350: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
8360: 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 49  ride int ColumnI
8370: 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61 74 65  ndex(SQLiteState
8380: 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72 69 6e  ment stmt, strin
8390: 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 0d 0a 20  g columnName).. 
83a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
83b0: 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28  x = ColumnCount(
83c0: 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  stmt);....      
83d0: 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20  for (int n = 0; 
83e0: 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20  n < x; n++)..   
83f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
8400: 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65   (String.Compare
8410: 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 43 6f 6c  (columnName, Col
8420: 75 6d 6e 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29  umnName(stmt, n)
8430: 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
8440: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
8450: 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20  Case) == 0)..   
8460: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b         return n;
8470: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
8480: 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20   return -1;..   
8490: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
84a0: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
84b0: 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61  ng ColumnOrigina
84c0: 6c 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  lName(SQLiteStat
84d0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
84e0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
84f0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
8500: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
8510: 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  en;..      retur
8520: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
8530: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
8540: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
8550: 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e  n_origin_name_in
8560: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
8570: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
8580: 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  out len), len);.
8590: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
85a0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
85b0: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
85c0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
85d0: 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
85e0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
85f0: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b  mt, index), -1);
8600: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
8610: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
8620: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
8630: 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61  ColumnDatabaseNa
8640: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
8650: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
8660: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
8670: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
8680: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
8690: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
86a0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
86b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
86c0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
86d0: 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69 6e 74  atabase_name_int
86e0: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
86f0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
8700: 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ut len), len);..
8710: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
8720: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
8730: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
8740: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
8750: 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
8760: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
8770: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  tmt, index), -1)
8780: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
8790: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
87a0: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
87b0: 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65   ColumnTableName
87c0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
87d0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
87e0: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
87f0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
8800: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
8810: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
8820: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
8830: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
8840: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
8850: 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  le_name_interop(
8860: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
8870: 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65  t, index, out le
8880: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
8890: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
88a0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
88b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
88c0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
88d0: 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f  able_name(stmt._
88e0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
88f0: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
8900: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
8910: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
8920: 65 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d 65 74  e void ColumnMet
8930: 61 44 61 74 61 28 73 74 72 69 6e 67 20 64 61 74  aData(string dat
8940: 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20 74 61  aBase, string ta
8950: 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75  ble, string colu
8960: 6d 6e 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 64  mn, out string d
8970: 61 74 61 54 79 70 65 2c 20 6f 75 74 20 73 74 72  ataType, out str
8980: 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71 75 65  ing collateSeque
8990: 6e 63 65 2c 20 6f 75 74 20 62 6f 6f 6c 20 6e 6f  nce, out bool no
89a0: 74 4e 75 6c 6c 2c 20 6f 75 74 20 62 6f 6f 6c 20  tNull, out bool 
89b0: 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20  primaryKey, out 
89c0: 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65 6d 65  bool autoIncreme
89d0: 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nt)..    {..    
89e0: 20 20 49 6e 74 50 74 72 20 64 61 74 61 54 79 70    IntPtr dataTyp
89f0: 65 50 74 72 3b 0d 0a 20 20 20 20 20 20 49 6e 74  ePtr;..      Int
8a00: 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72 3b 0d  Ptr collSeqPtr;.
8a10: 0a 20 20 20 20 20 20 69 6e 74 20 6e 6e 6f 74 4e  .      int nnotN
8a20: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ull;..      int 
8a30: 6e 70 72 69 6d 61 72 79 4b 65 79 3b 0d 0a 20 20  nprimaryKey;..  
8a40: 20 20 20 20 69 6e 74 20 6e 61 75 74 6f 49 6e 63      int nautoInc
8a50: 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  ;..      SQLiteE
8a60: 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20  rrorCode n;..   
8a70: 20 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d 0a 20     int dtLen;.. 
8a80: 20 20 20 20 20 69 6e 74 20 63 73 4c 65 6e 3b 0d       int csLen;.
8a90: 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
8aa0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e  TANDARD..      n
8ab0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
8ac0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74  ethods.sqlite3_t
8ad0: 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61  able_column_meta
8ae0: 64 61 74 61 5f 69 6e 74 65 72 6f 70 28 5f 73 71  data_interop(_sq
8af0: 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42 61  l, ToUTF8(dataBa
8b00: 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c  se), ToUTF8(tabl
8b10: 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d  e), ToUTF8(colum
8b20: 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79 70 65  n), out dataType
8b30: 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71  Ptr, out collSeq
8b40: 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c  Ptr, out nnotNul
8b50: 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72 79 4b  l, out nprimaryK
8b60: 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e 63  ey, out nautoInc
8b70: 2c 20 6f 75 74 20 64 74 4c 65 6e 2c 20 6f 75 74  , out dtLen, out
8b80: 20 63 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d   csLen);..#else.
8b90: 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d 20 2d  .      dtLen = -
8ba0: 31 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e 20  1;..      csLen 
8bb0: 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e  = -1;....      n
8bc0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
8bd0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74  ethods.sqlite3_t
8be0: 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61  able_column_meta
8bf0: 64 61 74 61 28 5f 73 71 6c 2c 20 54 6f 55 54 46  data(_sql, ToUTF
8c00: 38 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55  8(dataBase), ToU
8c10: 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54  TF8(table), ToUT
8c20: 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20  F8(column), out 
8c30: 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f 75 74  dataTypePtr, out
8c40: 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75 74   collSeqPtr, out
8c50: 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e   nnotNull, out n
8c60: 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20  primaryKey, out 
8c70: 6e 61 75 74 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64  nautoInc);..#end
8c80: 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  if..      if (n 
8c90: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
8ca0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
8cb0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
8cc0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
8cd0: 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 64 61  ());....      da
8ce0: 74 61 54 79 70 65 20 3d 20 55 54 46 38 54 6f 53  taType = UTF8ToS
8cf0: 74 72 69 6e 67 28 64 61 74 61 54 79 70 65 50 74  tring(dataTypePt
8d00: 72 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20 20 20 20  r, dtLen);..    
8d10: 20 20 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63    collateSequenc
8d20: 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
8d30: 28 63 6f 6c 6c 53 65 71 50 74 72 2c 20 63 73 4c  (collSeqPtr, csL
8d40: 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6f  en);....      no
8d50: 74 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75 6c  tNull = (nnotNul
8d60: 6c 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20  l == 1);..      
8d70: 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 28 6e 70  primaryKey = (np
8d80: 72 69 6d 61 72 79 4b 65 79 20 3d 3d 20 31 29 3b  rimaryKey == 1);
8d90: 0d 0a 20 20 20 20 20 20 61 75 74 6f 49 6e 63 72  ..      autoIncr
8da0: 65 6d 65 6e 74 20 3d 20 28 6e 61 75 74 6f 49 6e  ement = (nautoIn
8db0: 63 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 7d 0d  c == 1);..    }.
8dc0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
8dd0: 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20  override double 
8de0: 47 65 74 44 6f 75 62 6c 65 28 53 51 4c 69 74 65  GetDouble(SQLite
8df0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
8e00: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
8e10: 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20  {..      double 
8e20: 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41  value;..#if !PLA
8e30: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
8e40: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61  MEWORK..      va
8e50: 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  lue = UnsafeNati
8e60: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
8e70: 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28  3_column_double(
8e80: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
8e90: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 73  t, index);..#els
8ea0: 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  e..      UnsafeN
8eb0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8ec0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
8ed0: 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  le_interop(stmt.
8ee0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
8ef0: 64 65 78 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b  dex, out value);
8f00: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
8f10: 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20  return value;.. 
8f20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
8f30: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
8f40: 74 20 47 65 74 49 6e 74 33 32 28 53 51 4c 69 74  t GetInt32(SQLit
8f50: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
8f60: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
8f70: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
8f80: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
8f90: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
8fa0: 75 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f 73 71  umn_int(stmt._sq
8fb0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
8fc0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
8fd0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
8fe0: 64 65 20 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34  de long GetInt64
8ff0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
9000: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
9010: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9020: 6c 6f 6e 67 20 76 61 6c 75 65 3b 0d 0a 23 69 66  long value;..#if
9030: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
9040: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
9050: 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66     value = Unsaf
9060: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9070: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
9080: 74 36 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  t64(stmt._sqlite
9090: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
90a0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73  #else..      Uns
90b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
90c0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
90d0: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 74  int64_interop(st
90e0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
90f0: 20 69 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c 75   index, out valu
9100: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
9110: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b     return value;
9120: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
9130: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
9140: 20 73 74 72 69 6e 67 20 47 65 74 54 65 78 74 28   string GetText(
9150: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
9160: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
9170: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
9180: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
9190: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20       int len;.. 
91a0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
91b0: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
91c0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
91d0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
91e0: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
91f0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
9200: 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e  x, out len), len
9210: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
9220: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
9230: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
9240: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9250: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d  _column_text(stm
9260: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
9270: 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65  index), -1);..#e
9280: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
9290: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
92a0: 72 69 64 65 20 44 61 74 65 54 69 6d 65 20 47 65  ride DateTime Ge
92b0: 74 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65  tDateTime(SQLite
92c0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
92d0: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
92e0: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
92f0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
9300: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72  nt len;..      r
9310: 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65  eturn ToDateTime
9320: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
9330: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
9340: 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70  umn_text_interop
9350: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
9360: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c  mt, index, out l
9370: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
9380: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
9390: 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66  ToDateTime(Unsaf
93a0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
93b0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
93c0: 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  xt(stmt._sqlite_
93d0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
93e0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
93f0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
9400: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
9410: 47 65 74 42 79 74 65 73 28 53 51 4c 69 74 65 53  GetBytes(SQLiteS
9420: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
9430: 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44  nt index, int nD
9440: 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65 5b  ataOffset, byte[
9450: 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74  ] bDest, int nSt
9460: 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68  art, int nLength
9470: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9480: 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66  int nlen = Unsaf
9490: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
94a0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
94b0: 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  tes(stmt._sqlite
94c0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
94d0: 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f  ..      // If no
94e0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66   destination buf
94f0: 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20  fer, return the 
9500: 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20  size needed...  
9510: 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d      if (bDest ==
9520: 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c   null) return nl
9530: 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74  en;....      int
9540: 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67   nCopied = nLeng
9550: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  th;....      if 
9560: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72  (nCopied + nStar
9570: 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  t > bDest.Length
9580: 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73  ) nCopied = bDes
9590: 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72  t.Length - nStar
95a0: 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  t;..      if (nC
95b0: 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66  opied + nDataOff
95c0: 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70  set > nlen) nCop
95d0: 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61  ied = nlen - nDa
95e0: 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20  taOffset;....   
95f0: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e     if (nCopied >
9600: 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20   0)..      {..  
9610: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72        IntPtr ptr
9620: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
9630: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
9640: 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74 6d 74 2e  olumn_blob(stmt.
9650: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
9660: 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex);....       
9670: 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28 49   Marshal.Copy((I
9680: 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e 74  ntPtr)(ptr.ToInt
9690: 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66 73  64() + nDataOffs
96a0: 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74 61  et), bDest, nSta
96b0: 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20  rt, nCopied);.. 
96c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c       }..      el
96d0: 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  se..      {..   
96e0: 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20 30       nCopied = 0
96f0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
9700: 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69      return nCopi
9710: 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ed;..    }....  
9720: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
9730: 69 64 65 20 6c 6f 6e 67 20 47 65 74 43 68 61 72  ide long GetChar
9740: 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  s(SQLiteStatemen
9750: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
9760: 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73  x, int nDataOffs
9770: 65 74 2c 20 63 68 61 72 5b 5d 20 62 44 65 73 74  et, char[] bDest
9780: 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e  , int nStart, in
9790: 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20  t nLength)..    
97a0: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65  {..      int nle
97b0: 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43  n;..      int nC
97c0: 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b  opied = nLength;
97d0: 0d 0a 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67  ....      string
97e0: 20 73 74 72 20 3d 20 47 65 74 54 65 78 74 28 73   str = GetText(s
97f0: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
9800: 20 20 20 20 6e 6c 65 6e 20 3d 20 73 74 72 2e 4c      nlen = str.L
9810: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
9820: 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c  if (bDest == nul
9830: 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d  l) return nlen;.
9840: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
9850: 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20  pied + nStart > 
9860: 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43  bDest.Length) nC
9870: 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65  opied = bDest.Le
9880: 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a  ngth - nStart;..
9890: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
98a0: 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20  d + nDataOffset 
98b0: 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20  > nlen) nCopied 
98c0: 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66  = nlen - nDataOf
98d0: 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  fset;....      i
98e0: 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d  f (nCopied > 0).
98f0: 0a 20 20 20 20 20 20 20 20 73 74 72 2e 43 6f 70  .        str.Cop
9900: 79 54 6f 28 6e 44 61 74 61 4f 66 66 73 65 74 2c  yTo(nDataOffset,
9910: 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20   bDest, nStart, 
9920: 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20  nCopied);..     
9930: 20 65 6c 73 65 20 6e 43 6f 70 69 65 64 20 3d 20   else nCopied = 
9940: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  0;....      retu
9950: 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20  rn nCopied;..   
9960: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
9970: 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
9980: 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74   IsNull(SQLiteSt
9990: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
99a0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
99b0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 43  .      return (C
99c0: 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74  olumnAffinity(st
99d0: 6d 74 2c 20 69 6e 64 65 78 29 20 3d 3d 20 54 79  mt, index) == Ty
99e0: 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29  peAffinity.Null)
99f0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9a00: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
9a10: 65 20 69 6e 74 20 41 67 67 72 65 67 61 74 65 43  e int AggregateC
9a20: 6f 75 6e 74 28 49 6e 74 50 74 72 20 63 6f 6e 74  ount(IntPtr cont
9a30: 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ext)..    {..   
9a40: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
9a50: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9a60: 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f  lite3_aggregate_
9a70: 63 6f 75 6e 74 28 63 6f 6e 74 65 78 74 29 3b 0d  count(context);.
9a80: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
9a90: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
9aa0: 76 6f 69 64 20 43 72 65 61 74 65 46 75 6e 63 74  void CreateFunct
9ab0: 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 46 75  ion(string strFu
9ac0: 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e 41 72 67  nction, int nArg
9ad0: 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c  s, bool needColl
9ae0: 53 65 71 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62  Seq, SQLiteCallb
9af0: 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c 69 74 65  ack func, SQLite
9b00: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 73 74 65  Callback funcste
9b10: 70 2c 20 53 51 4c 69 74 65 46 69 6e 61 6c 43 61  p, SQLiteFinalCa
9b20: 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e 61 6c  llback funcfinal
9b30: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9b40: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
9b50: 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  n;....#if !SQLIT
9b60: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
9b70: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
9b80: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9b90: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
9ba0: 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  n_interop(_sql, 
9bb0: 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
9bc0: 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49  on), nArgs, 4, I
9bd0: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
9be0: 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
9bf0: 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c  final, (needColl
9c00: 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31  Seq == true) ? 1
9c10: 20 3a 20 30 29 3b 0d 0a 20 20 20 20 20 20 69 66   : 0);..      if
9c20: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
9c30: 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55  orCode.Ok) n = U
9c40: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9c50: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
9c60: 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72  e_function_inter
9c70: 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  op(_sql, ToUTF8(
9c80: 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41  strFunction), nA
9c90: 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a  rgs, 1, IntPtr.Z
9ca0: 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ero, func, funcs
9cb0: 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20  tep, funcfinal, 
9cc0: 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20  (needCollSeq == 
9cd0: 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d  true) ? 1 : 0);.
9ce0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20  .#else..      n 
9cf0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
9d00: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
9d10: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73  eate_function(_s
9d20: 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75  ql, ToUTF8(strFu
9d30: 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20  nction), nArgs, 
9d40: 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  4, IntPtr.Zero, 
9d50: 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20  func, funcstep, 
9d60: 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 20  funcfinal);..   
9d70: 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
9d80: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
9d90: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
9da0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9db0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
9dc0: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
9dd0: 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73  Function), nArgs
9de0: 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 1, IntPtr.Zero
9df0: 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70  , func, funcstep
9e00: 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23  , funcfinal);..#
9e10: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20  endif..      if 
9e20: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
9e30: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
9e40: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
9e50: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
9e60: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
9e70: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
9e80: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 72 65  verride void Cre
9e90: 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72  ateCollation(str
9ea0: 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e  ing strCollation
9eb0: 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f  , SQLiteCollatio
9ec0: 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f  n func, SQLiteCo
9ed0: 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36 29 0d  llation func16).
9ee0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
9ef0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
9f00: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
9f10: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
9f20: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f  eate_collation(_
9f30: 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43  sql, ToUTF8(strC
9f40: 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c 20 49 6e  ollation), 2, In
9f50: 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 31  tPtr.Zero, func1
9f60: 36 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  6);..      if (n
9f70: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
9f80: 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61  ode.Ok) n = Unsa
9f90: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9fa0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
9fb0: 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54  ollation(_sql, T
9fc0: 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69  oUTF8(strCollati
9fd0: 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a  on), 1, IntPtr.Z
9fe0: 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20 20 20  ero, func);..   
9ff0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
a000: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
a010: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
a020: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
a030: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
a040: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
a050: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
a060: 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65  t ContextCollate
a070: 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f  Compare(Collatio
a080: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e  nEncodingEnum en
a090: 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  c, IntPtr contex
a0a0: 74 2c 20 73 74 72 69 6e 67 20 73 31 2c 20 73 74  t, string s1, st
a0b0: 72 69 6e 67 20 73 32 29 0d 0a 20 20 20 20 7b 0d  ring s2)..    {.
a0c0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
a0d0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74  NDARD..      byt
a0e0: 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62  e[] b1;..      b
a0f0: 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20  yte[] b2;..     
a100: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
a110: 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20  oding converter 
a120: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
a130: 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20   switch (enc).. 
a140: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a150: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
a160: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a  codingEnum.UTF8:
a170: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
a180: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
a190: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46  ext.Encoding.UTF
a1a0: 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  8;..          br
a1b0: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  eak;..        ca
a1c0: 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
a1d0: 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45  dingEnum.UTF16LE
a1e0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
a1f0: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
a200: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e  Text.Encoding.Un
a210: 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20  icode;..        
a220: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
a230: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
a240: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
a250: 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20  16BE:..         
a260: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
a270: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
a280: 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f  g.BigEndianUnico
a290: 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  de;..          b
a2a0: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  reak;..      }..
a2b0: 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e  ..      b1 = con
a2c0: 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28  verter.GetBytes(
a2d0: 73 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d  s1);..      b2 =
a2e0: 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79   converter.GetBy
a2f0: 74 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20 20 20  tes(s2);....    
a300: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
a310: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a320: 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c  ite3_context_col
a330: 6c 63 6f 6d 70 61 72 65 28 63 6f 6e 74 65 78 74  lcompare(context
a340: 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c  , b1, b1.Length,
a350: 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b   b2, b2.Length);
a360: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
a370: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
a380: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
a390: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
a3a0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
a3b0: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
a3c0: 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f  ContextCollateCo
a3d0: 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45  mpare(CollationE
a3e0: 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c  ncodingEnum enc,
a3f0: 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c   IntPtr context,
a400: 20 63 68 61 72 5b 5d 20 63 31 2c 20 63 68 61 72   char[] c1, char
a410: 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d 0a 23  [] c2)..    {..#
a420: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
a430: 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b  ARD..      byte[
a440: 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74  ] b1;..      byt
a450: 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53  e[] b2;..      S
a460: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
a470: 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20  ing converter = 
a480: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73  null;....      s
a490: 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20  witch (enc)..   
a4a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61     {..        ca
a4b0: 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
a4c0: 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a  dingEnum.UTF8:..
a4d0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
a4e0: 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
a4f0: 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b  t.Encoding.UTF8;
a500: 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
a510: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  k;..        case
a520: 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
a530: 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d  ngEnum.UTF16LE:.
a540: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
a550: 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
a560: 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63  xt.Encoding.Unic
a570: 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ode;..          
a580: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
a590: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
a5a0: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36  codingEnum.UTF16
a5b0: 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  BE:..          c
a5c0: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
a5d0: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
a5e0: 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65  BigEndianUnicode
a5f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
a600: 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ak;..      }....
a610: 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65        b1 = conve
a620: 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 63 31  rter.GetBytes(c1
a630: 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63  );..      b2 = c
a640: 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
a650: 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  s(c2);....      
a660: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
a670: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a680: 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63  e3_context_collc
a690: 6f 6d 70 61 72 65 28 63 6f 6e 74 65 78 74 2c 20  ompare(context, 
a6a0: 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62  b1, b1.Length, b
a6b0: 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a  2, b2.Length);..
a6c0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
a6d0: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
a6e0: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
a6f0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
a700: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
a710: 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c 61 74   override Collat
a720: 69 6f 6e 53 65 71 75 65 6e 63 65 20 47 65 74 43  ionSequence GetC
a730: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
a740: 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20  (SQLiteFunction 
a750: 66 75 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e  func, IntPtr con
a760: 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  text)..    {..#i
a770: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
a780: 52 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c 61 74  RD..      Collat
a790: 69 6f 6e 53 65 71 75 65 6e 63 65 20 73 65 71 20  ionSequence seq 
a7a0: 3d 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f 6e 53  = new CollationS
a7b0: 65 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20 20 20  equence();..    
a7c0: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
a7d0: 20 20 69 6e 74 20 74 79 70 65 3b 0d 0a 20 20 20    int type;..   
a7e0: 20 20 20 69 6e 74 20 65 6e 63 3b 0d 0a 20 20 20     int enc;..   
a7f0: 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
a800: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a810: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  s.sqlite3_contex
a820: 74 5f 63 6f 6c 6c 73 65 71 28 63 6f 6e 74 65 78  t_collseq(contex
a830: 74 2c 20 6f 75 74 20 74 79 70 65 2c 20 6f 75 74  t, out type, out
a840: 20 65 6e 63 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d   enc, out len);.
a850: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 21  ...      if (p !
a860: 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e 61 6d 65  = null) seq.Name
a870: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
a880: 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20  p, len);..      
a890: 73 65 71 2e 54 79 70 65 20 3d 20 28 43 6f 6c 6c  seq.Type = (Coll
a8a0: 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d 29 74 79  ationTypeEnum)ty
a8b0: 70 65 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 5f  pe;..      seq._
a8c0: 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a 20 20  func = func;..  
a8d0: 20 20 20 20 73 65 71 2e 45 6e 63 6f 64 69 6e 67      seq.Encoding
a8e0: 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63   = (CollationEnc
a8f0: 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d 0a  odingEnum)enc;..
a900: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 73  ..      return s
a910: 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  eq;..#else..    
a920: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
a930: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
a940: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
a950: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
a960: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
a970: 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ong GetParamValu
a980: 65 42 79 74 65 73 28 49 6e 74 50 74 72 20 70 2c  eBytes(IntPtr p,
a990: 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74   int nDataOffset
a9a0: 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20  , byte[] bDest, 
a9b0: 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20  int nStart, int 
a9c0: 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d  nLength)..    {.
a9d0: 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20  .      int nlen 
a9e0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
a9f0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
aa00: 6c 75 65 5f 62 79 74 65 73 28 70 29 3b 0d 0a 0d  lue_bytes(p);...
aa10: 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20  .      // If no 
aa20: 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66  destination buff
aa30: 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73  er, return the s
aa40: 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20  ize needed...   
aa50: 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20     if (bDest == 
aa60: 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65  null) return nle
aa70: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20  n;....      int 
aa80: 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74  nCopied = nLengt
aa90: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  h;....      if (
aaa0: 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74  nCopied + nStart
aab0: 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29   > bDest.Length)
aac0: 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74   nCopied = bDest
aad0: 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74  .Length - nStart
aae0: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ;..      if (nCo
aaf0: 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73  pied + nDataOffs
ab00: 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69  et > nlen) nCopi
ab10: 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74  ed = nlen - nDat
ab20: 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20  aOffset;....    
ab30: 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20    if (nCopied > 
ab40: 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  0)..      {..   
ab50: 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20       IntPtr ptr 
ab60: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
ab70: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
ab80: 6c 75 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d 0a  lue_blob(p);....
ab90: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
aba0: 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70 74  Copy((IntPtr)(pt
abb0: 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44  r.ToInt64() + nD
abc0: 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73  ataOffset), bDes
abd0: 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69  t, nStart, nCopi
abe0: 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ed);..      }.. 
abf0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
ac00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70   {..        nCop
ac10: 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ied = 0;..      
ac20: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
ac30: 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20  n nCopied;..    
ac40: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
ac50: 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c  l override doubl
ac60: 65 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 44  e GetParamValueD
ac70: 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 70 74 72  ouble(IntPtr ptr
ac80: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
ac90: 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23  double value;..#
aca0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
acb0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
acc0: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73       value = Uns
acd0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
ace0: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64  .sqlite3_value_d
acf0: 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a 23 65 6c  ouble(ptr);..#el
ad00: 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  se..      Unsafe
ad10: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ad20: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62  lite3_value_doub
ad30: 6c 65 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20  le_interop(ptr, 
ad40: 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  out value);..#en
ad50: 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72  dif..      retur
ad60: 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d  n value;..    }.
ad70: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
ad80: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74  override int Get
ad90: 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 33 32 28  ParamValueInt32(
ada0: 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20  IntPtr ptr)..   
adb0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
adc0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
add0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
ade0: 75 65 5f 69 6e 74 28 70 74 72 29 3b 0d 0a 20 20  ue_int(ptr);..  
adf0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
ae00: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
ae10: 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49  g GetParamValueI
ae20: 6e 74 36 34 28 49 6e 74 50 74 72 20 70 74 72 29  nt64(IntPtr ptr)
ae30: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49  ..    {..      I
ae40: 6e 74 36 34 20 76 61 6c 75 65 3b 0d 0a 23 69 66  nt64 value;..#if
ae50: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
ae60: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
ae70: 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66     value = Unsaf
ae80: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
ae90: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
aea0: 36 34 28 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d  64(ptr);..#else.
aeb0: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
aec0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
aed0: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69  e3_value_int64_i
aee0: 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20  nterop(ptr, out 
aef0: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
af00: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61  .      return va
af10: 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  lue;..    }.... 
af20: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
af30: 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 50  ride string GetP
af40: 61 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49 6e  aramValueText(In
af50: 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
af60: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
af70: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e  ANDARD..      in
af80: 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65  t len;..      re
af90: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
afa0: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
afb0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
afc0: 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70  lue_text_interop
afd0: 28 70 74 72 2c 20 6f 75 74 20 6c 65 6e 29 2c 20  (ptr, out len), 
afe0: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
aff0: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
b000: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
b010: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b020: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70  te3_value_text(p
b030: 74 72 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  tr), -1);..#endi
b040: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
b050: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
b060: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 47  e TypeAffinity G
b070: 65 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65  etParamValueType
b080: 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
b090: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
b0a0: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
b0b0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
b0c0: 6c 75 65 5f 74 79 70 65 28 70 74 72 29 3b 0d 0a  lue_type(ptr);..
b0d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
b0e0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
b0f0: 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f 62 28 49  oid ReturnBlob(I
b100: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 62  ntPtr context, b
b110: 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20  yte[] value)..  
b120: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
b130: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b140: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c  qlite3_result_bl
b150: 6f 62 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75  ob(context, valu
b160: 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c  e, value.Length,
b170: 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
b180: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
b190: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
b1a0: 76 6f 69 64 20 52 65 74 75 72 6e 44 6f 75 62 6c  void ReturnDoubl
b1b0: 65 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  e(IntPtr context
b1c0: 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d  , double value).
b1d0: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41  .    {..#if !PLA
b1e0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
b1f0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e  MEWORK..      Un
b200: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
b210: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
b220: 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c  _double(context,
b230: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
b240: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
b250: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b260: 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65  e3_result_double
b270: 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
b280: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
b290: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
b2a0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
b2b0: 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
b2c0: 6e 45 72 72 6f 72 28 49 6e 74 50 74 72 20 63 6f  nError(IntPtr co
b2d0: 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61  ntext, string va
b2e0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
b2f0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
b300: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
b310: 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74  esult_error(cont
b320: 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75  ext, ToUTF8(valu
b330: 65 29 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68  e), value.Length
b340: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
b350: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b360: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e  de void ReturnIn
b370: 74 33 32 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  t32(IntPtr conte
b380: 78 74 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a  xt, int value)..
b390: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
b3a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b3b0: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
b3c0: 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c  int(context, val
b3d0: 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ue);..    }.... 
b3e0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
b3f0: 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
b400: 49 6e 74 36 34 28 49 6e 74 50 74 72 20 63 6f 6e  Int64(IntPtr con
b410: 74 65 78 74 2c 20 6c 6f 6e 67 20 76 61 6c 75 65  text, long value
b420: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50  )..    {..#if !P
b430: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
b440: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
b450: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
b460: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
b470: 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74  lt_int64(context
b480: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  , value);..#else
b490: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
b4a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b4b0: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34  te3_result_int64
b4c0: 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
b4d0: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
b4e0: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
b4f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
b500: 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
b510: 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e  nNull(IntPtr con
b520: 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  text)..    {..  
b530: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
b540: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b550: 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74  result_null(cont
b560: 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ext);..    }....
b570: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
b580: 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
b590: 6e 54 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e  nText(IntPtr con
b5a0: 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c  text, string val
b5b0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
b5c0: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
b5d0: 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20  TF8(value);..   
b5e0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
b5f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
b600: 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65  esult_text(conte
b610: 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65  xt, ToUTF8(value
b620: 29 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c  ), b.Length - 1,
b630: 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
b640: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
b650: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
b660: 49 6e 74 50 74 72 20 41 67 67 72 65 67 61 74 65  IntPtr Aggregate
b670: 43 6f 6e 74 65 78 74 28 49 6e 74 50 74 72 20 63  Context(IntPtr c
b680: 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
b690: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
b6a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b6b0: 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61  .sqlite3_aggrega
b6c0: 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65  te_context(conte
b6d0: 78 74 2c 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a  xt, 1);..    }..
b6e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
b6f0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61  ry>..    /// Ena
b700: 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64  bles or disabled
b710: 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69   extension loadi
b720: 6e 67 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a 20  ng by SQLite... 
b730: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
b740: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
b750: 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e  m name="bOnOff">
b760: 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 74  ..    /// True t
b770: 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67  o enable loading
b780: 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20   of extensions, 
b790: 66 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65  false to disable
b7a0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
b7b0: 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
b7c0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
b7d0: 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  SetLoadExtension
b7e0: 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20  (bool bOnOff).. 
b7f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
b800: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
b810: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
b820: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 6e  thods.sqlite3_en
b830: 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  able_load_extens
b840: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
b850: 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20    _sql, (bOnOff 
b860: 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20  ? -1 : 0));.... 
b870: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
b880: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
b890: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
b8a0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
b8b0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
b8c0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
b8d0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
b8e0: 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20 53     /// Loads a S
b8f0: 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 20  QLite extension 
b900: 6c 69 62 72 61 72 79 20 66 72 6f 6d 20 74 68 65  library from the
b910: 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a 20 20   named file...  
b920: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
b930: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
b940: 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22   name="fileName"
b950: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
b960: 61 6d 65 20 6f 66 20 74 68 65 20 64 79 6e 61 6d  ame of the dynam
b970: 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72 79 20  ic link library 
b980: 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  file containing 
b990: 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a  the extension...
b9a0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
b9b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
b9c0: 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d 65 22   name="procName"
b9d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
b9e0: 61 6d 65 20 6f 66 20 74 68 65 20 65 78 70 6f 72  ame of the expor
b9f0: 74 65 64 20 66 75 6e 63 74 69 6f 6e 20 75 73 65  ted function use
ba00: 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20  d to initialize 
ba10: 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a  the extension...
ba20: 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c 2c      /// If null,
ba30: 20 74 68 65 20 64 65 66 61 75 6c 74 20 22 73 71   the default "sq
ba40: 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f  lite3_extension_
ba50: 69 6e 69 74 22 20 77 69 6c 6c 20 62 65 20 75 73  init" will be us
ba60: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
ba70: 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
ba80: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
ba90: 64 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28  d LoadExtension(
baa0: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
bab0: 20 73 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d 65   string procName
bac0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
bad0: 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d    if (fileName =
bae0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
baf0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
bb00: 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
bb10: 74 69 6f 6e 28 22 66 69 6c 65 4e 61 6d 65 22 29  tion("fileName")
bb20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
bb30: 50 74 72 20 70 45 72 72 6f 72 20 3d 20 49 6e 74  Ptr pError = Int
bb40: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
bb50: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
bb60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bb70: 20 62 79 74 65 5b 5d 20 75 74 66 38 46 69 6c 65   byte[] utf8File
bb80: 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64  Name = UTF8Encod
bb90: 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65  ing.UTF8.GetByte
bba0: 73 28 66 69 6c 65 4e 61 6d 65 20 2b 20 27 5c 30  s(fileName + '\0
bbb0: 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ');..           
bbc0: 20 62 79 74 65 5b 5d 20 75 74 66 38 50 72 6f 63   byte[] utf8Proc
bbd0: 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  Name = null;....
bbe0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
bbf0: 70 72 6f 63 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  procName != null
bc00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
bc10: 20 20 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20     utf8ProcName 
bc20: 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55  = UTF8Encoding.U
bc30: 54 46 38 2e 47 65 74 42 79 74 65 73 28 70 72 6f  TF8.GetBytes(pro
bc40: 63 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a  cName + '\0');..
bc50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
bc60: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
bc70: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
bc80: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f  thods.sqlite3_lo
bc90: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20  ad_extension(.. 
bca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
bcb0: 73 71 6c 2c 20 75 74 66 38 46 69 6c 65 4e 61 6d  sql, utf8FileNam
bcc0: 65 2c 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 2c  e, utf8ProcName,
bcd0: 20 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a 0d   ref pError);...
bce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
bcf0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
bd00: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
bd10: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
bd20: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
bd30: 74 69 6f 6e 28 6e 2c 20 55 54 46 38 54 6f 53 74  tion(n, UTF8ToSt
bd40: 72 69 6e 67 28 70 45 72 72 6f 72 2c 20 2d 31 29  ring(pError, -1)
bd50: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
bd60: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
bd70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
bd80: 20 20 20 20 20 20 20 69 66 20 28 70 45 72 72 6f         if (pErro
bd90: 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r != IntPtr.Zero
bda0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
bdb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bdc0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
bdd0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 72  thods.sqlite3_fr
bde0: 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20  ee(pError);..   
bdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45 72               pEr
be00: 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ror = IntPtr.Zer
be10: 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
be20: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
be30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45    }....    /// E
be40: 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c  nables or disabl
be50: 65 64 20 65 78 74 65 6e 64 65 64 20 72 65 73 75  ed extended resu
be60: 6c 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e 65  lt codes returne
be70: 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20 20  d by SQLite..   
be80: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
be90: 64 65 20 76 6f 69 64 20 53 65 74 45 78 74 65 6e  de void SetExten
bea0: 64 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28 62  dedResultCodes(b
beb0: 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20  ool bOnOff)..   
bec0: 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
bed0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
bee0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
bef0: 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64  s.sqlite3_extend
bf00: 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28  ed_result_codes(
bf10: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c  ..          _sql
bf20: 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a  , (bOnOff ? -1 :
bf30: 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69   0));....      i
bf40: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
bf50: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
bf60: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
bf70: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
bf80: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
bf90: 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74  ..    /// Gets t
bfa0: 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65  he last SQLite e
bfb0: 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69  rror code..    i
bfc0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
bfd0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
bfe0: 20 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20   ResultCode().. 
bff0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
c000: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
c010: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
c020: 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20  rrcode(_sql);.. 
c030: 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65     }..    /// Ge
c040: 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69  ts the last SQLi
c050: 74 65 20 65 78 74 65 6e 64 65 64 20 65 72 72 6f  te extended erro
c060: 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65  r code..    inte
c070: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
c080: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 45 78  LiteErrorCode Ex
c090: 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65  tendedResultCode
c0a0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
c0b0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
c0c0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
c0d0: 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72  te3_extended_err
c0e0: 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20  code(_sql);..   
c0f0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64   }....    /// Ad
c100: 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20  d a log message 
c110: 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 73  via the SQLite s
c120: 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72  qlite3_log inter
c130: 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72  face...    inter
c140: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
c150: 64 20 4c 6f 67 4d 65 73 73 61 67 65 28 69 6e 74  d LogMessage(int
c160: 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e   iErrCode, strin
c170: 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20  g zMessage)..   
c180: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
c190: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c1a0: 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f  lite3_log(iErrCo
c1b0: 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65 73 73  de, ToUTF8(zMess
c1c0: 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  age));..    }...
c1d0: 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44  .#if INTEROP_COD
c1e0: 45 43 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  EC..    internal
c1f0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
c200: 65 74 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b  etPassword(byte[
c210: 5d 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 29  ] passwordBytes)
c220: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
c230: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
c240: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
c250: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6b  ethods.sqlite3_k
c260: 65 79 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f 72  ey(_sql, passwor
c270: 64 42 79 74 65 73 2c 20 70 61 73 73 77 6f 72 64  dBytes, password
c280: 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a  Bytes.Length);..
c290: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
c2a0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
c2b0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
c2c0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
c2d0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
c2e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
c2f0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
c300: 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73 73   void ChangePass
c310: 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77 50  word(byte[] newP
c320: 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20  asswordBytes).. 
c330: 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
c340: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
c350: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
c360: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 6b 65  ods.sqlite3_reke
c370: 79 28 5f 73 71 6c 2c 20 6e 65 77 50 61 73 73 77  y(_sql, newPassw
c380: 6f 72 64 42 79 74 65 73 2c 20 28 6e 65 77 50 61  ordBytes, (newPa
c390: 73 73 77 6f 72 64 42 79 74 65 73 20 3d 3d 20 6e  sswordBytes == n
c3a0: 75 6c 6c 29 20 3f 20 30 20 3a 20 6e 65 77 50 61  ull) ? 0 : newPa
c3b0: 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67  sswordBytes.Leng
c3c0: 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  th);..      if (
c3d0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
c3e0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
c3f0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
c400: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
c410: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23  or());..    }..#
c420: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74  endif....    int
c430: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
c440: 6f 69 64 20 53 65 74 55 70 64 61 74 65 48 6f 6f  oid SetUpdateHoo
c450: 6b 28 53 51 4c 69 74 65 55 70 64 61 74 65 43 61  k(SQLiteUpdateCa
c460: 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
c470: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
c480: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c490: 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f  qlite3_update_ho
c4a0: 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49  ok(_sql, func, I
c4b0: 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
c4c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
c4d0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
c4e0: 64 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28  d SetCommitHook(
c4f0: 53 51 4c 69 74 65 43 6f 6d 6d 69 74 43 61 6c 6c  SQLiteCommitCall
c500: 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
c510: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
c520: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
c530: 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b  ite3_commit_hook
c540: 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
c550: 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
c560: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
c570: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
c580: 53 65 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b  SetTraceCallback
c590: 28 53 51 4c 69 74 65 54 72 61 63 65 43 61 6c 6c  (SQLiteTraceCall
c5a0: 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
c5b0: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
c5c0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
c5d0: 69 74 65 33 5f 74 72 61 63 65 28 5f 73 71 6c 2c  ite3_trace(_sql,
c5e0: 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
c5f0: 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
c600: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
c610: 72 69 64 65 20 76 6f 69 64 20 53 65 74 52 6f 6c  ride void SetRol
c620: 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65  lbackHook(SQLite
c630: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
c640: 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
c650: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
c660: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c670: 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f  _rollback_hook(_
c680: 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
c690: 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
c6a0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
c6b0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c  ary>..    /// Al
c6c0: 6c 6f 77 73 20 74 68 65 20 73 65 74 74 69 6e 67  lows the setting
c6d0: 20 6f 66 20 61 20 6c 6f 67 67 69 6e 67 20 63 61   of a logging ca
c6e0: 6c 6c 62 61 63 6b 20 69 6e 76 6f 6b 65 64 20 62  llback invoked b
c6f0: 79 20 53 51 4c 69 74 65 20 77 68 65 6e 20 61 0d  y SQLite when a.
c700: 0a 20 20 20 20 2f 2f 2f 20 6c 6f 67 20 65 76 65  .    /// log eve
c710: 6e 74 20 6f 63 63 75 72 73 2e 20 20 4f 6e 6c 79  nt occurs.  Only
c720: 20 6f 6e 65 20 63 61 6c 6c 62 61 63 6b 20 6d 61   one callback ma
c730: 79 20 62 65 20 73 65 74 2e 20 20 49 66 20 4e 55  y be set.  If NU
c740: 4c 4c 20 69 73 20 70 61 73 73 65 64 2c 0d 0a 20  LL is passed,.. 
c750: 20 20 20 2f 2f 2f 20 74 68 65 20 6c 6f 67 67 69     /// the loggi
c760: 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 75  ng callback is u
c770: 6e 72 65 67 69 73 74 65 72 65 64 2e 0d 0a 20 20  nregistered...  
c780: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
c790: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
c7a0: 20 6e 61 6d 65 3d 22 66 75 6e 63 22 3e 54 68 65   name="func">The
c7b0: 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69   callback functi
c7c0: 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70  on to invoke.</p
c7d0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
c7e0: 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20  returns>Returns 
c7f0: 61 20 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72  a result code</r
c800: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
c810: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
c820: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
c830: 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 53 51  etLogCallback(SQ
c840: 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 20  LiteLogCallback 
c850: 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
c860: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
c870: 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
c880: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c890: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f  qlite3_config_lo
c8a0: 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g(..            
c8b0: 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
c8c0: 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
c8d0: 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20 49 6e 74  G_LOG, func, Int
c8e0: 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20  Ptr.Zero);....  
c8f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b        return rc;
c900: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
c910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
c970: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
c980: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65  ry>..    /// Cre
c990: 61 74 65 73 20 61 20 6e 65 77 20 53 51 4c 69 74  ates a new SQLit
c9a0: 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
c9b0: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 70 72 6f  based on the pro
c9c0: 76 69 64 65 64 20 64 65 73 74 69 6e 61 74 69 6f  vided destinatio
c9d0: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62  n..    /// datab
c9e0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
c9f0: 20 54 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   The source data
ca00: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
ca10: 69 73 20 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20  is the one..    
ca20: 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77  /// associated w
ca30: 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74 2e  ith this object.
ca40: 20 20 54 68 65 20 73 6f 75 72 63 65 20 61 6e 64    The source and
ca50: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
ca60: 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63  abase..    /// c
ca70: 6f 6e 6e 65 63 74 69 6f 6e 73 20 63 61 6e 6e 6f  onnections canno
ca80: 74 20 62 65 20 74 68 65 20 73 61 6d 65 2e 0d 0a  t be the same...
ca90: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
caa0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
cab0: 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 43 6e 6e  am name="destCnn
cac0: 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f  ">The destinatio
cad0: 6e 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  n database conne
cae0: 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  ction.</param>..
caf0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
cb00: 61 6d 65 3d 22 64 65 73 74 4e 61 6d 65 22 3e 54  ame="destName">T
cb10: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  he destination d
cb20: 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70  atabase name.</p
cb30: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
cb40: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72  param name="sour
cb50: 63 65 4e 61 6d 65 22 3e 54 68 65 20 73 6f 75 72  ceName">The sour
cb60: 63 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  ce database name
cb70: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
cb80: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
cb90: 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20 62 61  newly created ba
cba0: 63 6b 75 70 20 6f 62 6a 65 63 74 2e 3c 2f 72 65  ckup object.</re
cbb0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
cbc0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
cbd0: 4c 69 74 65 42 61 63 6b 75 70 20 49 6e 69 74 69  LiteBackup Initi
cbe0: 61 6c 69 7a 65 42 61 63 6b 75 70 28 0d 0a 20 20  alizeBackup(..  
cbf0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
cc00: 65 63 74 69 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d  ection destCnn,.
cc10: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
cc20: 64 65 73 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  destName,..     
cc30: 20 20 20 73 74 72 69 6e 67 20 73 6f 75 72 63 65     string source
cc40: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 29 0d  Name..        ).
cc50: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
cc60: 69 66 20 28 64 65 73 74 43 6e 6e 20 3d 3d 20 6e  if (destCnn == n
cc70: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
cc80: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
cc90: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
cca0: 6e 28 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d  n("destCnn");...
ccb0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73  .        if (des
ccc0: 74 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  tName == null)..
ccd0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
cce0: 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
ccf0: 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73  llException("des
cd00: 74 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  tName");....    
cd10: 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 4e 61      if (sourceNa
cd20: 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
cd30: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
cd40: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
cd50: 78 63 65 70 74 69 6f 6e 28 22 73 6f 75 72 63 65  xception("source
cd60: 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name");....     
cd70: 20 20 20 53 51 4c 69 74 65 33 20 64 65 73 74 53     SQLite3 destS
cd80: 71 6c 69 74 65 33 20 3d 20 64 65 73 74 43 6e 6e  qlite3 = destCnn
cd90: 2e 5f 73 71 6c 20 61 73 20 53 51 4c 69 74 65 33  ._sql as SQLite3
cda0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
cdb0: 28 64 65 73 74 53 71 6c 69 74 65 33 20 3d 3d 20  (destSqlite3 == 
cdc0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
cdd0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
cde0: 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d  umentException(.
cdf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ce00: 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f   "Destination co
ce10: 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 6e 6f 20  nnection has no 
ce20: 77 72 61 70 70 65 72 2e 22 2c 0d 0a 20 20 20 20  wrapper.",..    
ce30: 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65 73              "des
ce40: 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tCnn");....     
ce50: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
ce60: 69 6f 6e 48 61 6e 64 6c 65 20 64 65 73 74 48 61  ionHandle destHa
ce70: 6e 64 6c 65 20 3d 20 64 65 73 74 53 71 6c 69 74  ndle = destSqlit
ce80: 65 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20  e3._sql;....    
ce90: 20 20 20 20 69 66 20 28 64 65 73 74 48 61 6e 64      if (destHand
cea0: 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
ceb0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
cec0: 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70  ew ArgumentExcep
ced0: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
cee0: 20 20 20 20 20 20 20 22 44 65 73 74 69 6e 61 74         "Destinat
cef0: 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ion connection h
cf00: 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
cf10: 6e 64 6c 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20  ndle.",..       
cf20: 20 20 20 20 20 20 20 20 20 22 64 65 73 74 43 6e           "destCn
cf30: 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n");....        
cf40: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
cf50: 48 61 6e 64 6c 65 20 73 6f 75 72 63 65 48 61 6e  Handle sourceHan
cf60: 64 6c 65 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20  dle = _sql;.... 
cf70: 20 20 20 20 20 20 20 69 66 20 28 73 6f 75 72 63         if (sourc
cf80: 65 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29  eHandle == null)
cf90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
cfa0: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
cfb0: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
cfc0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
cfd0: 20 20 20 20 22 53 6f 75 72 63 65 20 63 6f 6e 6e      "Source conn
cfe0: 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e  ection has an in
cff0: 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b  valid handle.");
d000: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65  ....        byte
d010: 5b 5d 20 7a 44 65 73 74 4e 61 6d 65 20 3d 20 54  [] zDestName = T
d020: 6f 55 54 46 38 28 64 65 73 74 4e 61 6d 65 29 3b  oUTF8(destName);
d030: 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d  ..        byte[]
d040: 20 7a 53 6f 75 72 63 65 4e 61 6d 65 20 3d 20 54   zSourceName = T
d050: 6f 55 54 46 38 28 73 6f 75 72 63 65 4e 61 6d 65  oUTF8(sourceName
d060: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
d070: 74 50 74 72 20 62 61 63 6b 75 70 20 3d 20 55 6e  tPtr backup = Un
d080: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d090: 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
d0a0: 5f 69 6e 69 74 28 0d 0a 20 20 20 20 20 20 20 20  _init(..        
d0b0: 20 20 20 20 64 65 73 74 48 61 6e 64 6c 65 2c 20      destHandle, 
d0c0: 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63  zDestName, sourc
d0d0: 65 48 61 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65  eHandle, zSource
d0e0: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
d0f0: 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
d100: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
d110: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
d120: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
d130: 69 6f 6e 28 52 65 73 75 6c 74 43 6f 64 65 28 29  ion(ResultCode()
d140: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
d150: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
d160: 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 42  turn new SQLiteB
d170: 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
d180: 20 20 20 20 74 68 69 73 2c 20 6e 65 77 20 53 51      this, new SQ
d190: 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
d1a0: 28 64 65 73 74 48 61 6e 64 6c 65 2c 20 62 61 63  (destHandle, bac
d1b0: 6b 75 70 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  kup),..         
d1c0: 20 20 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a     destHandle, z
d1d0: 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65  DestName, source
d1e0: 48 61 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65 4e  Handle, zSourceN
d1f0: 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ame);..    }....
d200: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
d210: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 70 69 65  >..    /// Copie
d220: 73 20 75 70 20 74 6f 20 4e 20 70 61 67 65 73 20  s up to N pages 
d230: 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 20  from the source 
d240: 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20  database to the 
d250: 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20  destination..   
d260: 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 61 73   /// database as
d270: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
d280: 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b  e specified back
d290: 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20  up object...    
d2a0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
d2b0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
d2c0: 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65  ame="backup">The
d2d0: 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74   backup object t
d2e0: 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  o use.</param>..
d2f0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
d300: 61 6d 65 3d 22 6e 50 61 67 65 22 3e 0d 0a 20 20  ame="nPage">..  
d310: 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
d320: 20 6f 66 20 70 61 67 65 73 20 74 6f 20 63 6f 70   of pages to cop
d330: 79 2c 20 6e 65 67 61 74 69 76 65 20 74 6f 20 63  y, negative to c
d340: 6f 70 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e  opy all remainin
d350: 67 20 70 61 67 65 73 2e 0d 0a 20 20 20 20 2f 2f  g pages...    //
d360: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
d370: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
d380: 22 72 65 74 72 79 22 3e 0d 0a 20 20 20 20 2f 2f  "retry">..    //
d390: 2f 20 53 65 74 20 74 6f 20 74 72 75 65 20 69 66  / Set to true if
d3a0: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6e   the operation n
d3b0: 65 65 64 73 20 74 6f 20 62 65 20 72 65 74 72 69  eeds to be retri
d3c0: 65 64 20 64 75 65 20 74 6f 20 64 61 74 61 62 61  ed due to databa
d3d0: 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 63 6b  se..    /// lock
d3e0: 69 6e 67 20 69 73 73 75 65 73 3b 20 6f 74 68 65  ing issues; othe
d3f0: 72 77 69 73 65 2c 20 73 65 74 20 74 6f 20 66 61  rwise, set to fa
d400: 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  lse...    /// </
d410: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
d420: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
d430: 2f 2f 20 54 72 75 65 20 69 66 20 74 68 65 72 65  // True if there
d440: 20 61 72 65 20 6d 6f 72 65 20 70 61 67 65 73 20   are more pages 
d450: 74 6f 20 62 65 20 63 6f 70 69 65 64 2c 20 66 61  to be copied, fa
d460: 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a  lse otherwise...
d470: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
d480: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
d490: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53   override bool S
d4a0: 74 65 70 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  tepBackup(..    
d4b0: 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
d4c0: 20 62 61 63 6b 75 70 2c 0d 0a 20 20 20 20 20 20   backup,..      
d4d0: 20 20 69 6e 74 20 6e 50 61 67 65 2c 0d 0a 20 20    int nPage,..  
d4e0: 20 20 20 20 20 20 6f 75 74 20 62 6f 6f 6c 20 72        out bool r
d4f0: 65 74 72 79 0d 0a 20 20 20 20 20 20 20 20 29 0d  etry..        ).
d500: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
d510: 72 65 74 72 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  retry = false;..
d520: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61  ..        if (ba
d530: 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ckup == null).. 
d540: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
d550: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
d560: 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b  lException("back
d570: 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  up");....       
d580: 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
d590: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63  dle handle = bac
d5a0: 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b  kup._sqlite_back
d5b0: 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  up;....        i
d5c0: 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  f (handle == nul
d5d0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
d5e0: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
d5f0: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
d600: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
d610: 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
d620: 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
d630: 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
d640: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
d650: 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e   handlePtr = han
d660: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
d670: 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d  if (handlePtr ==
d680: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
d690: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
d6a0: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
d6b0: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
d6c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d6d0: 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
d6e0: 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
d6f0: 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29  andle pointer.")
d700: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
d710: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
d720: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d730: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
d740: 6b 75 70 5f 73 74 65 70 28 68 61 6e 64 6c 65 50  kup_step(handleP
d750: 74 72 2c 20 6e 50 61 67 65 29 3b 0d 0a 20 20 20  tr, nPage);..   
d760: 20 20 20 20 20 62 61 63 6b 75 70 2e 5f 73 74 65       backup._ste
d770: 70 52 65 73 75 6c 74 20 3d 20 6e 3b 20 2f 2a 20  pResult = n; /* 
d780: 4e 4f 54 45 3a 20 53 61 76 65 20 66 6f 72 20 75  NOTE: Save for u
d790: 73 65 20 62 79 20 46 69 6e 69 73 68 42 61 63 6b  se by FinishBack
d7a0: 75 70 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  up. */....      
d7b0: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
d7c0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
d7d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d7e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
d7f0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
d800: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
d810: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
d820: 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20  rCode.Busy)..   
d830: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d840: 20 20 20 20 72 65 74 72 79 20 3d 20 74 72 75 65      retry = true
d850: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
d860: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
d870: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
d880: 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
d890: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f  LiteErrorCode.Lo
d8a0: 63 6b 65 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  cked)..        {
d8b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
d8c0: 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  try = true;..   
d8d0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
d8e0: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
d8f0: 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69  ..        else i
d900: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
d910: 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 0d 0a 20  rorCode.Done).. 
d920: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d930: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
d940: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  se;..        }..
d950: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
d960: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d970: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
d980: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
d990: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
d9a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
d9b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
d9c0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
d9d0: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
d9e0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72  umber of pages r
d9f0: 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63  emaining to be c
da00: 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 73  opied from the s
da10: 6f 75 72 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 64  ource..    /// d
da20: 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 64  atabase to the d
da30: 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62  estination datab
da40: 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  ase associated w
da50: 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65  ith the specifie
da60: 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 61 63 6b 75  d..    /// backu
da70: 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f  p object...    /
da80: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
da90: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
daa0: 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
dab0: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
dac0: 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d   check.</param>.
dad0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
dae0: 73 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s>The number of 
daf0: 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20  pages remaining 
db00: 74 6f 20 62 65 20 63 6f 70 69 65 64 2e 3c 2f 72  to be copied.</r
db10: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
db20: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
db30: 6e 74 20 52 65 6d 61 69 6e 69 6e 67 42 61 63 6b  nt RemainingBack
db40: 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  up(..        SQL
db50: 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70  iteBackup backup
db60: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
db70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
db80: 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d  backup == null).
db90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
dba0: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
dbb0: 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61  ullException("ba
dbc0: 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ckup");....     
dbd0: 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48     SQLiteBackupH
dbe0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62  andle handle = b
dbf0: 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61  ackup._sqlite_ba
dc00: 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ckup;....       
dc10: 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e   if (handle == n
dc20: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
dc30: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
dc40: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
dc50: 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
dc60: 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
dc70: 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
dc80: 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b  valid handle.");
dc90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
dca0: 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68  tr handlePtr = h
dcb0: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
dcc0: 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20    if (handlePtr 
dcd0: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
dce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
dcf0: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
dd00: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
dd10: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
dd20: 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
dd30: 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
dd40: 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e   handle pointer.
dd50: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ");....        r
dd60: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
dd70: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
dd80: 33 5f 62 61 63 6b 75 70 5f 72 65 6d 61 69 6e 69  3_backup_remaini
dd90: 6e 67 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a  ng(handlePtr);..
dda0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
ddb0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
ddc0: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
ddd0: 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
dde0: 70 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75  pages in the sou
ddf0: 72 63 65 20 64 61 74 61 62 61 73 65 20 61 73 73  rce database ass
de00: 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f  ociated..    ///
de10: 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
de20: 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ied backup objec
de30: 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
de40: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
de50: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
de60: 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
de70: 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e  object to check.
de80: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
de90: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 74  / <returns>The t
dea0: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70  otal number of p
deb0: 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72  ages in the sour
dec0: 63 65 20 64 61 74 61 62 61 73 65 2e 3c 2f 72 65  ce database.</re
ded0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
dee0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
def0: 74 20 50 61 67 65 43 6f 75 6e 74 42 61 63 6b 75  t PageCountBacku
df00: 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
df10: 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d  teBackup backup.
df20: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
df30: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62  {..        if (b
df40: 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ackup == null)..
df50: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
df60: 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
df70: 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63  llException("bac
df80: 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  kup");....      
df90: 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61    SQLiteBackupHa
dfa0: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61  ndle handle = ba
dfb0: 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63  ckup._sqlite_bac
dfc0: 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  kup;....        
dfd0: 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75  if (handle == nu
dfe0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
dff0: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
e000: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
e010: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
e020: 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
e030: 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
e040: 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
e050: 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
e060: 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61  r handlePtr = ha
e070: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
e080: 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d   if (handlePtr =
e090: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
e0a0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
e0b0: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
e0c0: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
e0d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e0e0: 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
e0f0: 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
e100: 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22  handle pointer."
e110: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
e120: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
e130: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
e140: 5f 62 61 63 6b 75 70 5f 70 61 67 65 63 6f 75 6e  _backup_pagecoun
e150: 74 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20  t(handlePtr);.. 
e160: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
e170: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
e180: 2f 2f 20 44 65 73 74 72 6f 79 73 20 74 68 65 20  // Destroys the 
e190: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2c 20 72  backup object, r
e1a0: 6f 6c 6c 69 6e 67 20 62 61 63 6b 20 61 6e 79 20  olling back any 
e1b0: 62 61 63 6b 75 70 20 74 68 61 74 20 6d 61 79 20  backup that may 
e1c0: 62 65 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 70  be in..    /// p
e1d0: 72 6f 67 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rogess...    ///
e1e0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
e1f0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
e200: 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61  ="backup">The ba
e210: 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 64  ckup object to d
e220: 65 73 74 72 6f 79 2e 3c 2f 70 61 72 61 6d 3e 0d  estroy.</param>.
e230: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
e240: 65 72 72 69 64 65 20 76 6f 69 64 20 46 69 6e 69  erride void Fini
e250: 73 68 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  shBackup(..     
e260: 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20     SQLiteBackup 
e270: 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20  backup..        
e280: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
e290: 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
e2a0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
e2b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
e2c0: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
e2d0: 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
e2e0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
e2f0: 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
e300: 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
e310: 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
e320: 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
e330: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
e340: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
e350: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
e360: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
e380: 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
e390: 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
e3a0: 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
e3b0: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50    IntPtr handleP
e3c0: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
e3d0: 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
e3e0: 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e  lePtr == IntPtr.
e3f0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
e400: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
e410: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
e420: 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
e430: 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
e440: 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
e450: 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f  nvalid handle po
e460: 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20  inter.");....   
e470: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
e480: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
e490: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
e4a0: 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
e4b0: 73 68 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a  sh(handlePtr);..
e4c0: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 53          handle.S
e4d0: 65 74 48 61 6e 64 6c 65 41 73 49 6e 76 61 6c 69  etHandleAsInvali
e4e0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
e4f0: 69 66 20 28 28 6e 20 21 3d 20 53 51 4c 69 74 65  if ((n != SQLite
e500: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26  ErrorCode.Ok) &&
e510: 20 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e 5f 73   (n != backup._s
e520: 74 65 70 52 65 73 75 6c 74 29 29 0d 0a 20 20 20  tepResult))..   
e530: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
e540: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
e550: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
e560: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
e570: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
e580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e5d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
e5e0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
e5f0: 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66  // Determines if
e600: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
e610: 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65   library has bee
e620: 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f  n initialized fo
e630: 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63  r the..    /// c
e640: 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d  urrent process..
e650: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
e660: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
e670: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
e680: 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61  A boolean indica
e690: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
e6a0: 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  not the SQLite c
e6b0: 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20  ore library has 
e6c0: 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e  been..    /// in
e6d0: 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68  itialized for th
e6e0: 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
e6f0: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  s...    /// </re
e700: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
e710: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
e720: 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a 65 64  ol IsInitialized
e730: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
e740: 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63     return Static
e750: 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 3b  IsInitialized();
e760: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
e770: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
e780: 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73    /// Determines
e790: 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63   if the SQLite c
e7a0: 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20  ore library has 
e7b0: 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
e7c0: 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f   for the..    //
e7d0: 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  / current proces
e7e0: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
e7f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
e800: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
e810: 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  // A boolean ind
e820: 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20  icating whether 
e830: 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74  or not the SQLit
e840: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68  e core library h
e850: 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f  as been..    ///
e860: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72   initialized for
e870: 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
e880: 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cess...    /// <
e890: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
e8a0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62  nternal static b
e8b0: 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e 69 74  ool StaticIsInit
e8c0: 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b  ialized()..    {
e8d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
e8e0: 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a        // BUGFIX:
e8f0: 20 50 72 65 76 65 6e 74 20 72 61 63 65 73 20 77   Prevent races w
e900: 69 74 68 20 6f 74 68 65 72 20 74 68 72 65 61 64  ith other thread
e910: 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74 69 72  s for this entir
e920: 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20 20  e block, due..  
e930: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
e940: 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69 6e 61   to the try/fina
e950: 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e 20 20  lly semantics.  
e960: 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32 39 30  See ticket [7290
e970: 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20 20  5c9a77]...      
e980: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c 6f    //..        lo
e990: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20  ck (syncRoot).. 
e9a0: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50         {..#if !P
e9b0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
e9c0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
e9d0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
e9e0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
e9f0: 61 76 65 20 74 68 65 20 73 74 61 74 65 20 6f 66  ave the state of
ea00: 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c 61   the logging cla
ea10: 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65 73 74  ss and then rest
ea20: 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20 20 20  ore it..        
ea30: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 66 74      //       aft
ea40: 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65 20 74  er we are done t
ea50: 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67 20  o avoid logging 
ea60: 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20 65  too many false e
ea70: 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20 20  rrors...        
ea80: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
ea90: 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 45 6e      bool savedEn
eaa0: 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c 6f  abled = SQLiteLo
eab0: 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20  g.Enabled;..    
eac0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
ead0: 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c 73  g.Enabled = fals
eae0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
eaf0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
eb00: 20 20 20 7b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20     {..#endif..  
eb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
eb20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eb30: 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20    // NOTE: This 
eb40: 6d 65 74 68 6f 64 20 5b 61 62 5d 75 73 65 73 20  method [ab]uses 
eb50: 74 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51  the fact that SQ
eb60: 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  Lite will always
eb70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eb80: 20 20 2f 2f 20 20 20 20 20 20 20 72 65 74 75 72    //       retur
eb90: 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 66  n SQLITE_ERROR f
eba0: 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f 77 6e 20 63  or any unknown c
ebb0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
ebc0: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
ebd0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 2a 75       //       *u
ebe0: 6e 6c 65 73 73 2a 20 74 68 65 20 53 51 4c 69 74  nless* the SQLit
ebf0: 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c  e library has al
ec00: 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69  ready been initi
ec10: 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20  alized...       
ec20: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
ec30: 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 20 69    In that case i
ec40: 74 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 72 65  t will always re
ec50: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
ec60: 53 45 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  SE...           
ec70: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
ec80: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
ec90: 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e  rrorCode rc = Un
eca0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
ecb0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  s.sqlite3_config
ecc0: 5f 6e 6f 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  _none(..        
ecd0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
ece0: 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e  teConfigOpsEnum.
ecf0: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f  SQLITE_CONFIG_NO
ed00: 4e 45 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  NE);....        
ed10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
ed20: 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc == SQLiteErro
ed30: 72 43 6f 64 65 2e 4d 69 73 75 73 65 29 3b 0d 0a  rCode.Misuse);..
ed40: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
ed50: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
ed60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ed70: 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
ed80: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
ed90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
eda0: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61     SQLiteLog.Ena
edb0: 62 6c 65 64 20 3d 20 73 61 76 65 64 45 6e 61 62  bled = savedEnab
edc0: 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  led;..          
edd0: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20    }..#endif..   
ede0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
edf0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
ee00: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70  y>..    /// Help
ee10: 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72  er function to r
ee20: 65 74 72 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e  etrieve a column
ee30: 20 6f 66 20 64 61 74 61 20 66 72 6f 6d 20 61 6e   of data from an
ee40: 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
ee50: 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
ee60: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
ee70: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d  <param name="stm
ee80: 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74  t">The statement
ee90: 20 62 65 69 6e 67 20 73 74 65 70 28 29 27 64 20   being step()'d 
eea0: 74 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d  through</param>.
eeb0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
eec0: 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68 65  name="index">The
eed0: 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f   column index to
eee0: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
eef0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
ef00: 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65  m name="typ">The
ef10: 20 74 79 70 65 20 6f 66 20 64 61 74 61 20 63 6f   type of data co
ef20: 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63  ntained in the c
ef30: 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69  olumn.  If Unini
ef40: 74 69 61 6c 69 7a 65 64 2c 20 74 68 69 73 20 66  tialized, this f
ef50: 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74  unction will ret
ef60: 72 69 65 76 65 20 74 68 65 20 64 61 74 61 74 79  rieve the dataty
ef70: 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c  pe information.<
ef80: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
ef90: 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
efa0: 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 74 68  s the data in th
efb0: 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e  e column</return
efc0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
efd0: 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
efe0: 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74 65   GetValue(SQLite
eff0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
f000: 69 6e 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74  int index, SQLit
f010: 65 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20  eType typ)..    
f020: 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 49 73 4e  {..      if (IsN
f030: 75 6c 6c 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ull(stmt, index)
f040: 29 20 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e  ) return DBNull.
f050: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 54 79  Value;..      Ty
f060: 70 65 41 66 66 69 6e 69 74 79 20 61 66 66 20 3d  peAffinity aff =
f070: 20 74 79 70 2e 41 66 66 69 6e 69 74 79 3b 0d 0a   typ.Affinity;..
f080: 20 20 20 20 20 20 54 79 70 65 20 74 20 3d 20 6e        Type t = n
f090: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ull;....      if
f0a0: 20 28 74 79 70 2e 54 79 70 65 20 21 3d 20 44 62   (typ.Type != Db
f0b0: 54 79 70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20  Type.Object)..  
f0c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
f0d0: 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74   = SQLiteConvert
f0e0: 2e 53 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70  .SQLiteTypeToTyp
f0f0: 65 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20  e(typ);..       
f100: 20 61 66 66 20 3d 20 54 79 70 65 54 6f 41 66 66   aff = TypeToAff
f110: 69 6e 69 74 79 28 74 29 3b 0d 0a 20 20 20 20 20  inity(t);..     
f120: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74   }....      swit
f130: 63 68 20 28 61 66 66 29 0d 0a 20 20 20 20 20 20  ch (aff)..      
f140: 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  {..        case 
f150: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f  TypeAffinity.Blo
f160: 62 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  b:..          if
f170: 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62   (typ.Type == Db
f180: 54 79 70 65 2e 47 75 69 64 20 26 26 20 74 79 70  Type.Guid && typ
f190: 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70  .Affinity == Typ
f1a0: 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74 29 0d  eAffinity.Text).
f1b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
f1c0: 75 72 6e 20 6e 65 77 20 47 75 69 64 28 47 65 74  urn new Guid(Get
f1d0: 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
f1e0: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
f1f0: 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29 47 65   int n = (int)Ge
f200: 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64  tBytes(stmt, ind
f210: 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20  ex, 0, null, 0, 
f220: 30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  0);..          b
f230: 79 74 65 5b 5d 20 62 20 3d 20 6e 65 77 20 62 79  yte[] b = new by
f240: 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20  te[n];..        
f250: 20 20 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c    GetBytes(stmt,
f260: 20 69 6e 64 65 78 2c 20 30 2c 20 62 2c 20 30 2c   index, 0, b, 0,
f270: 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   n);....        
f280: 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d    if (typ.Type =
f290: 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26  = DbType.Guid &&
f2a0: 20 6e 20 3d 3d 20 31 36 29 0d 0a 20 20 20 20 20   n == 16)..     
f2b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
f2c0: 77 20 47 75 69 64 28 62 29 3b 0d 0a 0d 0a 20 20  w Guid(b);....  
f2d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62          return b
f2e0: 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
f2f0: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74  TypeAffinity.Dat
f300: 65 54 69 6d 65 3a 0d 0a 20 20 20 20 20 20 20 20  eTime:..        
f310: 20 20 72 65 74 75 72 6e 20 47 65 74 44 61 74 65    return GetDate
f320: 54 69 6d 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  Time(stmt, index
f330: 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  );..        case
f340: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f   TypeAffinity.Do
f350: 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20  uble:..         
f360: 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20   if (t == null) 
f370: 72 65 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65  return GetDouble
f380: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
f390: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
f3a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
f3b0: 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67  rn Convert.Chang
f3c0: 65 54 79 70 65 28 47 65 74 44 6f 75 62 6c 65 28  eType(GetDouble(
f3d0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c  stmt, index), t,
f3e0: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
f3f0: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
f400: 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20  ty.Int64:..     
f410: 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75       if (t == nu
f420: 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e  ll) return GetIn
f430: 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
f440: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  ;..          els
f450: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  e..            r
f460: 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68  eturn Convert.Ch
f470: 61 6e 67 65 54 79 70 65 28 47 65 74 49 6e 74 36  angeType(GetInt6
f480: 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  4(stmt, index), 
f490: 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  t, null);..     
f4a0: 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20     default:..   
f4b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
f4c0: 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65  tText(stmt, inde
f4d0: 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  x);..      }..  
f4e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
f4f0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
f500: 20 47 65 74 43 75 72 73 6f 72 46 6f 72 54 61 62   GetCursorForTab
f510: 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  le(SQLiteStateme
f520: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c  nt stmt, int db,
f530: 20 69 6e 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a   int rootPage)..
f540: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
f550: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
f560: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
f570: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f580: 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 75 72 73  lite3_table_curs
f590: 6f 72 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  or(stmt._sqlite_
f5a0: 73 74 6d 74 2c 20 64 62 2c 20 72 6f 6f 74 50 61  stmt, db, rootPa
f5b0: 67 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ge);..#else..   
f5c0: 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 23     return -1;..#
f5d0: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
f5e0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
f5f0: 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 52 6f  rride long GetRo
f600: 77 49 64 46 6f 72 43 75 72 73 6f 72 28 53 51 4c  wIdForCursor(SQL
f610: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
f620: 74 2c 20 69 6e 74 20 63 75 72 73 6f 72 29 0d 0a  t, int cursor)..
f630: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
f640: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
f650: 20 20 20 6c 6f 6e 67 20 72 6f 77 69 64 3b 0d 0a     long rowid;..
f660: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
f670: 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
f680: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
f690: 71 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f  qlite3_cursor_ro
f6a0: 77 69 64 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  wid(stmt._sqlite
f6b0: 5f 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20 6f  _stmt, cursor, o
f6c0: 75 74 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20  ut rowid);..    
f6d0: 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69    if (rc == SQLi
f6e0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
f6f0: 72 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d  return rowid;...
f700: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b  .      return 0;
f710: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
f720: 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66  eturn 0;..#endif
f730: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
f740: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
f750: 20 76 6f 69 64 20 47 65 74 49 6e 64 65 78 43 6f   void GetIndexCo
f760: 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f  lumnExtendedInfo
f770: 28 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65  (string database
f780: 2c 20 73 74 72 69 6e 67 20 69 6e 64 65 78 2c 20  , string index, 
f790: 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f  string column, o
f7a0: 75 74 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c  ut int sortMode,
f7b0: 20 6f 75 74 20 69 6e 74 20 6f 6e 45 72 72 6f 72   out int onError
f7c0: 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c  , out string col
f7d0: 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d  lationSequence).
f7e0: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
f7f0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
f800: 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 3b      IntPtr coll;
f810: 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c  ..      int coll
f820: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  len;..      SQLi
f830: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 3b 0d  teErrorCode rc;.
f840: 0a 0d 0a 20 20 20 20 20 20 72 63 20 3d 20 55 6e  ...      rc = Un
f850: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f860: 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
f870: 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65  column_info_inte
f880: 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  rop(_sql, ToUTF8
f890: 28 64 61 74 61 62 61 73 65 29 2c 20 54 6f 55 54  (database), ToUT
f8a0: 46 38 28 69 6e 64 65 78 29 2c 20 54 6f 55 54 46  F8(index), ToUTF
f8b0: 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 73  8(column), out s
f8c0: 6f 72 74 4d 6f 64 65 2c 20 6f 75 74 20 6f 6e 45  ortMode, out onE
f8d0: 72 72 6f 72 2c 20 6f 75 74 20 63 6f 6c 6c 2c 20  rror, out coll, 
f8e0: 6f 75 74 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20  out colllen);.. 
f8f0: 20 20 20 20 20 69 66 20 28 72 63 20 21 3d 20 53       if (rc != S
f900: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
f910: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
f920: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c  iteException(rc,
f930: 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20   null);....     
f940: 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   collationSequen
f950: 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  ce = UTF8ToStrin
f960: 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29  g(coll, colllen)
f970: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
f980: 73 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20  sortMode = 0;.. 
f990: 20 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20 32       onError = 2
f9a0: 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69  ;..      collati
f9b0: 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 22 42 49  onSequence = "BI
f9c0: 4e 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a  NARY";..#endif..
f9d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
f9e0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
f9f0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46  QLiteErrorCode F
fa00: 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72 69 6e  ileControl(strin
fa10: 67 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74 20 6f  g zDbName, int o
fa20: 70 2c 20 49 6e 74 50 74 72 20 70 41 72 67 29 0d  p, IntPtr pArg).
fa30: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
fa40: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
fa50: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
fa60: 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73  _file_control(_s
fa70: 71 6c 2c 20 28 7a 44 62 4e 61 6d 65 20 21 3d 20  ql, (zDbName != 
fa80: 6e 75 6c 6c 29 20 3f 20 54 6f 55 54 46 38 28 7a  null) ? ToUTF8(z
fa90: 44 62 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20  DbName) : null, 
faa0: 6f 70 2c 20 70 41 72 67 29 3b 0d 0a 20 20 20 20  op, pArg);..    
fab0: 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a                 }..  }..}..