System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact a097408c8841823498920c93b6880569d3d62ac0:


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 20 7c 7c 20 4e 45 54 5f 34 35 29 20 26  _40 || NET_45) &
0a30: 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  & !PLATFORM_COMP
0a40: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
0a50: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 5f    private bool _
0a60: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 3b 0d  buildingSchema;.
0a70: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
0a80: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0a90: 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72 2d 64    /// The user-d
0aa0: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
0ab0: 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e 20 74   registered on t
0ac0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  his connection..
0ad0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ae0: 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  y>..    protecte
0af0: 64 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  d SQLiteFunction
0b00: 5b 5d 20 5f 66 75 6e 63 74 69 6f 6e 73 41 72 72  [] _functionsArr
0b10: 61 79 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  ay;....    inter
0b20: 6e 61 6c 20 53 51 4c 69 74 65 33 28 53 51 4c 69  nal SQLite3(SQLi
0b30: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66 6d  teDateFormats fm
0b40: 74 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20  t, DateTimeKind 
0b50: 6b 69 6e 64 29 0d 0a 20 20 20 20 20 20 3a 20 62  kind)..      : b
0b60: 61 73 65 28 66 6d 74 2c 20 6b 69 6e 64 29 0d 0a  ase(fmt, kind)..
0b70: 20 20 20 20 7b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      {..    }....
0b80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0be0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
0bf0: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
0c00: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
0c10: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f  ..    private bo
0c20: 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20  ol disposed;..  
0c30: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
0c40: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
0c50: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
0c60: 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f  {..#if THROW_ON_
0c70: 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20  DISPOSED..      
0c80: 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d    if (disposed).
0c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
0ca0: 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73  ow new ObjectDis
0cb0: 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74  posedException(t
0cc0: 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2e 4e  ypeof(SQLite3).N
0cd0: 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ame);..#endif.. 
0ce0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
0cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
0d50: 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65     protected ove
0d60: 72 72 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f  rride void Dispo
0d70: 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e  se(bool disposin
0d80: 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  g)..    {..     
0d90: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
0da0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
0db0: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
0dc0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
0dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
0de0: 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a  if (disposing)..
0df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e00: 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  //{..           
0e10: 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f       //    /////
0e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0e50: 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73   //    // dispos
0e60: 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  e managed resour
0e70: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
0e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
0e90: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
0ec0: 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a           //}....
0ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
0f10: 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61          // relea
0f20: 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73  se unmanaged res
0f30: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
0f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0f80: 20 20 20 20 20 20 20 20 20 20 43 6c 6f 73 65 28            Close(
0f90: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
0fa0: 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d        disposed =
0fb0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
0fc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
0fd0: 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
0fe0: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
0ff0: 20 20 20 20 20 20 20 20 20 20 62 61 73 65 2e 44            base.D
1000: 69 73 70 6f 73 65 28 64 69 73 70 6f 73 69 6e 67  ispose(disposing
1010: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
1020: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
1030: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
10a0: 20 20 20 2f 2f 20 49 74 20 69 73 6e 27 74 20 6e     // It isn't n
10b0: 65 63 65 73 73 61 72 79 20 74 6f 20 63 6c 65 61  ecessary to clea
10c0: 6e 75 70 20 61 6e 79 20 66 75 6e 63 74 69 6f 6e  nup any function
10d0: 73 20 77 65 27 76 65 20 72 65 67 69 73 74 65 72  s we've register
10e0: 65 64 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 6e  ed.  If the conn
10f0: 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 20 67  ection..    // g
1100: 6f 65 73 20 74 6f 20 74 68 65 20 70 6f 6f 6c 20  oes to the pool 
1110: 61 6e 64 20 69 73 20 72 65 73 75 72 72 65 63 74  and is resurrect
1120: 65 64 20 6c 61 74 65 72 2c 20 72 65 2d 72 65 67  ed later, re-reg
1130: 69 73 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e  istered function
1140: 73 20 77 69 6c 6c 20 6f 76 65 72 77 72 69 74 65  s will overwrite
1150: 20 74 68 65 0d 0a 20 20 20 20 2f 2f 20 70 72 65   the..    // pre
1160: 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 2e  vious functions.
1170: 20 20 54 68 65 20 53 51 4c 69 74 65 46 75 6e 63    The SQLiteFunc
1180: 74 69 6f 6e 43 6f 6f 6b 69 65 48 61 6e 64 6c 65  tionCookieHandle
1190: 20 77 69 6c 6c 20 74 61 6b 65 20 63 61 72 65 20   will take care 
11a0: 6f 66 20 66 72 65 65 69 6e 67 20 75 6e 6d 61 6e  of freeing unman
11b0: 61 67 65 64 0d 0a 20 20 20 20 2f 2f 20 72 65 73  aged..    // res
11c0: 6f 75 72 63 65 73 20 62 65 6c 6f 6e 67 69 6e 67  ources belonging
11d0: 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
11e0: 6c 79 2d 72 65 67 69 73 74 65 72 65 64 20 66 75  ly-registered fu
11f0: 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 69 6e  nctions...    in
1200: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
1210: 76 6f 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20  void Close()..  
1220: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f    {..      if (_
1230: 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql != null)..  
1240: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1250: 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a   if (_usePool)..
1260: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1270: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1280: 65 42 61 73 65 2e 52 65 73 65 74 43 6f 6e 6e 65  eBase.ResetConne
1290: 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 5f 73 71 6c  ction(_sql, _sql
12a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
12b0: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
12c0: 6f 6e 50 6f 6f 6c 2e 41 64 64 28 5f 66 69 6c 65  onPool.Add(_file
12d0: 4e 61 6d 65 2c 20 5f 73 71 6c 2c 20 5f 70 6f 6f  Name, _sql, _poo
12e0: 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 23 69  lVersion);....#i
12f0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
1300: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
1310: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
1320: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
1330: 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Line(String.Form
1340: 61 74 28 22 43 6c 6f 73 65 20 28 50 6f 6f 6c 29  at("Close (Pool)
1350: 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29 29 3b 0d  : {0}", _sql));.
1360: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
1370: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1380: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
1390: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
13a0: 20 5f 73 71 6c 2e 44 69 73 70 6f 73 65 28 29 3b   _sql.Dispose();
13b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
13c0: 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20           _sql = 
13d0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  null;..      }..
13e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1450: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1460: 72 72 69 64 65 20 76 6f 69 64 20 43 61 6e 63 65  rride void Cance
1470: 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  l()..    {..    
1480: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
1490: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e  thods.sqlite3_in
14a0: 74 65 72 72 75 70 74 28 5f 73 71 6c 29 3b 0d 0a  terrupt(_sql);..
14b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
14c0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
14d0: 74 72 69 6e 67 20 56 65 72 73 69 6f 6e 0d 0a 20  tring Version.. 
14e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
14f0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
1500: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 33    return SQLite3
1510: 2e 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d  .SQLiteVersion;.
1520: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
1530: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1540: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
1550: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20  fineConstants.. 
1560: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65     {..        ge
1570: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
1580: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
1590: 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d  Builder result =
15a0: 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64   new StringBuild
15b0: 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  er();..         
15c0: 20 20 20 49 4c 69 73 74 3c 73 74 72 69 6e 67 3e     IList<string>
15d0: 20 6c 69 73 74 20 3d 20 53 51 4c 69 74 65 44 65   list = SQLiteDe
15e0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 2e 4f 70  fineConstants.Op
15f0: 74 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20  tionList;....   
1600: 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 69 73           if (lis
1610: 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
1620: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1630: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
1640: 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d 65  ch (string eleme
1650: 6e 74 20 69 6e 20 6c 69 73 74 29 0d 0a 20 20 20  nt in list)..   
1660: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1680: 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20      if (element 
1690: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
16a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
16c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d0: 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65     if (result.Le
16e0: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
16f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1700: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
1710: 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  (' ');....      
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1730: 73 75 6c 74 2e 41 70 70 65 6e 64 28 65 6c 65 6d  sult.Append(elem
1740: 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ent);..         
1750: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1760: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1770: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
1780: 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b  sult.ToString();
1790: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
17a0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
17b0: 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  al static string
17c0: 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a   SQLiteVersion..
17d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
17e0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
17f0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
1800: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
1810: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1820: 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 2c  e3_libversion(),
1830: 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a   -1);..      }..
1840: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
1850: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72  ernal static str
1860: 69 6e 67 20 53 51 4c 69 74 65 53 6f 75 72 63 65  ing SQLiteSource
1870: 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  Id..    {..     
1880: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
1890: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54         return UT
18a0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
18b0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
18c0: 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28  qlite3_sourceid(
18d0: 29 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d  ), -1);..      }
18e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
18f0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1900: 20 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69 74   bool AutoCommit
1910: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
1920: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
1930: 20 20 20 20 20 72 65 74 75 72 6e 20 49 73 41 75       return IsAu
1940: 74 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c 20 5f  tocommit(_sql, _
1950: 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  sql);..      }..
1960: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
1970: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
1980: 6f 6e 67 20 4c 61 73 74 49 6e 73 65 72 74 52 6f  ong LastInsertRo
1990: 77 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  wId..    {..    
19a0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
19b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
19c0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
19d0: 64 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  ds.sqlite3_last_
19e0: 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 5f 73 71  insert_rowid(_sq
19f0: 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  l);..      }..  
1a00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1a10: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
1a20: 20 43 68 61 6e 67 65 73 0d 0a 20 20 20 20 7b 0d   Changes..    {.
1a30: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
1a40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
1a50: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
1a60: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
1a70: 63 68 61 6e 67 65 73 28 5f 73 71 6c 29 3b 0d 0a  changes(_sql);..
1a80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
1a90: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1aa0: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d  verride long Mem
1ab0: 6f 72 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a  oryUsed..    {..
1ac0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
1ad0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
1ae0: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
1af0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
1b00: 65 6d 6f 72 79 5f 75 73 65 64 28 29 3b 0d 0a 20  emory_used();.. 
1b10: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
1b20: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1b30: 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f  erride long Memo
1b40: 72 79 48 69 67 68 77 61 74 65 72 0d 0a 20 20 20  ryHighwater..   
1b50: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
1b60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b70: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
1b80: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1b90: 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61  e3_memory_highwa
1ba0: 74 65 72 28 30 29 3b 0d 0a 20 20 20 20 20 20 7d  ter(0);..      }
1bb0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1bc0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1bd0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1be0: 20 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73   SetMemoryStatus
1bf0: 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20  (bool value)..  
1c00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
1c10: 75 72 6e 20 53 74 61 74 69 63 53 65 74 4d 65 6d  urn StaticSetMem
1c20: 6f 72 79 53 74 61 74 75 73 28 76 61 6c 75 65 29  oryStatus(value)
1c30: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
1c40: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
1c50: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1c60: 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53  StaticSetMemoryS
1c70: 74 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65  tatus(bool value
1c80: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1c90: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
1ca0: 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
1cb0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1cc0: 65 33 5f 63 6f 6e 66 69 67 5f 69 6e 74 28 0d 0a  e3_config_int(..
1cd0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1ce0: 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e  teConfigOpsEnum.
1cf0: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45  SQLITE_CONFIG_ME
1d00: 4d 53 54 41 54 55 53 2c 20 76 61 6c 75 65 20 3f  MSTATUS, value ?
1d10: 20 31 20 3a 20 30 29 3b 0d 0a 0d 0a 20 20 20 20   1 : 0);....    
1d20: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a      return rc;..
1d30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
1d40: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1d50: 2f 2f 2f 20 53 68 75 74 64 6f 77 6e 20 74 68 65  /// Shutdown the
1d60: 20 53 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 73   SQLite engine s
1d70: 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
1d80: 20 72 65 73 74 61 72 74 65 64 20 77 69 74 68 20   restarted with 
1d90: 64 69 66 66 65 72 65 6e 74 20 63 6f 6e 66 69 67  different config
1da0: 20 6f 70 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f   options...    /
1db0: 2f 2f 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20  // We depend on 
1dc0: 61 75 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74  auto initializat
1dd0: 69 6f 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d  ion to recover..
1de0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1df0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
1e00: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20  turns>Returns a 
1e10: 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74  result code</ret
1e20: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
1e30: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
1e40: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 68 75  iteErrorCode Shu
1e50: 74 64 6f 77 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a  tdown()..    {..
1e60: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
1e70: 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
1e80: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1e90: 2e 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77  .sqlite3_shutdow
1ea0: 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  n();..        re
1eb0: 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d  turn rc;..    }.
1ec0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1ed0: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
1ee0: 4f 70 65 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Open()..    {.. 
1ef0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 5f         return (_
1f00: 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 3b 0d 0a 20  sql != null);.. 
1f10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
1f20: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
1f30: 69 64 20 4f 70 65 6e 28 73 74 72 69 6e 67 20 73  id Open(string s
1f40: 74 72 46 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 69  trFilename, SQLi
1f50: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
1f60: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  s connectionFlag
1f70: 73 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61  s, SQLiteOpenFla
1f80: 67 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61 67 73  gsEnum openFlags
1f90: 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53 69 7a  , int maxPoolSiz
1fa0: 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29  e, bool usePool)
1fb0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
1fc0: 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  f (_sql != null)
1fd0: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
1fe0: 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 75 73 65    _usePool = use
1ff0: 50 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 5f 66 69  Pool;..      _fi
2000: 6c 65 4e 61 6d 65 20 3d 20 73 74 72 46 69 6c 65  leName = strFile
2010: 6e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  name;....      i
2020: 66 20 28 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20  f (usePool)..   
2030: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 73     {..        _s
2040: 71 6c 20 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ql = SQLiteConne
2050: 63 74 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65  ctionPool.Remove
2060: 28 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61  (strFilename, ma
2070: 78 50 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f  xPoolSize, out _
2080: 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d  poolVersion);...
2090: 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
20a0: 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
20b0: 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
20c0: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
20d0: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
20e0: 22 4f 70 65 6e 20 28 50 6f 6f 6c 29 3a 20 7b 30  "Open (Pool): {0
20f0: 7d 22 2c 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c  }", (_sql != nul
2100: 6c 29 20 3f 20 5f 73 71 6c 2e 54 6f 53 74 72 69  l) ? _sql.ToStri
2110: 6e 67 28 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29  ng() : "<null>")
2120: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
2130: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if 
2140: 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (_sql == null)..
2150: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2160: 20 49 6e 74 50 74 72 20 64 62 3b 0d 0a 20 20 20   IntPtr db;..   
2170: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
2180: 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21  Code n;....#if !
2190: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
21a0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f  .        if ((co
21b0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 26 20  nnectionFlags & 
21c0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
21d0: 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f  Flags.NoExtensio
21e0: 6e 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53  nFunctions) != S
21f0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
2200: 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e  lags.NoExtension
2210: 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20  Functions)..    
2220: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2230: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
2240: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
2250: 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28 54 6f  _open_interop(To
2260: 55 54 46 38 28 73 74 72 46 69 6c 65 6e 61 6d 65  UTF8(strFilename
2270: 29 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 6f 75  ), openFlags, ou
2280: 74 20 64 62 29 3b 0d 0a 20 20 20 20 20 20 20 20  t db);..        
2290: 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d  }..        else.
22a0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
22b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 20   {..          n 
22c0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
22d0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70  thods.sqlite3_op
22e0: 65 6e 5f 76 32 28 54 6f 55 54 46 38 28 73 74 72  en_v2(ToUTF8(str
22f0: 46 69 6c 65 6e 61 6d 65 29 2c 20 6f 75 74 20 64  Filename), out d
2300: 62 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 49 6e  b, openFlags, In
2310: 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
2320: 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 4e       }....#if !N
2330: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
2340: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
2350: 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63 65  N..        Trace
2360: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
2370: 67 2e 46 6f 72 6d 61 74 28 22 4f 70 65 6e 3a 20  g.Format("Open: 
2380: 7b 30 7d 22 2c 20 64 62 29 29 3b 0d 0a 23 65 6e  {0}", db));..#en
2390: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  dif....        i
23a0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
23b0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
23c0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
23d0: 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d  ption(n, null);.
23e0: 0a 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c 20  ...        _sql 
23f0: 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e  = new SQLiteConn
2400: 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28 64 62 29  ectionHandle(db)
2410: 3b 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20  ;..        lock 
2420: 28 5f 73 71 6c 29 20 7b 20 2f 2a 20 48 41 43 4b  (_sql) { /* HACK
2430: 3a 20 46 6f 72 63 65 20 74 68 65 20 53 79 6e 63  : Force the Sync
2440: 42 6c 6f 63 6b 20 74 6f 20 62 65 20 22 63 72 65  Block to be "cre
2450: 61 74 65 64 22 20 6e 6f 77 2e 20 2a 2f 20 7d 0d  ated" now. */ }.
2460: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
2470: 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e  // Bind function
2480: 73 20 74 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63  s to this connec
2490: 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79 20 70 72  tion.  If any pr
24a0: 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73  evious functions
24b0: 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d   of the same nam
24c0: 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77 65 72 65  e..      // were
24d0: 20 61 6c 72 65 61 64 79 20 62 6f 75 6e 64 2c 20   already bound, 
24e0: 74 68 65 6e 20 74 68 65 20 6e 65 77 20 62 69 6e  then the new bin
24f0: 64 69 6e 67 73 20 72 65 70 6c 61 63 65 20 74 68  dings replace th
2500: 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20 20 5f 66  e old...      _f
2510: 75 6e 63 74 69 6f 6e 73 41 72 72 61 79 20 3d 20  unctionsArray = 
2520: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42  SQLiteFunction.B
2530: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 74 68 69  indFunctions(thi
2540: 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  s, connectionFla
2550: 67 73 29 3b 0d 0a 20 20 20 20 20 20 53 65 74 54  gs);..      SetT
2560: 69 6d 65 6f 75 74 28 30 29 3b 0d 0a 20 20 20 20  imeout(0);..    
2570: 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65 28 5f    GC.KeepAlive(_
2580: 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  sql);..    }....
2590: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
25a0: 72 72 69 64 65 20 76 6f 69 64 20 43 6c 65 61 72  rride void Clear
25b0: 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Pool()..    {.. 
25c0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
25d0: 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50  ctionPool.ClearP
25e0: 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d  ool(_fileName);.
25f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
2600: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
2610: 69 6e 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29 0d  int CountPool().
2620: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
2630: 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
2640: 67 2c 20 69 6e 74 3e 20 63 6f 75 6e 74 73 20 3d  g, int> counts =
2650: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
2660: 69 6e 74 20 6f 70 65 6e 43 6f 75 6e 74 20 3d 20  int openCount = 
2670: 30 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  0;..        int 
2680: 63 6c 6f 73 65 43 6f 75 6e 74 20 3d 20 30 3b 0d  closeCount = 0;.
2690: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 74 6f 74  .        int tot
26a0: 61 6c 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a  alCount = 0;....
26b0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
26c0: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65 74  nnectionPool.Get
26d0: 43 6f 75 6e 74 73 28 5f 66 69 6c 65 4e 61 6d 65  Counts(_fileName
26e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
26f0: 65 66 20 63 6f 75 6e 74 73 2c 20 72 65 66 20 6f  ef counts, ref o
2700: 70 65 6e 43 6f 75 6e 74 2c 20 72 65 66 20 63 6c  penCount, ref cl
2710: 6f 73 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20  oseCount,..     
2720: 20 20 20 20 20 20 20 72 65 66 20 74 6f 74 61 6c         ref total
2730: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
2740: 20 20 20 72 65 74 75 72 6e 20 74 6f 74 61 6c 43     return totalC
2750: 6f 75 6e 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ount;..    }....
2760: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
2770: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 69  rride void SetTi
2780: 6d 65 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f  meout(int nTimeo
2790: 75 74 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  utMS)..    {..  
27a0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
27b0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
27c0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
27d0: 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  te3_busy_timeout
27e0: 28 5f 73 71 6c 2c 20 6e 54 69 6d 65 6f 75 74 4d  (_sql, nTimeoutM
27f0: 53 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  S);..      if (n
2800: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
2810: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
2820: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
2830: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
2840: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
2850: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
2860: 72 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 28  rride bool Step(
2870: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
2880: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
2890: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
28a0: 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61  ode n;..      Ra
28b0: 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b  ndom rnd = null;
28c0: 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74 61  ..      uint sta
28d0: 72 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45  rttick = (uint)E
28e0: 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43  nvironment.TickC
28f0: 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e  ount;..      uin
2900: 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e  t timeout = (uin
2910: 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64  t)(stmt._command
2920: 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74  ._commandTimeout
2930: 20 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20   * 1000);....   
2940: 20 20 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d     while (true).
2950: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2960: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
2970: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
2980: 33 5f 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c  3_step(stmt._sql
2990: 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20  ite_stmt);....  
29a0: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
29b0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 52  QLiteErrorCode.R
29c0: 6f 77 29 20 72 65 74 75 72 6e 20 74 72 75 65 3b  ow) return true;
29d0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
29e0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
29f0: 64 65 2e 44 6f 6e 65 29 20 72 65 74 75 72 6e 20  de.Done) return 
2a00: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
2a10: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
2a20: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
2a30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a40: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
2a50: 43 6f 64 65 20 72 3b 0d 0a 0d 0a 20 20 20 20 20  Code r;....     
2a60: 20 20 20 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72       // An error
2a70: 20 6f 63 63 75 72 72 65 64 2c 20 61 74 74 65 6d   occurred, attem
2a80: 70 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20  pt to reset the 
2a90: 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 66 20 74  statement.  If t
2aa0: 68 65 20 72 65 73 65 74 20 77 6f 72 6b 65 64 20  he reset worked 
2ab0: 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20  because the..   
2ac0: 20 20 20 20 20 20 20 2f 2f 20 73 63 68 65 6d 61         // schema
2ad0: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 72 65   has changed, re
2ae0: 2d 74 72 79 20 74 68 65 20 73 74 65 70 20 61 67  -try the step ag
2af0: 61 69 6e 2e 20 20 49 66 20 69 74 20 65 72 72 6f  ain.  If it erro
2b00: 72 65 64 20 6f 75 72 20 62 65 63 61 75 73 65 20  red our because 
2b10: 74 68 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20  the database..  
2b20: 20 20 20 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f          // is lo
2b30: 63 6b 65 64 2c 20 74 68 65 6e 20 6b 65 65 70 20  cked, then keep 
2b40: 72 65 74 72 79 69 6e 67 20 75 6e 74 69 6c 20 74  retrying until t
2b50: 68 65 20 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f  he command timeo
2b60: 75 74 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20  ut occurs...    
2b70: 20 20 20 20 20 20 72 20 3d 20 52 65 73 65 74 28        r = Reset(
2b80: 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  stmt);....      
2b90: 20 20 20 20 69 66 20 28 72 20 3d 3d 20 53 51 4c      if (r == SQL
2ba0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
2bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
2bc0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
2bd0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
2be0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
2bf0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
2c00: 20 28 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72   ((r == SQLiteEr
2c10: 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c  rorCode.Locked |
2c20: 7c 20 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  | r == SQLiteErr
2c30: 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20  orCode.Busy) && 
2c40: 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d  stmt._command !=
2c50: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2c60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c70: 20 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d   // Keep trying.
2c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2c90: 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f  (rnd == null) //
2ca0: 20 46 69 72 73 74 20 74 69 6d 65 20 77 65 27 76   First time we'v
2cb0: 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68  e encountered th
2cc0: 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20  e lock..        
2cd0: 20 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20        rnd = new 
2ce0: 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20  Random();....   
2cf0: 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77           // If w
2d00: 65 27 76 65 20 65 78 63 65 65 64 65 64 20 74 68  e've exceeded th
2d10: 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65  e command's time
2d20: 6f 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64  out, give up and
2d30: 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d   throw an error.
2d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2d50: 28 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65  ((uint)Environme
2d60: 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73  nt.TickCount - s
2d70: 74 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f  tarttick > timeo
2d80: 75 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ut)..           
2d90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2da0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
2db0: 74 65 45 78 63 65 70 74 69 6f 6e 28 72 2c 20 47  teException(r, G
2dc0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
2dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2de0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
2df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  .              /
2e10: 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65  / Otherwise slee
2e20: 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61  p for a random a
2e30: 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70  mount of time up
2e40: 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20   to 150ms..     
2e50: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
2e60: 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64  Threading.Thread
2e70: 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28  .Sleep(rnd.Next(
2e80: 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20  1, 150));..     
2e90: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2ea0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
2eb0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2ec0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2ed0: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
2ee0: 45 72 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28  ErrorCode Reset(
2ef0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
2f00: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
2f10: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
2f20: 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  ode n;....#if !S
2f30: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
2f40: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
2f50: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
2f60: 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65  lite3_reset_inte
2f70: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
2f80: 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a  _stmt);..#else..
2f90: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
2fa0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
2fb0: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74  lite3_reset(stmt
2fc0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
2fd0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
2fe0: 20 2f 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d   // If the schem
2ff0: 61 20 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61  a changed, try a
3000: 6e 64 20 72 65 2d 70 72 65 70 61 72 65 20 69 74  nd re-prepare it
3010: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
3020: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
3030: 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20  .Schema)..      
3040: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65  {..        // Re
3050: 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73  create a dummy s
3060: 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20  tatement..      
3070: 20 20 73 74 72 69 6e 67 20 73 74 72 3b 0d 0a 20    string str;.. 
3080: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
3090: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6d  LiteStatement tm
30a0: 70 20 3d 20 50 72 65 70 61 72 65 28 6e 75 6c 6c  p = Prepare(null
30b0: 2c 20 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65  , stmt._sqlState
30c0: 6d 65 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e  ment, null, (uin
30d0: 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64  t)(stmt._command
30e0: 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74  ._commandTimeout
30f0: 20 2a 20 31 30 30 30 29 2c 20 6f 75 74 20 73 74   * 1000), out st
3100: 72 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  r))..        {..
3110: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e            // Fin
3120: 61 6c 69 7a 65 20 74 68 65 20 65 78 69 73 74 69  alize the existi
3130: 6e 67 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20  ng statement..  
3140: 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71          stmt._sq
3150: 6c 69 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73  lite_stmt.Dispos
3160: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
3170: 2f 2f 20 52 65 61 73 73 69 67 6e 20 61 20 6e 65  // Reassign a ne
3180: 77 20 73 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e  w statement poin
3190: 74 65 72 20 74 6f 20 74 68 65 20 6f 6c 64 20 73  ter to the old s
31a0: 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65  tatement and cle
31b0: 61 72 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  ar the temporary
31c0: 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20   one..          
31d0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
31e0: 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f  t = tmp._sqlite_
31f0: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  stmt;..         
3200: 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d   tmp._sqlite_stm
3210: 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  t = null;....   
3220: 20 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c         // Reappl
3230: 79 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20  y parameters..  
3240: 20 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e          stmt.Bin
3250: 64 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a  dParameters();..
3260: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3270: 20 20 20 72 65 74 75 72 6e 20 28 53 51 4c 69 74     return (SQLit
3280: 65 45 72 72 6f 72 43 6f 64 65 29 28 2d 31 29 3b  eErrorCode)(-1);
3290: 20 2f 2f 20 52 65 73 65 74 20 77 61 73 20 4f 4b   // Reset was OK
32a0: 2c 20 77 69 74 68 20 73 63 68 65 6d 61 20 63 68  , with schema ch
32b0: 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ange..      }.. 
32c0: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
32d0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
32e0: 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d  de.Locked || n =
32f0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
3300: 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20  e.Busy)..       
3310: 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a 20 20   return n;....  
3320: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
3330: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
3340: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
3350: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
3360: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
3370: 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
3380: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
3390: 72 6f 72 43 6f 64 65 2e 4f 6b 3b 20 2f 2f 20 57  rorCode.Ok; // W
33a0: 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20 73  e reset OK, no s
33b0: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a 20  chema changes.. 
33c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
33d0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
33e0: 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f  ring GetLastErro
33f0: 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  r()..    {..    
3400: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 42    return SQLiteB
3410: 61 73 65 2e 47 65 74 4c 61 73 74 45 72 72 6f 72  ase.GetLastError
3420: 28 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20  (_sql, _sql);.. 
3430: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
3440: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
3450: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 50 72  LiteStatement Pr
3460: 65 70 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e  epare(SQLiteConn
3470: 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69  ection cnn, stri
3480: 6e 67 20 73 74 72 53 71 6c 2c 20 53 51 4c 69 74  ng strSql, SQLit
3490: 65 53 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69  eStatement previ
34a0: 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75  ous, uint timeou
34b0: 74 4d 53 2c 20 6f 75 74 20 73 74 72 69 6e 67 20  tMS, out string 
34c0: 73 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20 20 20  strRemain)..    
34d0: 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 21 53 74  {..      if (!St
34e0: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
34f0: 74 79 28 73 74 72 53 71 6c 29 29 0d 0a 20 20 20  ty(strSql))..   
3500: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
3510: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
3520: 45 3a 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e  E: SQLite does n
3530: 6f 74 20 73 75 70 70 6f 72 74 20 74 68 65 20 63  ot support the c
3540: 6f 6e 63 65 70 74 20 6f 66 20 73 65 70 61 72 61  oncept of separa
3550: 74 65 20 73 63 68 65 6d 61 73 0d 0a 20 20 20 20  te schemas..    
3560: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 20      //       in 
3570: 6f 6e 65 20 64 61 74 61 62 61 73 65 3b 20 74 68  one database; th
3580: 65 72 65 66 6f 72 65 2c 20 72 65 6d 6f 76 65 20  erefore, remove 
3590: 74 68 65 20 62 61 73 65 20 73 63 68 65 6d 61 20  the base schema 
35a0: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  name..        //
35b0: 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 73         used to s
35c0: 6d 6f 6f 74 68 20 69 6e 74 65 67 72 61 74 69 6f  mooth integratio
35d0: 6e 20 77 69 74 68 20 74 68 65 20 62 61 73 65 20  n with the base 
35e0: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d 0a  .NET Framework..
35f0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
3600: 20 64 61 74 61 20 63 6c 61 73 73 65 73 2e 0d 0a   data classes...
3610: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
3620: 20 20 20 20 73 74 72 69 6e 67 20 62 61 73 65 53      string baseS
3630: 63 68 65 6d 61 4e 61 6d 65 20 3d 20 28 63 6e 6e  chemaName = (cnn
3640: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e   != null) ? cnn.
3650: 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20  _baseSchemaName 
3660: 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  : null;....     
3670: 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
3680: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 62 61 73  sNullOrEmpty(bas
3690: 65 53 63 68 65 6d 61 4e 61 6d 65 29 29 0d 0a 20  eSchemaName)).. 
36a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36b0: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
36c0: 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20  Sql.Replace(..  
36d0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
36e0: 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72  ng.Format(Cultur
36f0: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
3700: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
3710: 20 20 20 20 20 20 20 22 5b 7b 30 7d 5d 2e 22 2c         "[{0}].",
3720: 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29   baseSchemaName)
3730: 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b  , String.Empty);
3740: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  ....          st
3750: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65  rSql = strSql.Re
3760: 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  place(..        
3770: 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
3780: 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
3790: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
37a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
37b0: 20 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63 68   "{0}.", baseSch
37c0: 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67  emaName), String
37d0: 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20  .Empty);..      
37e0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
37f0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
3800: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
3810: 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 28  s =..          (
3820: 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63  cnn != null) ? c
3830: 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69 74  nn.Flags : SQLit
3840: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
3850: 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a 23 69 66  .Default;....#if
3860: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
3870: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
3880: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
3890: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
38a0: 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61 72 65  Flags.LogPrepare
38b0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
38c0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72  ctionFlags.LogPr
38d0: 65 70 61 72 65 29 0d 0a 20 20 20 20 20 20 7b 0d  epare)..      {.
38e0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28  .          if ((
38f0: 73 74 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c 29 20  strSql == null) 
3900: 7c 7c 20 28 73 74 72 53 71 6c 2e 4c 65 6e 67 74  || (strSql.Lengt
3910: 68 20 3d 3d 20 30 29 20 7c 7c 20 28 73 74 72 53  h == 0) || (strS
3920: 71 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e 67 74 68  ql.Trim().Length
3930: 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20 20 20   == 0))..       
3940: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
3950: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 22 50 72 65  .LogMessage("Pre
3960: 70 61 72 69 6e 67 20 7b 3c 6e 6f 74 68 69 6e 67  paring {<nothing
3970: 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20 20 20 20  >}...");..      
3980: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
3990: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
39a0: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72  g.LogMessage(Str
39b0: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
39c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
39d0: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
39e0: 6e 74 43 75 6c 74 75 72 65 2c 20 22 50 72 65 70  ntCulture, "Prep
39f0: 61 72 69 6e 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e  aring {{{0}}}...
3a00: 22 2c 20 73 74 72 53 71 6c 29 29 3b 0d 0a 20 20  ", strSql));..  
3a10: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
3a20: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 73 74  .      IntPtr st
3a30: 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  mt = IntPtr.Zero
3a40: 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
3a50: 70 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ptr = IntPtr.Zer
3a60: 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  o;..      int le
3a70: 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51  n = 0;..      SQ
3a80: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
3a90: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
3aa0: 65 2e 53 63 68 65 6d 61 3b 0d 0a 20 20 20 20 20  e.Schema;..     
3ab0: 20 69 6e 74 20 72 65 74 72 69 65 73 20 3d 20 30   int retries = 0
3ac0: 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  ;..      byte[] 
3ad0: 62 20 3d 20 54 6f 55 54 46 38 28 73 74 72 53 71  b = ToUTF8(strSq
3ae0: 6c 29 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e  l);..      strin
3af0: 67 20 74 79 70 65 64 65 66 73 20 3d 20 6e 75 6c  g typedefs = nul
3b00: 6c 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  l;..      SQLite
3b10: 53 74 61 74 65 6d 65 6e 74 20 63 6d 64 20 3d 20  Statement cmd = 
3b20: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 52 61 6e  null;..      Ran
3b30: 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d  dom rnd = null;.
3b40: 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74 61 72  .      uint star
3b50: 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e  ttick = (uint)En
3b60: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
3b70: 75 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 47 43  unt;....      GC
3b80: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
3b90: 47 43 48 61 6e 64 6c 65 2e 41 6c 6c 6f 63 28 62  GCHandle.Alloc(b
3ba0: 2c 20 47 43 48 61 6e 64 6c 65 54 79 70 65 2e 50  , GCHandleType.P
3bb0: 69 6e 6e 65 64 29 3b 0d 0a 20 20 20 20 20 20 49  inned);..      I
3bc0: 6e 74 50 74 72 20 70 73 71 6c 20 3d 20 68 61 6e  ntPtr psql = han
3bd0: 64 6c 65 2e 41 64 64 72 4f 66 50 69 6e 6e 65 64  dle.AddrOfPinned
3be0: 4f 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 20  Object();..     
3bf0: 20 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   try..      {.. 
3c00: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 28 6e         while ((n
3c10: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
3c20: 6f 64 65 2e 53 63 68 65 6d 61 20 7c 7c 20 6e 20  ode.Schema || n 
3c30: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
3c40: 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d  de.Locked || n =
3c50: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
3c60: 65 2e 42 75 73 79 29 20 26 26 20 72 65 74 72 69  e.Busy) && retri
3c70: 65 73 20 3c 20 33 29 0d 0a 20 20 20 20 20 20 20  es < 3)..       
3c80: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
3c90: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
3ca0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
3cb0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3cc0: 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65  te3_prepare_inte
3cd0: 72 6f 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20  rop(_sql, psql, 
3ce0: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75  b.Length - 1, ou
3cf0: 74 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 2c  t stmt, out ptr,
3d00: 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73   out len);..#els
3d10: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d  e..          n =
3d20: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
3d30: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65  hods.sqlite3_pre
3d40: 70 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c  pare(_sql, psql,
3d50: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f   b.Length - 1, o
3d60: 75 74 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72  ut stmt, out ptr
3d70: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 65  );..          le
3d80: 6e 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d  n = -1;..#endif.
3d90: 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  ...#if !NET_COMP
3da0: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
3db0: 53 54 41 54 45 4d 45 4e 54 0d 0a 20 20 20 20 20  STATEMENT..     
3dc0: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
3dd0: 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Line(String.Form
3de0: 61 74 28 22 50 72 65 70 61 72 65 20 28 7b 30 7d  at("Prepare ({0}
3df0: 29 3a 20 7b 31 7d 22 2c 20 6e 2c 20 73 74 6d 74  ): {1}", n, stmt
3e00: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  ));..#endif.... 
3e10: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d           if (n =
3e20: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
3e30: 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20  e.Schema)..     
3e40: 20 20 20 20 20 20 20 72 65 74 72 69 65 73 2b 2b         retries++
3e50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  ;..          els
3e60: 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
3e70: 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
3e80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
3e90: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3ea0: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47  String.Compare(G
3eb0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 22  etLastError(), "
3ec0: 6e 65 61 72 20 5c 22 54 59 50 45 53 5c 22 3a 20  near \"TYPES\": 
3ed0: 73 79 6e 74 61 78 20 65 72 72 6f 72 22 2c 20 53  syntax error", S
3ee0: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
3ef0: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
3f00: 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  e) == 0)..      
3f10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3f20: 20 20 20 20 20 20 20 69 6e 74 20 70 6f 73 20 3d         int pos =
3f30: 20 73 74 72 53 71 6c 2e 49 6e 64 65 78 4f 66 28   strSql.IndexOf(
3f40: 27 3b 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ';');..         
3f50: 20 20 20 20 20 69 66 20 28 70 6f 73 20 3d 3d 20       if (pos == 
3f60: 2d 31 29 20 70 6f 73 20 3d 20 73 74 72 53 71 6c  -1) pos = strSql
3f70: 2e 4c 65 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a  .Length - 1;....
3f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
3f90: 70 65 64 65 66 73 20 3d 20 73 74 72 53 71 6c 2e  pedefs = strSql.
3fa0: 53 75 62 73 74 72 69 6e 67 28 30 2c 20 70 6f 73  Substring(0, pos
3fb0: 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20   + 1);..        
3fc0: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
3fd0: 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28  trSql.Substring(
3fe0: 70 6f 73 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20  pos + 1);....   
3ff0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52 65             strRe
4000: 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20  main = "";....  
4010: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
4020: 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26  e (cmd == null &
4030: 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  & strSql.Length 
4040: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
4050: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4060: 20 20 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65         cmd = Pre
4070: 70 61 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c  pare(cnn, strSql
4080: 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65  , previous, time
4090: 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74 72 52 65  outMS, out strRe
40a0: 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  main);..        
40b0: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
40c0: 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20   strRemain;..   
40d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
40e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
40f0: 20 28 63 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a   (cmd != null)..
4100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4110: 63 6d 64 2e 53 65 74 54 79 70 65 73 28 74 79 70  cmd.SetTypes(typ
4120: 65 64 65 66 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  edefs);....     
4130: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4140: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  cmd;..          
4150: 20 20 7d 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35    }..#if (NET_35
4160: 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45   || NET_40 || NE
4170: 54 5f 34 35 29 20 26 26 20 21 50 4c 41 54 46 4f  T_45) && !PLATFO
4180: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
4190: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
41a0: 20 65 6c 73 65 20 69 66 20 28 5f 62 75 69 6c 64   else if (_build
41b0: 69 6e 67 53 63 68 65 6d 61 20 3d 3d 20 66 61 6c  ingSchema == fal
41c0: 73 65 20 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d  se && String.Com
41d0: 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f  pare(GetLastErro
41e0: 72 28 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68  r(), 0, "no such
41f0: 20 74 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48   table: TEMP.SCH
4200: 45 4d 41 22 2c 20 30 2c 20 32 36 2c 20 53 74 72  EMA", 0, 26, Str
4210: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
4220: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
4230: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
4240: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4250: 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d       strRemain =
4260: 20 22 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   "";..          
4270: 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68      _buildingSch
4280: 65 6d 61 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ema = true;..   
4290: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
42a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
42b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
42c0: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
42d0: 74 65 6e 73 69 6f 6e 73 20 65 78 74 20 3d 20 28  tensions ext = (
42e0: 28 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65  (IServiceProvide
42f0: 72 29 53 51 4c 69 74 65 46 61 63 74 6f 72 79 2e  r)SQLiteFactory.
4300: 49 6e 73 74 61 6e 63 65 29 2e 47 65 74 53 65 72  Instance).GetSer
4310: 76 69 63 65 28 74 79 70 65 6f 66 28 49 53 51 4c  vice(typeof(ISQL
4320: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
4330: 6f 6e 73 29 29 20 61 73 20 49 53 51 4c 69 74 65  ons)) as ISQLite
4340: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
4350: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4360: 20 20 20 20 20 69 66 20 28 65 78 74 20 21 3d 20       if (ext != 
4370: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
4380: 20 20 20 20 20 20 20 20 20 65 78 74 2e 42 75 69           ext.Bui
4390: 6c 64 54 65 6d 70 53 63 68 65 6d 61 28 63 6e 6e  ldTempSchema(cnn
43a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
43b0: 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64        while (cmd
43c0: 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53   == null && strS
43d0: 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  ql.Length > 0)..
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4400: 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61       cmd = Prepa
4410: 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20  re(cnn, strSql, 
4420: 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75  previous, timeou
4430: 74 4d 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61  tMS, out strRema
4440: 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  in);..          
4450: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
4460: 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20   strRemain;..   
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4490: 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20    return cmd;.. 
44a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
44c0: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
44d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
44e0: 20 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e          _buildin
44f0: 67 53 63 68 65 6d 61 20 3d 20 66 61 6c 73 65 3b  gSchema = false;
4500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4510: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
4520: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
4530: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
4540: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
4550: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c  QLiteErrorCode.L
4560: 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51  ocked || n == SQ
4570: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75  LiteErrorCode.Bu
4580: 73 79 29 20 2f 2f 20 4c 6f 63 6b 65 64 20 2d 2d  sy) // Locked --
4590: 20 64 65 6c 61 79 20 61 20 73 6d 61 6c 6c 20 61   delay a small a
45a0: 6d 6f 75 6e 74 20 62 65 66 6f 72 65 20 72 65 74  mount before ret
45b0: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
45c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
45d0: 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a  // Keep trying..
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
45f0: 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20  rnd == null) // 
4600: 46 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65  First time we've
4610: 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65   encountered the
4620: 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20   lock..         
4630: 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52       rnd = new R
4640: 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20  andom();....    
4650: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
4660: 27 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65  've exceeded the
4670: 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f   command's timeo
4680: 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20  ut, give up and 
4690: 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a  throw an error..
46a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
46b0: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
46c0: 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74  t.TickCount - st
46d0: 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75  arttick > timeou
46e0: 74 4d 53 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tMS)..          
46f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4700: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
4710: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
4720: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
4730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
4750: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
4760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4770: 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65  // Otherwise sle
4780: 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20  ep for a random 
4790: 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75  amount of time u
47a0: 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20  p to 150ms..    
47b0: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
47c0: 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61  .Threading.Threa
47d0: 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74  d.Sleep(rnd.Next
47e0: 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20  (1, 150));..    
47f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4800: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4810: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
4820: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
4830: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
4840: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
4850: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
4860: 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
4870: 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 55     strRemain = U
4880: 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c  TF8ToString(ptr,
4890: 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   len);....      
48a0: 20 20 69 66 20 28 73 74 6d 74 20 21 3d 20 49 6e    if (stmt != In
48b0: 74 50 74 72 2e 5a 65 72 6f 29 20 63 6d 64 20 3d  tPtr.Zero) cmd =
48c0: 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74 65   new SQLiteState
48d0: 6d 65 6e 74 28 74 68 69 73 2c 20 66 6c 61 67 73  ment(this, flags
48e0: 2c 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74  , new SQLiteStat
48f0: 65 6d 65 6e 74 48 61 6e 64 6c 65 28 5f 73 71 6c  ementHandle(_sql
4900: 2c 20 73 74 6d 74 29 2c 20 73 74 72 53 71 6c 2e  , stmt), strSql.
4910: 53 75 62 73 74 72 69 6e 67 28 30 2c 20 73 74 72  Substring(0, str
4920: 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 73 74 72  Sql.Length - str
4930: 52 65 6d 61 69 6e 2e 4c 65 6e 67 74 68 29 2c 20  Remain.Length), 
4940: 70 72 65 76 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20  previous);....  
4950: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64        return cmd
4960: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
4970: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
4980: 20 7b 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64   {..        hand
4990: 6c 65 2e 46 72 65 65 28 29 3b 0d 0a 20 20 20 20  le.Free();..    
49a0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69    }..    }....#i
49b0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
49c0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
49d0: 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74    protected stat
49e0: 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28  ic void LogBind(
49f0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
4a00: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e  andle handle, in
4a10: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
4a20: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
4a30: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
4a40: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
4a50: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
4a60: 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f  essage(String.Fo
4a70: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
4a80: 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74     "Binding stat
4a90: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
4aa0: 65 72 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e  er #{1} as NULL.
4ab0: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
4ac0: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
4ad0: 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d  index));..    }.
4ae0: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
4af0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67   static void Log
4b00: 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65  Bind(SQLiteState
4b10: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
4b20: 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 56 61  e, int index, Va
4b30: 6c 75 65 54 79 70 65 20 76 61 6c 75 65 29 0d 0a  lueType value)..
4b40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
4b50: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
4b60: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
4b70: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
4b80: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72  g.LogMessage(Str
4b90: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
4ba0: 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e           "Bindin
4bb0: 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20  g statement {0} 
4bc0: 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73  paramter #{1} as
4bd0: 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76   type {2} with v
4be0: 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22  alue {{{3}}}..."
4bf0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68  ,..            h
4c00: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
4c10: 65 78 2c 20 76 61 6c 75 65 2e 47 65 74 54 79 70  ex, value.GetTyp
4c20: 65 28 29 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20  e(), value));.. 
4c30: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76     }....    priv
4c40: 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
4c50: 67 20 46 6f 72 6d 61 74 44 61 74 65 54 69 6d 65  g FormatDateTime
4c60: 28 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29  (DateTime value)
4c70: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4c80: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72   StringBuilder r
4c90: 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69  esult = new Stri
4ca0: 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a  ngBuilder();....
4cb0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
4cc0: 70 70 65 6e 64 28 76 61 6c 75 65 2e 54 6f 53 74  ppend(value.ToSt
4cd0: 72 69 6e 67 28 22 79 79 79 79 2d 4d 4d 2d 64 64  ring("yyyy-MM-dd
4ce0: 54 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46  THH:mm:ss.FFFFFF
4cf0: 46 4b 22 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  FK"));..        
4d00: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20  result.Append(' 
4d10: 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73  ');..        res
4d20: 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65  ult.Append(value
4d30: 2e 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20  .Kind);..       
4d40: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27   result.Append('
4d50: 20 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65   ');..        re
4d60: 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75  sult.Append(valu
4d70: 65 2e 54 69 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20  e.Ticks);....   
4d80: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
4d90: 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  lt.ToString();..
4da0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f      }....    pro
4db0: 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f  tected static vo
4dc0: 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74  id LogBind(SQLit
4dd0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
4de0: 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64   handle, int ind
4df0: 65 78 2c 20 44 61 74 65 54 69 6d 65 20 76 61 6c  ex, DateTime val
4e00: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
4e10: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
4e20: 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65  eIntPtr = handle
4e30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
4e40: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
4e50: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
4e60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42  ..            "B
4e70: 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  inding statement
4e80: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b   {0} paramter #{
4e90: 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77  1} as type {2} w
4ea0: 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d  ith value {{{3}}
4eb0: 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  }...",..        
4ec0: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
4ed0: 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28  , index, typeof(
4ee0: 44 61 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61  DateTime), Forma
4ef0: 74 44 61 74 65 54 69 6d 65 28 76 61 6c 75 65 29  tDateTime(value)
4f00: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
4f10: 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74    protected stat
4f20: 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28  ic void LogBind(
4f30: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
4f40: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e  andle handle, in
4f50: 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20  t index, string 
4f60: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
4f70: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
4f80: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
4f90: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
4fa0: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
4fb0: 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  sage(String.Form
4fc0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
4fd0: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
4fe0: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
4ff0: 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32   #{1} as type {2
5000: 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b  } with value {{{
5010: 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  3}}}...",..     
5020: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74         handleInt
5030: 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65  Ptr, index, type
5040: 6f 66 28 53 74 72 69 6e 67 29 2c 20 28 76 61 6c  of(String), (val
5050: 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61  ue != null) ? va
5060: 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29  lue : "<null>"))
5070: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5080: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
5090: 74 72 69 6e 67 20 54 6f 48 65 78 61 64 65 63 69  tring ToHexadeci
50a0: 6d 61 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20 20  malString(..    
50b0: 20 20 20 20 62 79 74 65 5b 5d 20 61 72 72 61 79      byte[] array
50c0: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
50d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
50e0: 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  array == null)..
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
5100: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
5110: 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
5120: 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  r result = new S
5130: 74 72 69 6e 67 42 75 69 6c 64 65 72 28 61 72 72  tringBuilder(arr
5140: 61 79 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d  ay.Length * 2);.
5150: 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c  ...        int l
5160: 65 6e 67 74 68 20 3d 20 61 72 72 61 79 2e 4c 65  ength = array.Le
5170: 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ngth;....       
5180: 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20   for (int index 
5190: 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e  = 0; index < len
51a0: 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20  gth; index++).. 
51b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
51c0: 74 2e 41 70 70 65 6e 64 28 61 72 72 61 79 5b 69  t.Append(array[i
51d0: 6e 64 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22  ndex].ToString("
51e0: 78 32 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  x2"));....      
51f0: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e    return result.
5200: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
5210: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63   }....    protec
5220: 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20  ted static void 
5230: 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74  LogBind(SQLiteSt
5240: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
5250: 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c  ndle, int index,
5260: 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a   byte[] value)..
5270: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
5280: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
5290: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
52a0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
52b0: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72  g.LogMessage(Str
52c0: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
52d0: 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e           "Bindin
52e0: 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20  g statement {0} 
52f0: 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73  paramter #{1} as
5300: 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76   type {2} with v
5310: 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22  alue {{{3}}}..."
5320: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68  ,..            h
5330: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
5340: 65 78 2c 20 74 79 70 65 6f 66 28 42 79 74 65 5b  ex, typeof(Byte[
5350: 5d 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75  ]), (value != nu
5360: 6c 6c 29 20 3f 20 54 6f 48 65 78 61 64 65 63 69  ll) ? ToHexadeci
5370: 6d 61 6c 53 74 72 69 6e 67 28 76 61 6c 75 65 29  malString(value)
5380: 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a   : "<null>"));..
5390: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
53a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
53b0: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
53c0: 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74  _Double(SQLiteSt
53d0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
53e0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
53f0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
5400: 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c  ndex, double val
5410: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
5420: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
5430: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
5440: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
5450: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
5460: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
5470: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
5480: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
5490: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
54a0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
54b0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
54c0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
54d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
54e0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
54f0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
5500: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
5510: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
5520: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
5530: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
5540: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
5550: 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20  _double(handle, 
5560: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
5570: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 53  #else..        S
5580: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
5590: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
55a0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
55b0: 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  ind_double_inter
55c0: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
55d0: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
55e0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69  endif..        i
55f0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
5600: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
5610: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
5620: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
5630: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
5640: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
5650: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
5660: 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69 74 65  ind_Int32(SQLite
5670: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
5680: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
5690: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
56a0: 20 69 6e 64 65 78 2c 20 69 6e 74 20 76 61 6c 75   index, int valu
56b0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
56c0: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
56d0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
56e0: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
56f0: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
5700: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
5710: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
5720: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
5730: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
5740: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
5750: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5760: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
5770: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5780: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
5790: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
57a0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
57b0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
57c0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
57d0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
57e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
57f0: 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68 61 6e 64  e3_bind_int(hand
5800: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
5810: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
5820: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
5830: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
5840: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
5850: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
5860: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
5870: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
5880: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
5890: 5f 55 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74  _UInt32(SQLiteSt
58a0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
58b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
58c0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
58d0: 6e 64 65 78 2c 20 75 69 6e 74 20 76 61 6c 75 65  ndex, uint value
58e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
58f0: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
5900: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
5910: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
5920: 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  mt;....#if !PLAT
5930: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
5940: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
5950: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
5960: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
5970: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
5980: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
5990: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
59a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
59b0: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
59c0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
59d0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
59e0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
59f0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
5a00: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
5a10: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5a20: 33 5f 62 69 6e 64 5f 75 69 6e 74 28 68 61 6e 64  3_bind_uint(hand
5a30: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
5a40: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
5a50: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
5a60: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
5a70: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
5a80: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
5a90: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
5aa0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
5ab0: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
5ac0: 5f 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61  _Int64(SQLiteSta
5ad0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
5ae0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
5af0: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
5b00: 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29  dex, long value)
5b10: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
5b20: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
5b30: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
5b40: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
5b50: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
5b60: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
5b70: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
5b80: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
5b90: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5ba0: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
5bb0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
5bc0: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
5bd0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5be0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
5bf0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
5c00: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
5c10: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
5c20: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
5c30: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5c40: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
5c50: 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  t64(handle, inde
5c60: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  x, value);..#els
5c70: 65 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  e..        SQLit
5c80: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
5c90: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
5ca0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
5cb0: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61  int64_interop(ha
5cc0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
5cd0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
5ce0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
5cf0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
5d00: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
5d10: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
5d20: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
5d30: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
5d40: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
5d50: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55  ride void Bind_U
5d60: 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74  Int64(SQLiteStat
5d70: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
5d80: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
5d90: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
5da0: 65 78 2c 20 75 6c 6f 6e 67 20 76 61 6c 75 65 29  ex, ulong value)
5db0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
5dc0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
5dd0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
5de0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
5df0: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
5e00: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
5e10: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
5e20: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
5e30: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5e40: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
5e50: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
5e60: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
5e70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5e80: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
5e90: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
5ea0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
5eb0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
5ec0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
5ed0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5ee0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69  .sqlite3_bind_ui
5ef0: 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64  nt64(handle, ind
5f00: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ex, value);..#el
5f10: 73 65 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  se..        SQLi
5f20: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
5f30: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
5f40: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
5f50: 5f 75 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  _uint64_interop(
5f60: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
5f70: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ef value);..#end
5f80: 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  if..        if (
5f90: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
5fa0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
5fb0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
5fc0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
5fd0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
5fe0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
5ff0: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
6000: 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74  _Text(SQLiteStat
6010: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
6020: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6030: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
6040: 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ex, string value
6050: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
6060: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
6070: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
6080: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
6090: 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  mt;....#if !PLAT
60a0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
60b0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
60c0: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
60d0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
60e0: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
60f0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6100: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
6110: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6120: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
6130: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
6140: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
6150: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
6160: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
6170: 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 23  TF8(value);....#
6180: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
6190: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
61a0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
61b0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
61c0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
61d0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
61e0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
61f0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
6200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
6210: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
6220: 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20  ex, b);..       
6230: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
6240: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
6250: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
6260: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
6270: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
6280: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
6290: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
62a0: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
62b0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
62c0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
62d0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
62e0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
62f0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
6300: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
6310: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
6320: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74  de void Bind_Dat
6330: 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eTime(SQLiteStat
6340: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
6350: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6360: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
6370: 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29  ex, DateTime dt)
6380: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
6390: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
63a0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
63b0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
63c0: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
63d0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
63e0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
63f0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
6400: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6410: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
6420: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6430: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
6440: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6450: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
6460: 6c 65 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d  le, index, dt);.
6470: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
6480: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 77  if....        sw
6490: 69 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46  itch (_datetimeF
64a0: 6f 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20  ormat)..        
64b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
64c0: 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f  ase SQLiteDateFo
64d0: 72 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20  rmats.Ticks:..  
64e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
64f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6500: 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20       long value 
6510: 3d 20 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 23  = dt.Ticks;....#
6520: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
6530: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
6540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6550: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
6560: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6570: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
6580: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
6590: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
65a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
65b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
65c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65d0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
65e0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
65f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6600: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
6620: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
6630: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6640: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
6650: 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c  nd_int64(handle,
6660: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
6670: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
6680: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
6690: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
66a0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
66b0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
66c0: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68  _int64_interop(h
66d0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
66e0: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69  f value);..#endi
66f0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
6700: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
6710: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
6720: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
6730: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
6740: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
6750: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6760: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
6770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
6780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
6790: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
67a0: 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79 3a 0d  mats.JulianDay:.
67b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
67c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
67d0: 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76          double v
67e0: 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69 61 6e 44  alue = ToJulianD
67f0: 61 79 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21  ay(dt);....#if !
6800: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
6810: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
6820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6830: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
6840: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6850: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
6860: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6870: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
6880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6890: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
68a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67               Log
68b0: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
68c0: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
68d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
68f0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
6900: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
6910: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6920: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  s.sqlite3_bind_d
6930: 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69 6e  ouble(handle, in
6940: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  dex, value);..#e
6950: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
6960: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
6970: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
6980: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6990: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f  .sqlite3_bind_do
69a0: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e  uble_interop(han
69b0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
69c0: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
69d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
69e0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
69f0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
6a00: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
6a10: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
6a20: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
6a30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6a40: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6a60: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
6a70: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
6a80: 74 73 2e 55 6e 69 78 45 70 6f 63 68 3a 0d 0a 20  ts.UnixEpoch:.. 
6a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
6aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6ab0: 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65        long value
6ac0: 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74   = Convert.ToInt
6ad0: 36 34 28 64 74 2e 53 75 62 74 72 61 63 74 28 55  64(dt.Subtract(U
6ae0: 6e 69 78 45 70 6f 63 68 29 2e 54 6f 74 61 6c 53  nixEpoch).TotalS
6af0: 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a 23 69 66 20  econds);....#if 
6b00: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
6b10: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
6b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b30: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
6b40: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6b50: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
6b60: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6b70: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
6b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f                Lo
6bb0: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
6bc0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
6bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6be0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
6bf0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
6c00: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
6c10: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6c20: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
6c30: 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e  int64(handle, in
6c40: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  dex, value);..#e
6c50: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
6c60: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
6c70: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
6c80: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6c90: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
6ca0: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
6cb0: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
6cc0: 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  alue);..#endif..
6cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ce0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
6cf0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
6d00: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
6d10: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
6d20: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
6d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d40: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
6d50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6d60: 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75             defau
6d70: 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt:..           
6d80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6d90: 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
6da0: 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 64 74  [] b = ToUTF8(dt
6db0: 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  );....#if !PLATF
6dc0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
6dd0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
6de0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66            if ((f
6df0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
6e00: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
6e10: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
6e20: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
6e30: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
6e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e60: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
6e70: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
6e80: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6e90: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
6ea0: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  f....           
6eb0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
6ec0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
6ed0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6ee0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65  .sqlite3_bind_te
6ef0: 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  xt(handle, index
6f00: 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  , b, b.Length - 
6f10: 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  1, (IntPtr)(-1))
6f20: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6f30: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
6f40: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
6f50: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
6f60: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
6f70: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
6f80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6f90: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
6fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
6fb0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
6fc0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
6fd0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
6fe0: 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69 74   Bind_Blob(SQLit
6ff0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
7000: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7010: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
7020: 74 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20  t index, byte[] 
7030: 62 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20 20 7b  blobData)..    {
7040: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
7050: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
7060: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
7070: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23  qlite_stmt;....#
7080: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
7090: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
70a0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
70b0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
70c0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
70d0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
70e0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
70f0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
7100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
7110: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
7120: 65 78 2c 20 62 6c 6f 62 44 61 74 61 29 3b 0d 0a  ex, blobData);..
7130: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
7140: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  f....        SQL
7150: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
7160: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
7170: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
7180: 64 5f 62 6c 6f 62 28 68 61 6e 64 6c 65 2c 20 69  d_blob(handle, i
7190: 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20  ndex, blobData, 
71a0: 62 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c  blobData.Length,
71b0: 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
71c0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
71d0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
71e0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
71f0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
7200: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
7210: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
7220: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
7230: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75  ide void Bind_Nu
7240: 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ll(SQLiteStateme
7250: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
7260: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
7270: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29  lags, int index)
7280: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
7290: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
72a0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
72b0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
72c0: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
72d0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
72e0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
72f0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
7300: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7310: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
7320: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7330: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
7340: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7350: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
7360: 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  le, index);..   
7370: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
7380: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
7390: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
73a0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
73b0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e  s.sqlite3_bind_n
73c0: 75 6c 6c 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ull(handle, inde
73d0: 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  x);..        if 
73e0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
73f0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
7400: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
7410: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
7420: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
7430: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
7440: 76 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64  verride int Bind
7450: 5f 50 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c 69  _ParamCount(SQLi
7460: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
7470: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
7480: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a  onFlags flags)..
7490: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
74a0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
74b0: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
74c0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
74d0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 76 61  ..        int va
74e0: 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  lue = UnsafeNati
74f0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
7500: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
7510: 5f 63 6f 75 6e 74 28 68 61 6e 64 6c 65 29 3b 0d  _count(handle);.
7520: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
7530: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
7540: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
7550: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
7560: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
7570: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
7580: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7590: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
75a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
75b0: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
75c0: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
75d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
75e0: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
75f0: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
7600: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7610: 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30     "Statement {0
7620: 7d 20 70 61 72 61 6d 74 65 72 20 63 6f 75 6e 74  } paramter count
7630: 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20   is {1}.",..    
7640: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
7650: 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c 75 65 29  leIntPtr, value)
7660: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
7670: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
7680: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
7690: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
76a0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
76b0: 74 72 69 6e 67 20 42 69 6e 64 5f 50 61 72 61 6d  tring Bind_Param
76c0: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
76d0: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
76e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
76f0: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
7700: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
7710: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
7720: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
7730: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
7740: 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 73 74  tmt;..        st
7750: 72 69 6e 67 20 6e 61 6d 65 3b 0d 0a 0d 0a 23 69  ring name;....#i
7760: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
7770: 52 44 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  RD..        int 
7780: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 6e 61  len;..        na
7790: 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  me = UTF8ToStrin
77a0: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
77b0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
77c0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
77d0: 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  e_interop(handle
77e0: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e  , index, out len
77f0: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
7800: 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20  .        name = 
7810: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
7820: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7830: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
7840: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 68 61 6e  rameter_name(han
7850: 64 6c 65 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  dle, index), -1)
7860: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66  ;..#endif....#if
7870: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
7880: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
7890: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
78a0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
78b0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
78c0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
78d0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
78e0: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
78f0: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
7900: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
7910: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
7920: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
7930: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72  g.LogMessage(Str
7940: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
7950: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74               "St
7960: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
7970: 6d 74 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20 69  mter #{1} name i
7980: 73 20 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20 20  s {{{2}}}.",..  
7990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
79a0: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65  ndleIntPtr, inde
79b0: 78 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20 20  x, name));..    
79c0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
79d0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
79e0: 6e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  name;..    }....
79f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
7a00: 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50  rride int Bind_P
7a10: 61 72 61 6d 49 6e 64 65 78 28 53 51 4c 69 74 65  aramIndex(SQLite
7a20: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
7a30: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7a40: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 73 74 72  Flags flags, str
7a50: 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65 29 0d 0a  ing paramName)..
7a60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
7a70: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
7a80: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
7a90: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
7aa0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e  ..        int in
7ab0: 64 65 78 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  dex = UnsafeNati
7ac0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
7ad0: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
7ae0: 5f 69 6e 64 65 78 28 68 61 6e 64 6c 65 2c 20 54  _index(handle, T
7af0: 6f 55 54 46 38 28 70 61 72 61 6d 4e 61 6d 65 29  oUTF8(paramName)
7b00: 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  );....#if !PLATF
7b10: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
7b20: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
7b30: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
7b40: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7b50: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
7b60: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7b70: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
7b80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7b90: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
7ba0: 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65  eIntPtr = handle
7bb0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
7bc0: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
7bd0: 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72  ssage(String.For
7be0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
7bf0: 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74        "Statement
7c00: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 69 6e   {0} paramter in
7c10: 64 65 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31  dex of name {{{1
7c20: 7d 7d 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a  }}} is #{2}.",..
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c40: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70 61  handleIntPtr, pa
7c50: 72 61 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29  ramName, index))
7c60: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
7c70: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
7c80: 72 65 74 75 72 6e 20 69 6e 64 65 78 3b 0d 0a 20  return index;.. 
7c90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
7ca0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
7cb0: 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51  t ColumnCount(SQ
7cc0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
7cd0: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
7ce0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
7cf0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
7d00: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
7d10: 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
7d20: 74 6d 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  tmt);..    }....
7d30: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
7d40: 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
7d50: 75 6d 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  umnName(SQLiteSt
7d60: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
7d70: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
7d80: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
7d90: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
7da0: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74   len;..      ret
7db0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
7dc0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
7dd0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
7de0: 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  umn_name_interop
7df0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
7e00: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c  mt, index, out l
7e10: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
7e20: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
7e30: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
7e40: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7e50: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
7e60: 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  name(stmt._sqlit
7e70: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e_stmt, index), 
7e80: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
7e90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
7ea0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70  nal override Typ
7eb0: 65 41 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e  eAffinity Column
7ec0: 41 66 66 69 6e 69 74 79 28 53 51 4c 69 74 65 53  Affinity(SQLiteS
7ed0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
7ee0: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
7ef0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
7f00: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
7f10: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
7f20: 6e 5f 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c  n_type(stmt._sql
7f30: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
7f40: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
7f50: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
7f60: 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54  e string ColumnT
7f70: 79 70 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ype(SQLiteStatem
7f80: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
7f90: 64 65 78 2c 20 6f 75 74 20 54 79 70 65 41 66 66  dex, out TypeAff
7fa0: 69 6e 69 74 79 20 6e 41 66 66 69 6e 69 74 79 29  inity nAffinity)
7fb0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
7fc0: 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66 20 21 53 51  nt len;..#if !SQ
7fd0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
7fe0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20       IntPtr p = 
7ff0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8000: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
8010: 6d 6e 5f 64 65 63 6c 74 79 70 65 5f 69 6e 74 65  mn_decltype_inte
8020: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
8030: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
8040: 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  t len);..#else..
8050: 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d        len = -1;.
8060: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20  .      IntPtr p 
8070: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
8080: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
8090: 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73 74  lumn_decltype(st
80a0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
80b0: 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66   index);..#endif
80c0: 0d 0a 20 20 20 20 20 20 6e 41 66 66 69 6e 69 74  ..      nAffinit
80d0: 79 20 3d 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  y = ColumnAffini
80e0: 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  ty(stmt, index);
80f0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20  ....      if (p 
8100: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20  != IntPtr.Zero) 
8110: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
8120: 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20  ing(p, len);..  
8130: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
8140: 7b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  {..        strin
8150: 67 5b 5d 20 61 72 20 3d 20 73 74 6d 74 2e 54 79  g[] ar = stmt.Ty
8160: 70 65 44 65 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a  peDefinitions;..
8170: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 20 21          if (ar !
8180: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
8190: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
81a0: 20 28 69 6e 64 65 78 20 3c 20 61 72 2e 4c 65 6e   (index < ar.Len
81b0: 67 74 68 20 26 26 20 61 72 5b 69 6e 64 65 78 5d  gth && ar[index]
81c0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
81d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72         return ar
81e0: 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20  [index];..      
81f0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74    }..        ret
8200: 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  urn String.Empty
8210: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 73  ;....        //s
8220: 77 69 74 63 68 20 28 6e 41 66 66 69 6e 69 74 79  witch (nAffinity
8230: 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a  )..        //{..
8240: 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65          //  case
8250: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
8260: 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t64:..        //
8270: 20 20 20 20 72 65 74 75 72 6e 20 22 42 49 47 49      return "BIGI
8280: 4e 54 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  NT";..        //
8290: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
82a0: 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20  ity.Double:..   
82b0: 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72       //    retur
82c0: 6e 20 22 44 4f 55 42 4c 45 22 3b 0d 0a 20 20 20  n "DOUBLE";..   
82d0: 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79       //  case Ty
82e0: 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a  peAffinity.Blob:
82f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
8300: 72 65 74 75 72 6e 20 22 42 4c 4f 42 22 3b 0d 0a  return "BLOB";..
8310: 20 20 20 20 20 20 20 20 2f 2f 20 20 64 65 66 61          //  defa
8320: 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ult:..        //
8330: 20 20 20 20 72 65 74 75 72 6e 20 22 54 45 58 54      return "TEXT
8340: 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7d 0d  ";..        //}.
8350: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
8360: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
8370: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c  override int Col
8380: 75 6d 6e 49 6e 64 65 78 28 53 51 4c 69 74 65 53  umnIndex(SQLiteS
8390: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73  tatement stmt, s
83a0: 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65  tring columnName
83b0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
83c0: 69 6e 74 20 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f  int x = ColumnCo
83d0: 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20  unt(stmt);....  
83e0: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d      for (int n =
83f0: 20 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d   0; n < x; n++).
8400: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
8410: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d    if (String.Com
8420: 70 61 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c  pare(columnName,
8430: 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d 74   ColumnName(stmt
8440: 2c 20 6e 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70  , n), StringComp
8450: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
8460: 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d  noreCase) == 0).
8470: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
8480: 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  n n;..      }.. 
8490: 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d       return -1;.
84a0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
84b0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
84c0: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69  string ColumnOri
84d0: 67 69 6e 61 6c 4e 61 6d 65 28 53 51 4c 69 74 65  ginalName(SQLite
84e0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
84f0: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
8500: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
8510: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
8520: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72  nt len;..      r
8530: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
8540: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
8550: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
8560: 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
8570: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
8580: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
8590: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
85a0: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
85b0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
85c0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
85d0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
85e0: 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f  3_column_origin_
85f0: 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  name(stmt._sqlit
8600: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e_stmt, index), 
8610: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
8620: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
8630: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
8640: 69 6e 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61  ing ColumnDataba
8650: 73 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61  seName(SQLiteSta
8660: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
8670: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
8680: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
8690: 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
86a0: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  len;..      retu
86b0: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
86c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
86d0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
86e0: 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
86f0: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
8700: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
8710: 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e  x, out len), len
8720: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
8730: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
8740: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
8750: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8760: 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
8770: 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69  _name(stmt._sqli
8780: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
8790: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   -1);..#endif.. 
87a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
87b0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
87c0: 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65  ring ColumnTable
87d0: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
87e0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
87f0: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
8800: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
8810: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
8820: 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n;..      return
8830: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
8840: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
8850: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
8860: 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65  _table_name_inte
8870: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
8880: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
8890: 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  t len), len);..#
88a0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
88b0: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
88c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
88d0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
88e0: 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74  mn_table_name(st
88f0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
8900: 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23   index), -1);..#
8910: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
8920: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
8930: 72 72 69 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d  rride void Colum
8940: 6e 4d 65 74 61 44 61 74 61 28 73 74 72 69 6e 67  nMetaData(string
8950: 20 64 61 74 61 42 61 73 65 2c 20 73 74 72 69 6e   dataBase, strin
8960: 67 20 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20  g table, string 
8970: 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 73 74 72 69  column, out stri
8980: 6e 67 20 64 61 74 61 54 79 70 65 2c 20 6f 75 74  ng dataType, out
8990: 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53   string collateS
89a0: 65 71 75 65 6e 63 65 2c 20 6f 75 74 20 62 6f 6f  equence, out boo
89b0: 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 62  l notNull, out b
89c0: 6f 6f 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20  ool primaryKey, 
89d0: 6f 75 74 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63  out bool autoInc
89e0: 72 65 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a  rement)..    {..
89f0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 64 61 74        IntPtr dat
8a00: 61 54 79 70 65 50 74 72 3b 0d 0a 20 20 20 20 20  aTypePtr;..     
8a10: 20 49 6e 74 50 74 72 20 63 6f 6c 6c 53 65 71 50   IntPtr collSeqP
8a20: 74 72 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  tr;..      int n
8a30: 6e 6f 74 4e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  notNull;..      
8a40: 69 6e 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 3b  int nprimaryKey;
8a50: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 61 75 74  ..      int naut
8a60: 6f 49 6e 63 3b 0d 0a 20 20 20 20 20 20 53 51 4c  oInc;..      SQL
8a70: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d  iteErrorCode n;.
8a80: 0a 20 20 20 20 20 20 69 6e 74 20 64 74 4c 65 6e  .      int dtLen
8a90: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 73 4c  ;..      int csL
8aa0: 65 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49  en;....#if !SQLI
8ab0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
8ac0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
8ad0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8ae0: 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f  e3_table_column_
8af0: 6d 65 74 61 64 61 74 61 5f 69 6e 74 65 72 6f 70  metadata_interop
8b00: 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61  (_sql, ToUTF8(da
8b10: 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38 28  taBase), ToUTF8(
8b20: 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28 63  table), ToUTF8(c
8b30: 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61  olumn), out data
8b40: 54 79 70 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c  TypePtr, out col
8b50: 6c 53 65 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f  lSeqPtr, out nno
8b60: 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d  tNull, out nprim
8b70: 61 72 79 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74  aryKey, out naut
8b80: 6f 49 6e 63 2c 20 6f 75 74 20 64 74 4c 65 6e 2c  oInc, out dtLen,
8b90: 20 6f 75 74 20 63 73 4c 65 6e 29 3b 0d 0a 23 65   out csLen);..#e
8ba0: 6c 73 65 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e  lse..      dtLen
8bb0: 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 63 73   = -1;..      cs
8bc0: 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 20  Len = -1;....   
8bd0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
8be0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8bf0: 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f  e3_table_column_
8c00: 6d 65 74 61 64 61 74 61 28 5f 73 71 6c 2c 20 54  metadata(_sql, T
8c10: 6f 55 54 46 38 28 64 61 74 61 42 61 73 65 29 2c  oUTF8(dataBase),
8c20: 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c 20   ToUTF8(table), 
8c30: 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20  ToUTF8(column), 
8c40: 6f 75 74 20 64 61 74 61 54 79 70 65 50 74 72 2c  out dataTypePtr,
8c50: 20 6f 75 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c   out collSeqPtr,
8c60: 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f   out nnotNull, o
8c70: 75 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20  ut nprimaryKey, 
8c80: 6f 75 74 20 6e 61 75 74 6f 49 6e 63 29 3b 0d 0a  out nautoInc);..
8c90: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66  #endif..      if
8ca0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
8cb0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
8cc0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
8cd0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
8ce0: 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  rror());....    
8cf0: 20 20 64 61 74 61 54 79 70 65 20 3d 20 55 54 46    dataType = UTF
8d00: 38 54 6f 53 74 72 69 6e 67 28 64 61 74 61 54 79  8ToString(dataTy
8d10: 70 65 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d 0a  pePtr, dtLen);..
8d20: 20 20 20 20 20 20 63 6f 6c 6c 61 74 65 53 65 71        collateSeq
8d30: 75 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74  uence = UTF8ToSt
8d40: 72 69 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72 2c  ring(collSeqPtr,
8d50: 20 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20   csLen);....    
8d60: 20 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e 6f    notNull = (nno
8d70: 74 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20 20  tNull == 1);..  
8d80: 20 20 20 20 70 72 69 6d 61 72 79 4b 65 79 20 3d      primaryKey =
8d90: 20 28 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 3d   (nprimaryKey ==
8da0: 20 31 29 3b 0d 0a 20 20 20 20 20 20 61 75 74 6f   1);..      auto
8db0: 49 6e 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61 75  Increment = (nau
8dc0: 74 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20 20  toInc == 1);..  
8dd0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
8de0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75  nal override dou
8df0: 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 53 51  ble GetDouble(SQ
8e00: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
8e10: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
8e20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75      {..      dou
8e30: 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20  ble value;..#if 
8e40: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
8e50: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
8e60: 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65    value = Unsafe
8e70: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
8e80: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
8e90: 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ble(stmt._sqlite
8ea0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
8eb0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73  #else..      Uns
8ec0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8ed0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
8ee0: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73  double_interop(s
8ef0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8f00: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c  , index, out val
8f10: 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ue);..#endif..  
8f20: 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65      return value
8f30: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
8f40: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
8f50: 65 20 69 6e 74 20 47 65 74 49 6e 74 33 32 28 53  e int GetInt32(S
8f60: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
8f70: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
8f80: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
8f90: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
8fa0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8fb0: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d 74  _column_int(stmt
8fc0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
8fd0: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ndex);..    }...
8fe0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
8ff0: 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 49  erride long GetI
9000: 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65  nt64(SQLiteState
9010: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
9020: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
9030: 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 3b 0d      long value;.
9040: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
9050: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
9060: 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55  .      value = U
9070: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9080: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
9090: 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e 5f 73 71  n_int64(stmt._sq
90a0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
90b0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
90c0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
90d0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
90e0: 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  umn_int64_intero
90f0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
9100: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
9110: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
9120: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61  .      return va
9130: 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  lue;..    }.... 
9140: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
9150: 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 54  ride string GetT
9160: 65 78 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ext(SQLiteStatem
9170: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
9180: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
9190: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
91a0: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
91b0: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
91c0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
91d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
91e0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
91f0: 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d  text_interop(stm
9200: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
9210: 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c  index, out len),
9220: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
9230: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
9240: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
9250: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
9260: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
9270: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
9280: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b  mt, index), -1);
9290: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
92a0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
92b0: 6f 76 65 72 72 69 64 65 20 44 61 74 65 54 69 6d  override DateTim
92c0: 65 20 47 65 74 44 61 74 65 54 69 6d 65 28 53 51  e GetDateTime(SQ
92d0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
92e0: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
92f0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
9300: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
9310: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
9320: 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65     return ToDate
9330: 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76  Time(UnsafeNativ
9340: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9350: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74  _column_text_int
9360: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
9370: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
9380: 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ut len), len);..
9390: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
93a0: 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55  urn ToDateTime(U
93b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
93c0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
93d0: 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c  n_text(stmt._sql
93e0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
93f0: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
9400: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
9410: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
9420: 6f 6e 67 20 47 65 74 42 79 74 65 73 28 53 51 4c  ong GetBytes(SQL
9430: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
9440: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e  t, int index, in
9450: 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62  t nDataOffset, b
9460: 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74  yte[] bDest, int
9470: 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65   nStart, int nLe
9480: 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ngth)..    {..  
9490: 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55      int nlen = U
94a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
94b0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
94c0: 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71  n_bytes(stmt._sq
94d0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
94e0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49  );....      // I
94f0: 66 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e  f no destination
9500: 20 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20   buffer, return 
9510: 74 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e  the size needed.
9520: 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73  ..      if (bDes
9530: 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
9540: 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20  n nlen;....     
9550: 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e   int nCopied = n
9560: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
9570: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
9580: 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65  Start > bDest.Le
9590: 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20  ngth) nCopied = 
95a0: 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e  bDest.Length - n
95b0: 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66  Start;..      if
95c0: 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74   (nCopied + nDat
95d0: 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20  aOffset > nlen) 
95e0: 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d  nCopied = nlen -
95f0: 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d   nDataOffset;...
9600: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
9610: 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b  ed > 0)..      {
9620: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
9630: 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74   ptr = UnsafeNat
9640: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9650: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73  e3_column_blob(s
9660: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
9670: 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
9680: 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70       Marshal.Cop
9690: 79 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54  y((IntPtr)(ptr.T
96a0: 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61  oInt64() + nData
96b0: 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20  Offset), bDest, 
96c0: 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29  nStart, nCopied)
96d0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
96e0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d    else..      {.
96f0: 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64  .        nCopied
9700: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a   = 0;..      }..
9710: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e  ..      return n
9720: 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a  Copied;..    }..
9730: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
9740: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
9750: 43 68 61 72 73 28 53 51 4c 69 74 65 53 74 61 74  Chars(SQLiteStat
9760: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
9770: 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61  index, int nData
9780: 4f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62  Offset, char[] b
9790: 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74  Dest, int nStart
97a0: 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a  , int nLength)..
97b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
97c0: 20 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e   nlen;..      in
97d0: 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e  t nCopied = nLen
97e0: 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 74  gth;....      st
97f0: 72 69 6e 67 20 73 74 72 20 3d 20 47 65 74 54 65  ring str = GetTe
9800: 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  xt(stmt, index);
9810: 0d 0a 20 20 20 20 20 20 6e 6c 65 6e 20 3d 20 73  ..      nlen = s
9820: 74 72 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  tr.Length;....  
9830: 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d      if (bDest ==
9840: 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c   null) return nl
9850: 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  en;....      if 
9860: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72  (nCopied + nStar
9870: 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  t > bDest.Length
9880: 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73  ) nCopied = bDes
9890: 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72  t.Length - nStar
98a0: 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  t;..      if (nC
98b0: 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66  opied + nDataOff
98c0: 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70  set > nlen) nCop
98d0: 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61  ied = nlen - nDa
98e0: 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20  taOffset;....   
98f0: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e     if (nCopied >
9900: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 73 74 72   0)..        str
9910: 2e 43 6f 70 79 54 6f 28 6e 44 61 74 61 4f 66 66  .CopyTo(nDataOff
9920: 73 65 74 2c 20 62 44 65 73 74 2c 20 6e 53 74 61  set, bDest, nSta
9930: 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20  rt, nCopied);.. 
9940: 20 20 20 20 20 65 6c 73 65 20 6e 43 6f 70 69 65       else nCopie
9950: 64 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  d = 0;....      
9960: 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d  return nCopied;.
9970: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
9980: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
9990: 62 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69  bool IsNull(SQLi
99a0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
99b0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
99c0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
99d0: 6e 20 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  n (ColumnAffinit
99e0: 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 3d  y(stmt, index) =
99f0: 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e  = TypeAffinity.N
9a00: 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ull);..    }....
9a10: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9a20: 72 72 69 64 65 20 69 6e 74 20 41 67 67 72 65 67  rride int Aggreg
9a30: 61 74 65 43 6f 75 6e 74 28 49 6e 74 50 74 72 20  ateCount(IntPtr 
9a40: 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d  context)..    {.
9a50: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
9a60: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9a70: 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67  s.sqlite3_aggreg
9a80: 61 74 65 5f 63 6f 75 6e 74 28 63 6f 6e 74 65 78  ate_count(contex
9a90: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
9aa0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
9ab0: 69 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 46  ide void CreateF
9ac0: 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67 20 73  unction(string s
9ad0: 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20  trFunction, int 
9ae0: 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64  nArgs, bool need
9af0: 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65 43  CollSeq, SQLiteC
9b00: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53 51  allback func, SQ
9b10: 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e  LiteCallback fun
9b20: 63 73 74 65 70 2c 20 53 51 4c 69 74 65 46 69 6e  cstep, SQLiteFin
9b30: 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66  alCallback funcf
9b40: 69 6e 61 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  inal)..    {..  
9b50: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
9b60: 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  ode n;....#if !S
9b70: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
9b80: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
9b90: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9ba0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
9bb0: 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73  ction_interop(_s
9bc0: 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75  ql, ToUTF8(strFu
9bd0: 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20  nction), nArgs, 
9be0: 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  4, IntPtr.Zero, 
9bf0: 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20  func, funcstep, 
9c00: 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64  funcfinal, (need
9c10: 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29  CollSeq == true)
9c20: 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 20 20 20 20   ? 1 : 0);..    
9c30: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
9c40: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e  eErrorCode.Ok) n
9c50: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
9c60: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
9c70: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69  reate_function_i
9c80: 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55  nterop(_sql, ToU
9c90: 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29  TF8(strFunction)
9ca0: 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50  , nArgs, 1, IntP
9cb0: 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66  tr.Zero, func, f
9cc0: 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
9cd0: 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71  al, (needCollSeq
9ce0: 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20   == true) ? 1 : 
9cf0: 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  0);..#else..    
9d00: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
9d10: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9d20: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
9d30: 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  n(_sql, ToUTF8(s
9d40: 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72  trFunction), nAr
9d50: 67 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65  gs, 4, IntPtr.Ze
9d60: 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74  ro, func, funcst
9d70: 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d  ep, funcfinal);.
9d80: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20  .      if (n == 
9d90: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
9da0: 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  Ok) n = UnsafeNa
9db0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9dc0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
9dd0: 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  ion(_sql, ToUTF8
9de0: 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e  (strFunction), n
9df0: 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e  Args, 1, IntPtr.
9e00: 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63  Zero, func, func
9e10: 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29  step, funcfinal)
9e20: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
9e30: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
9e40: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
9e50: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
9e60: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
9e70: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
9e80: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
9e90: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
9ea0: 20 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e   CreateCollation
9eb0: 28 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61  (string strColla
9ec0: 74 69 6f 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c  tion, SQLiteColl
9ed0: 61 74 69 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69  ation func, SQLi
9ee0: 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63  teCollation func
9ef0: 31 36 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  16)..    {..    
9f00: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
9f10: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
9f20: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9f30: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
9f40: 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  on(_sql, ToUTF8(
9f50: 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32  strCollation), 2
9f60: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
9f70: 75 6e 63 31 36 29 3b 0d 0a 20 20 20 20 20 20 69  unc16);..      i
9f80: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
9f90: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20  rorCode.Ok) n = 
9fa0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9fb0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
9fc0: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71  te_collation(_sq
9fd0: 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c  l, ToUTF8(strCol
9fe0: 6c 61 74 69 6f 6e 29 2c 20 31 2c 20 49 6e 74 50  lation), 1, IntP
9ff0: 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 29 3b 0d  tr.Zero, func);.
a000: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
a010: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
a020: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
a030: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
a040: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
a050: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
a060: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
a070: 65 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c  e int ContextCol
a080: 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c  lateCompare(Coll
a090: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
a0a0: 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f  m enc, IntPtr co
a0b0: 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 73 31  ntext, string s1
a0c0: 2c 20 73 74 72 69 6e 67 20 73 32 29 0d 0a 20 20  , string s2)..  
a0d0: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
a0e0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
a0f0: 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20   byte[] b1;..   
a100: 20 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20     byte[] b2;.. 
a110: 20 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74       System.Text
a120: 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72  .Encoding conver
a130: 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ter = null;.... 
a140: 20 20 20 20 20 73 77 69 74 63 68 20 28 65 6e 63       switch (enc
a150: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
a160: 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
a170: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
a180: 54 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  TF8:..          
a190: 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
a1a0: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
a1b0: 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20  .UTF8;..        
a1c0: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
a1d0: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
a1e0: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
a1f0: 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20  16LE:..         
a200: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
a210: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
a220: 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20  g.Unicode;..    
a230: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
a240: 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61        case Colla
a250: 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
a260: 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20  .UTF16BE:..     
a270: 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
a280: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
a290: 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55  oding.BigEndianU
a2a0: 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20  nicode;..       
a2b0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
a2c0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d   }....      b1 =
a2d0: 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79   converter.GetBy
a2e0: 74 65 73 28 73 31 29 3b 0d 0a 20 20 20 20 20 20  tes(s1);..      
a2f0: 62 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47  b2 = converter.G
a300: 65 74 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a  etBytes(s2);....
a310: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
a320: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
a330: 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  .sqlite3_context
a340: 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 28 63 6f 6e  _collcompare(con
a350: 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e  text, b1, b1.Len
a360: 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67  gth, b2, b2.Leng
a370: 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  th);..#else..   
a380: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
a390: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
a3a0: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
a3b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
a3c0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
a3d0: 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61  int ContextColla
a3e0: 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74  teCompare(Collat
a3f0: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20  ionEncodingEnum 
a400: 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  enc, IntPtr cont
a410: 65 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20  ext, char[] c1, 
a420: 63 68 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20  char[] c2)..    
a430: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
a440: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62  TANDARD..      b
a450: 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20  yte[] b1;..     
a460: 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20   byte[] b2;..   
a470: 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45     System.Text.E
a480: 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65  ncoding converte
a490: 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  r = null;....   
a4a0: 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d     switch (enc).
a4b0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
a4c0: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
a4d0: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
a4e0: 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  8:..          co
a4f0: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
a500: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
a510: 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  TF8;..          
a520: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
a530: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
a540: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36  codingEnum.UTF16
a550: 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  LE:..          c
a560: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
a570: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
a580: 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
a590: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
a5a0: 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
a5b0: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
a5c0: 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20  TF16BE:..       
a5d0: 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
a5e0: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
a5f0: 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69  ing.BigEndianUni
a600: 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
a610: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d   break;..      }
a620: 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63  ....      b1 = c
a630: 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
a640: 73 28 63 31 29 3b 0d 0a 20 20 20 20 20 20 62 32  s(c1);..      b2
a650: 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74   = converter.Get
a660: 42 79 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20  Bytes(c2);....  
a670: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
a680: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a690: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63  qlite3_context_c
a6a0: 6f 6c 6c 63 6f 6d 70 61 72 65 28 63 6f 6e 74 65  ollcompare(conte
a6b0: 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74  xt, b1, b1.Lengt
a6c0: 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68  h, b2, b2.Length
a6d0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
a6e0: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
a6f0: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
a700: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
a710: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
a720: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 43 6f  rnal override Co
a730: 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20  llationSequence 
a740: 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  GetCollationSequ
a750: 65 6e 63 65 28 53 51 4c 69 74 65 46 75 6e 63 74  ence(SQLiteFunct
a760: 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ion func, IntPtr
a770: 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b   context)..    {
a780: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
a790: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 43 6f  ANDARD..      Co
a7a0: 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20  llationSequence 
a7b0: 73 65 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74  seq = new Collat
a7c0: 69 6f 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a  ionSequence();..
a7d0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
a7e0: 20 20 20 20 20 20 69 6e 74 20 74 79 70 65 3b 0d        int type;.
a7f0: 0a 20 20 20 20 20 20 69 6e 74 20 65 6e 63 3b 0d  .      int enc;.
a800: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20  .      IntPtr p 
a810: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
a820: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
a830: 6e 74 65 78 74 5f 63 6f 6c 6c 73 65 71 28 63 6f  ntext_collseq(co
a840: 6e 74 65 78 74 2c 20 6f 75 74 20 74 79 70 65 2c  ntext, out type,
a850: 20 6f 75 74 20 65 6e 63 2c 20 6f 75 74 20 6c 65   out enc, out le
a860: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  n);....      if 
a870: 28 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e  (p != null) seq.
a880: 4e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72  Name = UTF8ToStr
a890: 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20  ing(p, len);..  
a8a0: 20 20 20 20 73 65 71 2e 54 79 70 65 20 3d 20 28      seq.Type = (
a8b0: 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75  CollationTypeEnu
a8c0: 6d 29 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 73  m)type;..      s
a8d0: 65 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b  eq._func = func;
a8e0: 0d 0a 20 20 20 20 20 20 73 65 71 2e 45 6e 63 6f  ..      seq.Enco
a8f0: 64 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f  ding = (Collatio
a900: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e  nEncodingEnum)en
a910: 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  c;....      retu
a920: 72 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a  rn seq;..#else..
a930: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
a940: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
a950: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
a960: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
a970: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a980: 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d  de long GetParam
a990: 56 61 6c 75 65 42 79 74 65 73 28 49 6e 74 50 74  ValueBytes(IntPt
a9a0: 72 20 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66  r p, int nDataOf
a9b0: 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65  fset, byte[] bDe
a9c0: 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20  st, int nStart, 
a9d0: 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20  int nLength)..  
a9e0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
a9f0: 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  len = UnsafeNati
aa00: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
aa10: 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 29  3_value_bytes(p)
aa20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66  ;....      // If
aa30: 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20   no destination 
aa40: 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74  buffer, return t
aa50: 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d  he size needed..
aa60: 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74  .      if (bDest
aa70: 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
aa80: 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20   nlen;....      
aa90: 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c  int nCopied = nL
aaa0: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
aab0: 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53  if (nCopied + nS
aac0: 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e  tart > bDest.Len
aad0: 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62  gth) nCopied = b
aae0: 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53  Dest.Length - nS
aaf0: 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20  tart;..      if 
ab00: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61  (nCopied + nData
ab10: 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e  Offset > nlen) n
ab20: 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20  Copied = nlen - 
ab30: 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a  nDataOffset;....
ab40: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
ab50: 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d  d > 0)..      {.
ab60: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
ab70: 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ptr = UnsafeNati
ab80: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
ab90: 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b  3_value_blob(p);
aba0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73  ....        Mars
abb0: 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72  hal.Copy((IntPtr
abc0: 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20  )(ptr.ToInt64() 
abd0: 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20  + nDataOffset), 
abe0: 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e  bDest, nStart, n
abf0: 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20  Copied);..      
ac00: 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  }..      else.. 
ac10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ac20: 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20  nCopied = 0;..  
ac30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
ac40: 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a  eturn nCopied;..
ac50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
ac60: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64  ernal override d
ac70: 6f 75 62 6c 65 20 47 65 74 50 61 72 61 6d 56 61  ouble GetParamVa
ac80: 6c 75 65 44 6f 75 62 6c 65 28 49 6e 74 50 74 72  lueDouble(IntPtr
ac90: 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   ptr)..    {..  
aca0: 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65      double value
acb0: 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ;..#if !PLATFORM
acc0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
acd0: 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d  K..      value =
ace0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
acf0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
ad00: 75 65 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d  ue_double(ptr);.
ad10: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e  .#else..      Un
ad20: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
ad30: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
ad40: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70  double_interop(p
ad50: 74 72 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d  tr, out value);.
ad60: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72  .#endif..      r
ad70: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20  eturn value;..  
ad80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
ad90: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
ada0: 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e   GetParamValueIn
adb0: 74 33 32 28 49 6e 74 50 74 72 20 70 74 72 29 0d  t32(IntPtr ptr).
adc0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
add0: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
ade0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
adf0: 5f 76 61 6c 75 65 5f 69 6e 74 28 70 74 72 29 3b  _value_int(ptr);
ae00: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
ae10: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
ae20: 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61   long GetParamVa
ae30: 6c 75 65 49 6e 74 36 34 28 49 6e 74 50 74 72 20  lueInt64(IntPtr 
ae40: 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
ae50: 20 20 20 49 6e 74 36 34 20 76 61 6c 75 65 3b 0d     Int64 value;.
ae60: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
ae70: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
ae80: 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55  .      value = U
ae90: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
aea0: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
aeb0: 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d 0a 23 65  _int64(ptr);..#e
aec0: 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  lse..      Unsaf
aed0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
aee0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
aef0: 36 34 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20  64_interop(ptr, 
af00: 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  out value);..#en
af10: 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72  dif..      retur
af20: 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d  n value;..    }.
af30: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
af40: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
af50: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 65 78  GetParamValueTex
af60: 74 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  t(IntPtr ptr).. 
af70: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
af80: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
af90: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
afa0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
afb0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
afc0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
afd0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74  3_value_text_int
afe0: 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 6c 65  erop(ptr, out le
aff0: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
b000: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
b010: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
b020: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b030: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
b040: 78 74 28 70 74 72 29 2c 20 2d 31 29 3b 0d 0a 23  xt(ptr), -1);..#
b050: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
b060: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
b070: 72 72 69 64 65 20 54 79 70 65 41 66 66 69 6e 69  rride TypeAffini
b080: 74 79 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  ty GetParamValue
b090: 54 79 70 65 28 49 6e 74 50 74 72 20 70 74 72 29  Type(IntPtr ptr)
b0a0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
b0b0: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
b0c0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
b0d0: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 74 72  3_value_type(ptr
b0e0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
b0f0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b100: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 42 6c  de void ReturnBl
b110: 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  ob(IntPtr contex
b120: 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29  t, byte[] value)
b130: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
b140: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b150: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
b160: 74 5f 62 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20  t_blob(context, 
b170: 76 61 6c 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e  value, value.Len
b180: 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31  gth, (IntPtr)(-1
b190: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
b1a0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
b1b0: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 44  ide void ReturnD
b1c0: 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 63 6f 6e  ouble(IntPtr con
b1d0: 74 65 78 74 2c 20 64 6f 75 62 6c 65 20 76 61 6c  text, double val
b1e0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ue)..    {..#if 
b1f0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
b200: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
b210: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
b220: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
b230: 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74  sult_double(cont
b240: 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  ext, value);..#e
b250: 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  lse..      Unsaf
b260: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b270: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f  qlite3_result_do
b280: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  uble_interop(con
b290: 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29  text, ref value)
b2a0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
b2b0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
b2c0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
b2d0: 65 74 75 72 6e 45 72 72 6f 72 28 49 6e 74 50 74  eturnError(IntPt
b2e0: 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e  r context, strin
b2f0: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
b300: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
b310: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b320: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
b330: 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28  context, ToUTF8(
b340: 76 61 6c 75 65 29 2c 20 76 61 6c 75 65 2e 4c 65  value), value.Le
b350: 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ngth);..    }...
b360: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b370: 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
b380: 72 6e 49 6e 74 33 32 28 49 6e 74 50 74 72 20 63  rnInt32(IntPtr c
b390: 6f 6e 74 65 78 74 2c 20 69 6e 74 20 76 61 6c 75  ontext, int valu
b3a0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
b3b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
b3c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
b3d0: 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c  ult_int(context,
b3e0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d   value);..    }.
b3f0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
b400: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
b410: 74 75 72 6e 49 6e 74 36 34 28 49 6e 74 50 74 72  turnInt64(IntPtr
b420: 20 63 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67 20 76   context, long v
b430: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  alue)..    {..#i
b440: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
b450: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
b460: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
b470: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b480: 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e  result_int64(con
b490: 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  text, value);..#
b4a0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61  else..      Unsa
b4b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b4c0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
b4d0: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  nt64_interop(con
b4e0: 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29  text, ref value)
b4f0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
b500: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
b510: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
b520: 65 74 75 72 6e 4e 75 6c 6c 28 49 6e 74 50 74 72  eturnNull(IntPtr
b530: 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b   context)..    {
b540: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
b550: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b560: 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28  te3_result_null(
b570: 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d  context);..    }
b580: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
b590: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
b5a0: 65 74 75 72 6e 54 65 78 74 28 49 6e 74 50 74 72  eturnText(IntPtr
b5b0: 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67   context, string
b5c0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
b5d0: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d        byte[] b =
b5e0: 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d   ToUTF8(value);.
b5f0: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
b600: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b610: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63  e3_result_text(c
b620: 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76  ontext, ToUTF8(v
b630: 61 6c 75 65 29 2c 20 62 2e 4c 65 6e 67 74 68 20  alue), b.Length 
b640: 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31  - 1, (IntPtr)(-1
b650: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
b660: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
b670: 69 64 65 20 49 6e 74 50 74 72 20 41 67 67 72 65  ide IntPtr Aggre
b680: 67 61 74 65 43 6f 6e 74 65 78 74 28 49 6e 74 50  gateContext(IntP
b690: 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20  tr context)..   
b6a0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
b6b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
b6c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67  hods.sqlite3_agg
b6d0: 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63  regate_context(c
b6e0: 6f 6e 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20  ontext, 1);..   
b6f0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
b700: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
b710: 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61   Enables or disa
b720: 62 6c 65 64 20 65 78 74 65 6e 73 69 6f 6e 20 6c  bled extension l
b730: 6f 61 64 69 6e 67 20 62 79 20 53 51 4c 69 74 65  oading by SQLite
b740: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
b750: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
b760: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f  param name="bOnO
b770: 66 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72  ff">..    /// Tr
b780: 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61  ue to enable loa
b790: 64 69 6e 67 20 6f 66 20 65 78 74 65 6e 73 69 6f  ding of extensio
b7a0: 6e 73 2c 20 66 61 6c 73 65 20 74 6f 20 64 69 73  ns, false to dis
b7b0: 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  able...    /// <
b7c0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
b7d0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
b7e0: 6f 69 64 20 53 65 74 4c 6f 61 64 45 78 74 65 6e  oid SetLoadExten
b7f0: 73 69 6f 6e 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66  sion(bool bOnOff
b800: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
b810: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
b820: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
b830: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
b840: 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78  3_enable_load_ex
b850: 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  tension(..      
b860: 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e        _sql, (bOn
b870: 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d  Off ? -1 : 0));.
b880: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
b890: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
b8a0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
b8b0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
b8c0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
b8d0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
b8e0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
b8f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73  >..    /// Loads
b900: 20 61 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73   a SQLite extens
b910: 69 6f 6e 20 6c 69 62 72 61 72 79 20 66 72 6f 6d  ion library from
b920: 20 74 68 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e   the named file.
b930: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
b940: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
b950: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e  aram name="fileN
b960: 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ame">..    /// T
b970: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
b980: 79 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72  ynamic link libr
b990: 61 72 79 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  ary file contain
b9a0: 69 6e 67 20 74 68 65 20 65 78 74 65 6e 73 69 6f  ing the extensio
b9b0: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  n...    /// </pa
b9c0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
b9d0: 61 72 61 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e  aram name="procN
b9e0: 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ame">..    /// T
b9f0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 65  he name of the e
ba00: 78 70 6f 72 74 65 64 20 66 75 6e 63 74 69 6f 6e  xported function
ba10: 20 75 73 65 64 20 74 6f 20 69 6e 69 74 69 61 6c   used to initial
ba20: 69 7a 65 20 74 68 65 20 65 78 74 65 6e 73 69 6f  ize the extensio
ba30: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e  n...    /// If n
ba40: 75 6c 6c 2c 20 74 68 65 20 64 65 66 61 75 6c 74  ull, the default
ba50: 20 22 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73   "sqlite3_extens
ba60: 69 6f 6e 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62  ion_init" will b
ba70: 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  e used...    ///
ba80: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
ba90: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
baa0: 20 76 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e 73   void LoadExtens
bab0: 69 6f 6e 28 73 74 72 69 6e 67 20 66 69 6c 65 4e  ion(string fileN
bac0: 61 6d 65 2c 20 73 74 72 69 6e 67 20 70 72 6f 63  ame, string proc
bad0: 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Name)..    {..  
bae0: 20 20 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61        if (fileNa
baf0: 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
bb00: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
bb10: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
bb20: 78 63 65 70 74 69 6f 6e 28 22 66 69 6c 65 4e 61  xception("fileNa
bb30: 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me");....       
bb40: 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 20 3d   IntPtr pError =
bb50: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
bb60: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
bb70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bb80: 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38       byte[] utf8
bb90: 46 69 6c 65 4e 61 6d 65 20 3d 20 55 54 46 38 45  FileName = UTF8E
bba0: 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74  ncoding.UTF8.Get
bbb0: 42 79 74 65 73 28 66 69 6c 65 4e 61 6d 65 20 2b  Bytes(fileName +
bbc0: 20 27 5c 30 27 29 3b 0d 0a 20 20 20 20 20 20 20   '\0');..       
bbd0: 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38       byte[] utf8
bbe0: 50 72 6f 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b  ProcName = null;
bbf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bc00: 69 66 20 28 70 72 6f 63 4e 61 6d 65 20 21 3d 20  if (procName != 
bc10: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
bc20: 20 20 20 20 20 20 20 75 74 66 38 50 72 6f 63 4e         utf8ProcN
bc30: 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69  ame = UTF8Encodi
bc40: 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73  ng.UTF8.GetBytes
bc50: 28 70 72 6f 63 4e 61 6d 65 20 2b 20 27 5c 30 27  (procName + '\0'
bc60: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
bc70: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
bc80: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
bc90: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
bca0: 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  3_load_extension
bcb0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
bcc0: 20 20 20 5f 73 71 6c 2c 20 75 74 66 38 46 69 6c     _sql, utf8Fil
bcd0: 65 4e 61 6d 65 2c 20 75 74 66 38 50 72 6f 63 4e  eName, utf8ProcN
bce0: 61 6d 65 2c 20 72 65 66 20 70 45 72 72 6f 72 29  ame, ref pError)
bcf0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
bd00: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
bd10: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
bd30: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
bd40: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 55 54 46 38  xception(n, UTF8
bd50: 54 6f 53 74 72 69 6e 67 28 70 45 72 72 6f 72 2c  ToString(pError,
bd60: 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20   -1));..        
bd70: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
bd80: 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ly..        {.. 
bd90: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
bda0: 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e  Error != IntPtr.
bdb0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
bdc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bdd0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
bde0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
bdf0: 33 5f 66 72 65 65 28 70 45 72 72 6f 72 29 3b 0d  3_free(pError);.
be00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
be10: 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72   pError = IntPtr
be20: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
be30: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
be40: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
be50: 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69  // Enables or di
be60: 73 61 62 6c 65 64 20 65 78 74 65 6e 64 65 64 20  sabled extended 
be70: 72 65 73 75 6c 74 20 63 6f 64 65 73 20 72 65 74  result codes ret
be80: 75 72 6e 65 64 20 62 79 20 53 51 4c 69 74 65 0d  urned by SQLite.
be90: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
bea0: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 45  erride void SetE
beb0: 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64  xtendedResultCod
bec0: 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d  es(bool bOnOff).
bed0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
bee0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
bef0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
bf00: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78  thods.sqlite3_ex
bf10: 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f  tended_result_co
bf20: 64 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  des(..          
bf30: 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20  _sql, (bOnOff ? 
bf40: 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20  -1 : 0));....   
bf50: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
bf60: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
bf70: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
bf80: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
bf90: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
bfa0: 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65     }..    /// Ge
bfb0: 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69  ts the last SQLi
bfc0: 74 65 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20  te error code.. 
bfd0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
bfe0: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
bff0: 43 6f 64 65 20 52 65 73 75 6c 74 43 6f 64 65 28  Code ResultCode(
c000: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
c010: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
c020: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
c030: 65 33 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29  e3_errcode(_sql)
c040: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f  ;..    }..    //
c050: 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20  / Gets the last 
c060: 53 51 4c 69 74 65 20 65 78 74 65 6e 64 65 64 20  SQLite extended 
c070: 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20  error code..    
c080: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
c090: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
c0a0: 65 20 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74  e ExtendedResult
c0b0: 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Code()..    {.. 
c0c0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
c0d0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
c0e0: 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64  sqlite3_extended
c0f0: 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d  _errcode(_sql);.
c100: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
c110: 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73  / Add a log mess
c120: 61 67 65 20 76 69 61 20 74 68 65 20 53 51 4c 69  age via the SQLi
c130: 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69  te sqlite3_log i
c140: 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69  nterface...    i
c150: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
c160: 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67 65   void LogMessage
c170: 28 69 6e 74 20 69 45 72 72 43 6f 64 65 2c 20 73  (int iErrCode, s
c180: 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d  tring zMessage).
c190: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
c1a0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
c1b0: 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28 69 45  s.sqlite3_log(iE
c1c0: 72 72 43 6f 64 65 2c 20 54 6f 55 54 46 38 28 7a  rrCode, ToUTF8(z
c1d0: 4d 65 73 73 61 67 65 29 29 3b 0d 0a 20 20 20 20  Message));..    
c1e0: 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  }....#if INTEROP
c1f0: 5f 43 4f 44 45 43 0d 0a 20 20 20 20 69 6e 74 65  _CODEC..    inte
c200: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
c210: 69 64 20 53 65 74 50 61 73 73 77 6f 72 64 28 62  id SetPassword(b
c220: 79 74 65 5b 5d 20 70 61 73 73 77 6f 72 64 42 79  yte[] passwordBy
c230: 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tes)..    {..   
c240: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
c250: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
c260: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
c270: 65 33 5f 6b 65 79 28 5f 73 71 6c 2c 20 70 61 73  e3_key(_sql, pas
c280: 73 77 6f 72 64 42 79 74 65 73 2c 20 70 61 73 73  swordBytes, pass
c290: 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68  wordBytes.Length
c2a0: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
c2b0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
c2c0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
c2d0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
c2e0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
c2f0: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
c300: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
c310: 72 69 64 65 20 76 6f 69 64 20 43 68 61 6e 67 65  ride void Change
c320: 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20  Password(byte[] 
c330: 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73  newPasswordBytes
c340: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
c350: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
c360: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
c370: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
c380: 72 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65 77 50  rekey(_sql, newP
c390: 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20 28 6e  asswordBytes, (n
c3a0: 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 20  ewPasswordBytes 
c3b0: 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a 20 6e  == null) ? 0 : n
c3c0: 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2e  ewPasswordBytes.
c3d0: 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20  Length);..      
c3e0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
c3f0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
c400: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
c410: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
c420: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
c430: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
c440: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c450: 64 65 20 76 6f 69 64 20 53 65 74 55 70 64 61 74  de void SetUpdat
c460: 65 48 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64 61  eHook(SQLiteUpda
c470: 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  teCallback func)
c480: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
c490: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
c4a0: 64 73 2e 73 71 6c 69 74 65 33 5f 75 70 64 61 74  ds.sqlite3_updat
c4b0: 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e  e_hook(_sql, fun
c4c0: 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
c4d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
c4e0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
c4f0: 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69 74 48   void SetCommitH
c500: 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d 69 74  ook(SQLiteCommit
c510: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
c520: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
c530: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c540: 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f  .sqlite3_commit_
c550: 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  hook(_sql, func,
c560: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
c570: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
c580: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
c590: 6f 69 64 20 53 65 74 54 72 61 63 65 43 61 6c 6c  oid SetTraceCall
c5a0: 62 61 63 6b 28 53 51 4c 69 74 65 54 72 61 63 65  back(SQLiteTrace
c5b0: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
c5c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
c5d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c5e0: 2e 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 5f  .sqlite3_trace(_
c5f0: 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
c600: 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
c610: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
c620: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
c630: 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28 53 51  tRollbackHook(SQ
c640: 4c 69 74 65 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c  LiteRollbackCall
c650: 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
c660: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
c670: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
c680: 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f  ite3_rollback_ho
c690: 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49  ok(_sql, func, I
c6a0: 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
c6b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
c6c0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
c6d0: 2f 20 41 6c 6c 6f 77 73 20 74 68 65 20 73 65 74  / Allows the set
c6e0: 74 69 6e 67 20 6f 66 20 61 20 6c 6f 67 67 69 6e  ting of a loggin
c6f0: 67 20 63 61 6c 6c 62 61 63 6b 20 69 6e 76 6f 6b  g callback invok
c700: 65 64 20 62 79 20 53 51 4c 69 74 65 20 77 68 65  ed by SQLite whe
c710: 6e 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 67  n a..    /// log
c720: 20 65 76 65 6e 74 20 6f 63 63 75 72 73 2e 20 20   event occurs.  
c730: 4f 6e 6c 79 20 6f 6e 65 20 63 61 6c 6c 62 61 63  Only one callbac
c740: 6b 20 6d 61 79 20 62 65 20 73 65 74 2e 20 20 49  k may be set.  I
c750: 66 20 4e 55 4c 4c 20 69 73 20 70 61 73 73 65 64  f NULL is passed
c760: 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6c  ,..    /// the l
c770: 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20  ogging callback 
c780: 69 73 20 75 6e 72 65 67 69 73 74 65 72 65 64 2e  is unregistered.
c790: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
c7a0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
c7b0: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 22  aram name="func"
c7c0: 3e 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75  >The callback fu
c7d0: 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65  nction to invoke
c7e0: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
c7f0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
c800: 72 6e 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64  rns a result cod
c810: 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  e</returns>..   
c820: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c830: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
c840: 64 65 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63  de SetLogCallbac
c850: 6b 28 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62  k(SQLiteLogCallb
c860: 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
c870: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
c880: 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55  ErrorCode rc = U
c890: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
c8a0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  ds.sqlite3_confi
c8b0: 67 5f 6c 6f 67 28 0d 0a 20 20 20 20 20 20 20 20  g_log(..        
c8c0: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67      SQLiteConfig
c8d0: 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43  OpsEnum.SQLITE_C
c8e0: 4f 4e 46 49 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c  ONFIG_LOG, func,
c8f0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
c900: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
c910: 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   rc;..    }.... 
c920: 20 20 20 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 2f 2f  ////////////////
c970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c980: 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  //....    /// <s
c990: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
c9a0: 20 43 72 65 61 74 65 73 20 61 20 6e 65 77 20 53   Creates a new S
c9b0: 51 4c 69 74 65 20 62 61 63 6b 75 70 20 6f 62 6a  QLite backup obj
c9c0: 65 63 74 20 62 61 73 65 64 20 6f 6e 20 74 68 65  ect based on the
c9d0: 20 70 72 6f 76 69 64 65 64 20 64 65 73 74 69 6e   provided destin
c9e0: 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64  ation..    /// d
c9f0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
ca00: 6f 6e 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20  on.  The source 
ca10: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
ca20: 69 6f 6e 20 69 73 20 74 68 65 20 6f 6e 65 0d 0a  ion is the one..
ca30: 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74      /// associat
ca40: 65 64 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a  ed with this obj
ca50: 65 63 74 2e 20 20 54 68 65 20 73 6f 75 72 63 65  ect.  The source
ca60: 20 61 6e 64 20 64 65 73 74 69 6e 61 74 69 6f 6e   and destination
ca70: 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f   database..    /
ca80: 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 63  // connections c
ca90: 61 6e 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d  annot be the sam
caa0: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
cab0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
cac0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73  <param name="des
cad0: 74 43 6e 6e 22 3e 54 68 65 20 64 65 73 74 69 6e  tCnn">The destin
cae0: 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 63  ation database c
caf0: 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61  onnection.</para
cb00: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
cb10: 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 4e 61 6d  am name="destNam
cb20: 65 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69  e">The destinati
cb30: 6f 6e 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  on database name
cb40: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
cb50: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
cb60: 73 6f 75 72 63 65 4e 61 6d 65 22 3e 54 68 65 20  sourceName">The 
cb70: 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
cb80: 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  name.</param>.. 
cb90: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
cba0: 54 68 65 20 6e 65 77 6c 79 20 63 72 65 61 74 65  The newly create
cbb0: 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e  d backup object.
cbc0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
cbd0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
cbe0: 65 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 49  e SQLiteBackup I
cbf0: 6e 69 74 69 61 6c 69 7a 65 42 61 63 6b 75 70 28  nitializeBackup(
cc00: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
cc10: 43 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74 43  Connection destC
cc20: 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  nn,..        str
cc30: 69 6e 67 20 64 65 73 74 4e 61 6d 65 2c 0d 0a 20  ing destName,.. 
cc40: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 6f         string so
cc50: 75 72 63 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  urceName..      
cc60: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
cc70: 20 20 20 20 69 66 20 28 64 65 73 74 43 6e 6e 20      if (destCnn 
cc80: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
cc90: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
cca0: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
ccb0: 70 74 69 6f 6e 28 22 64 65 73 74 43 6e 6e 22 29  ption("destCnn")
ccc0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
ccd0: 28 64 65 73 74 4e 61 6d 65 20 3d 3d 20 6e 75 6c  (destName == nul
cce0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
ccf0: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
cd00: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
cd10: 22 64 65 73 74 4e 61 6d 65 22 29 3b 0d 0a 0d 0a  "destName");....
cd20: 20 20 20 20 20 20 20 20 69 66 20 28 73 6f 75 72          if (sour
cd30: 63 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ceName == null).
cd40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
cd50: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
cd60: 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 73 6f  ullException("so
cd70: 75 72 63 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20  urceName");.... 
cd80: 20 20 20 20 20 20 20 53 51 4c 69 74 65 33 20 64         SQLite3 d
cd90: 65 73 74 53 71 6c 69 74 65 33 20 3d 20 64 65 73  estSqlite3 = des
cda0: 74 43 6e 6e 2e 5f 73 71 6c 20 61 73 20 53 51 4c  tCnn._sql as SQL
cdb0: 69 74 65 33 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ite3;....       
cdc0: 20 69 66 20 28 64 65 73 74 53 71 6c 69 74 65 33   if (destSqlite3
cdd0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
cde0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
cdf0: 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69   ArgumentExcepti
ce00: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
ce10: 20 20 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f       "Destinatio
ce20: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73  n connection has
ce30: 20 6e 6f 20 77 72 61 70 70 65 72 2e 22 2c 0d 0a   no wrapper.",..
ce40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce50: 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20  "destCnn");.... 
ce60: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
ce70: 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 64 65  nectionHandle de
ce80: 73 74 48 61 6e 64 6c 65 20 3d 20 64 65 73 74 53  stHandle = destS
ce90: 71 6c 69 74 65 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a  qlite3._sql;....
cea0: 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74          if (dest
ceb0: 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  Handle == null).
cec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
ced0: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45  ow new ArgumentE
cee0: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
cef0: 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73 74             "Dest
cf00: 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  ination connecti
cf10: 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  on has an invali
cf20: 64 20 68 61 6e 64 6c 65 2e 22 2c 0d 0a 20 20 20  d handle.",..   
cf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65               "de
cf40: 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20  stCnn");....    
cf50: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
cf60: 74 69 6f 6e 48 61 6e 64 6c 65 20 73 6f 75 72 63  tionHandle sourc
cf70: 65 48 61 6e 64 6c 65 20 3d 20 5f 73 71 6c 3b 0d  eHandle = _sql;.
cf80: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73  ...        if (s
cf90: 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 3d 20 6e  ourceHandle == n
cfa0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
cfb0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
cfc0: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
cfd0: 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
cfe0: 20 20 20 20 20 20 20 20 22 53 6f 75 72 63 65 20          "Source 
cff0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61  connection has a
d000: 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
d010: 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
d020: 62 79 74 65 5b 5d 20 7a 44 65 73 74 4e 61 6d 65  byte[] zDestName
d030: 20 3d 20 54 6f 55 54 46 38 28 64 65 73 74 4e 61   = ToUTF8(destNa
d040: 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 79  me);..        by
d050: 74 65 5b 5d 20 7a 53 6f 75 72 63 65 4e 61 6d 65  te[] zSourceName
d060: 20 3d 20 54 6f 55 54 46 38 28 73 6f 75 72 63 65   = ToUTF8(source
d070: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
d080: 20 20 49 6e 74 50 74 72 20 62 61 63 6b 75 70 20    IntPtr backup 
d090: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
d0a0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
d0b0: 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20 20 20  ckup_init(..    
d0c0: 20 20 20 20 20 20 20 20 64 65 73 74 48 61 6e 64          destHand
d0d0: 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73  le, zDestName, s
d0e0: 6f 75 72 63 65 48 61 6e 64 6c 65 2c 20 7a 53 6f  ourceHandle, zSo
d0f0: 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  urceName);....  
d100: 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70        if (backup
d110: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
d120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
d130: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
d140: 63 65 70 74 69 6f 6e 28 52 65 73 75 6c 74 43 6f  ception(ResultCo
d150: 64 65 28 29 2c 20 47 65 74 4c 61 73 74 45 72 72  de(), GetLastErr
d160: 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  or());....      
d170: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c    return new SQL
d180: 69 74 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  iteBackup(..    
d190: 20 20 20 20 20 20 20 20 74 68 69 73 2c 20 6e 65          this, ne
d1a0: 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61  w SQLiteBackupHa
d1b0: 6e 64 6c 65 28 64 65 73 74 48 61 6e 64 6c 65 2c  ndle(destHandle,
d1c0: 20 62 61 63 6b 75 70 29 2c 0d 0a 20 20 20 20 20   backup),..     
d1d0: 20 20 20 20 20 20 20 64 65 73 74 48 61 6e 64 6c         destHandl
d1e0: 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f  e, zDestName, so
d1f0: 75 72 63 65 48 61 6e 64 6c 65 2c 20 7a 53 6f 75  urceHandle, zSou
d200: 72 63 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d  rceName);..    }
d210: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
d220: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
d230: 6f 70 69 65 73 20 75 70 20 74 6f 20 4e 20 70 61  opies up to N pa
d240: 67 65 73 20 66 72 6f 6d 20 74 68 65 20 73 6f 75  ges from the sou
d250: 72 63 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  rce database to 
d260: 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d  the destination.
d270: 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73  .    /// databas
d280: 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
d290: 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  h the specified 
d2a0: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a  backup object...
d2b0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
d2c0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
d2d0: 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22  am name="backup"
d2e0: 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65  >The backup obje
d2f0: 63 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61  ct to use.</para
d300: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
d310: 61 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22 3e  am name="nPage">
d320: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75  ..    /// The nu
d330: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f  mber of pages to
d340: 20 63 6f 70 79 2c 20 6e 65 67 61 74 69 76 65 20   copy, negative 
d350: 74 6f 20 63 6f 70 79 20 61 6c 6c 20 72 65 6d 61  to copy all rema
d360: 69 6e 69 6e 67 20 70 61 67 65 73 2e 0d 0a 20 20  ining pages...  
d370: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
d380: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
d390: 61 6d 65 3d 22 72 65 74 72 79 22 3e 0d 0a 20 20  ame="retry">..  
d3a0: 20 20 2f 2f 2f 20 53 65 74 20 74 6f 20 74 72 75    /// Set to tru
d3b0: 65 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 69  e if the operati
d3c0: 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  on needs to be r
d3d0: 65 74 72 69 65 64 20 64 75 65 20 74 6f 20 64 61  etried due to da
d3e0: 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20  tabase..    /// 
d3f0: 6c 6f 63 6b 69 6e 67 20 69 73 73 75 65 73 3b 20  locking issues; 
d400: 6f 74 68 65 72 77 69 73 65 2c 20 73 65 74 20 74  otherwise, set t
d410: 6f 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f  o false...    //
d420: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
d430: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
d440: 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 74     /// True if t
d450: 68 65 72 65 20 61 72 65 20 6d 6f 72 65 20 70 61  here are more pa
d460: 67 65 73 20 74 6f 20 62 65 20 63 6f 70 69 65 64  ges to be copied
d470: 2c 20 66 61 6c 73 65 20 6f 74 68 65 72 77 69 73  , false otherwis
d480: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  e...    /// </re
d490: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
d4a0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
d4b0: 6f 6c 20 53 74 65 70 42 61 63 6b 75 70 28 0d 0a  ol StepBackup(..
d4c0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
d4d0: 63 6b 75 70 20 62 61 63 6b 75 70 2c 0d 0a 20 20  ckup backup,..  
d4e0: 20 20 20 20 20 20 69 6e 74 20 6e 50 61 67 65 2c        int nPage,
d4f0: 0d 0a 20 20 20 20 20 20 20 20 6f 75 74 20 62 6f  ..        out bo
d500: 6f 6c 20 72 65 74 72 79 0d 0a 20 20 20 20 20 20  ol retry..      
d510: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
d520: 20 20 20 20 72 65 74 72 79 20 3d 20 66 61 6c 73      retry = fals
d530: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
d540: 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c   (backup == null
d550: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
d560: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
d570: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
d580: 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20  backup");....   
d590: 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
d5a0: 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  pHandle handle =
d5b0: 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f   backup._sqlite_
d5c0: 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20  backup;....     
d5d0: 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d     if (handle ==
d5e0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
d5f0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
d600: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
d610: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
d620: 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
d630: 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
d640: 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
d650: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
d660: 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d  tPtr handlePtr =
d670: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
d680: 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74      if (handlePt
d690: 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r == IntPtr.Zero
d6a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
d6b0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
d6c0: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
d6d0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
d6e0: 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
d6f0: 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
d700: 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65  id handle pointe
d710: 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r.");....       
d720: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
d730: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
d740: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
d750: 5f 62 61 63 6b 75 70 5f 73 74 65 70 28 68 61 6e  _backup_step(han
d760: 64 6c 65 50 74 72 2c 20 6e 50 61 67 65 29 3b 0d  dlePtr, nPage);.
d770: 0a 20 20 20 20 20 20 20 20 62 61 63 6b 75 70 2e  .        backup.
d780: 5f 73 74 65 70 52 65 73 75 6c 74 20 3d 20 6e 3b  _stepResult = n;
d790: 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 76 65 20 66   /* NOTE: Save f
d7a0: 6f 72 20 75 73 65 20 62 79 20 46 69 6e 69 73 68  or use by Finish
d7b0: 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20 20  Backup. */....  
d7c0: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
d7d0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
d7e0: 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  k)..        {.. 
d7f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
d800: 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
d810: 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
d820: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
d830: 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d  ErrorCode.Busy).
d840: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
d850: 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20          retry = 
d860: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
d870: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
d880: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
d890: 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d      else if (n =
d8a0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
d8b0: 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20 20 20 20  e.Locked)..     
d8c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d8d0: 20 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b 0d    retry = true;.
d8e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
d8f0: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
d900: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
d910: 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69  se if (n == SQLi
d920: 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65  teErrorCode.Done
d930: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
d940: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
d950: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
d960: 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
d970: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
d980: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
d990: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
d9a0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
d9b0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  or());..        
d9c0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
d9d0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
d9e0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
d9f0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
da00: 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20  es remaining to 
da10: 62 65 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74  be copied from t
da20: 68 65 20 73 6f 75 72 63 65 0d 0a 20 20 20 20 2f  he source..    /
da30: 2f 2f 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  // database to t
da40: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  he destination d
da50: 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74  atabase associat
da60: 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63  ed with the spec
da70: 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62  ified..    /// b
da80: 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20  ackup object... 
da90: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
daa0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
dab0: 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
dac0: 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
dad0: 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72  t to check.</par
dae0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
daf0: 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72  turns>The number
db00: 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e   of pages remain
db10: 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64  ing to be copied
db20: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
db30: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
db40: 64 65 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e 67  de int Remaining
db50: 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
db60: 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61   SQLiteBackup ba
db70: 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d  ckup..        ).
db80: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
db90: 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75  if (backup == nu
dba0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
dbb0: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
dbc0: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
dbd0: 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20  ("backup");.... 
dbe0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
dbf0: 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  kupHandle handle
dc00: 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74   = backup._sqlit
dc10: 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20  e_backup;....   
dc20: 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20       if (handle 
dc30: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
dc40: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
dc50: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
dc60: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
dc70: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
dc80: 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
dc90: 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
dca0: 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
dcb0: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72  IntPtr handlePtr
dcc0: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
dcd0: 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
dce0: 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  Ptr == IntPtr.Ze
dcf0: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
dd00: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
dd10: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
dd20: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
dd30: 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
dd40: 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
dd50: 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e  alid handle poin
dd60: 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ter.");....     
dd70: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
dd80: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
dd90: 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 72 65 6d  lite3_backup_rem
dda0: 61 69 6e 69 6e 67 28 68 61 6e 64 6c 65 50 74 72  aining(handlePtr
ddb0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
ddc0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
ddd0: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
dde0: 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
ddf0: 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
de00: 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
de10: 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20   associated..   
de20: 20 2f 2f 2f 20 77 69 74 68 20 74 68 65 20 73 70   /// with the sp
de30: 65 63 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f  ecified backup o
de40: 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bject...    /// 
de50: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
de60: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
de70: 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63  "backup">The bac
de80: 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68  kup object to ch
de90: 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  eck.</param>..  
dea0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
deb0: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
dec0: 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
ded0: 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 2e  source database.
dee0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
def0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
df00: 65 20 69 6e 74 20 50 61 67 65 43 6f 75 6e 74 42  e int PageCountB
df10: 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
df20: 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63  SQLiteBackup bac
df30: 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  kup..        )..
df40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
df50: 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c  f (backup == nul
df60: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
df70: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
df80: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
df90: 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20  "backup");....  
dfa0: 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
dfb0: 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  upHandle handle 
dfc0: 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65  = backup._sqlite
dfd0: 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20  _backup;....    
dfe0: 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d      if (handle =
dff0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
e000: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
e010: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
e020: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
e030: 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
e040: 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
e050: 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
e060: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49  ");....        I
e070: 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20  ntPtr handlePtr 
e080: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
e090: 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50       if (handleP
e0a0: 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tr == IntPtr.Zer
e0b0: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
e0c0: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
e0d0: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
e0e0: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
e0f0: 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
e100: 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
e110: 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74  lid handle point
e120: 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  er.");....      
e130: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
e140: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
e150: 69 74 65 33 5f 62 61 63 6b 75 70 5f 70 61 67 65  ite3_backup_page
e160: 63 6f 75 6e 74 28 68 61 6e 64 6c 65 50 74 72 29  count(handlePtr)
e170: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
e180: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
e190: 20 20 20 2f 2f 2f 20 44 65 73 74 72 6f 79 73 20     /// Destroys 
e1a0: 74 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  the backup objec
e1b0: 74 2c 20 72 6f 6c 6c 69 6e 67 20 62 61 63 6b 20  t, rolling back 
e1c0: 61 6e 79 20 62 61 63 6b 75 70 20 74 68 61 74 20  any backup that 
e1d0: 6d 61 79 20 62 65 20 69 6e 0d 0a 20 20 20 20 2f  may be in..    /
e1e0: 2f 2f 20 70 72 6f 67 65 73 73 2e 0d 0a 20 20 20  // progess...   
e1f0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
e200: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
e210: 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68  name="backup">Th
e220: 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
e230: 74 6f 20 64 65 73 74 72 6f 79 2e 3c 2f 70 61 72  to destroy.</par
e240: 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
e250: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
e260: 46 69 6e 69 73 68 42 61 63 6b 75 70 28 0d 0a 20  FinishBackup(.. 
e270: 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
e280: 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20  kup backup..    
e290: 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
e2a0: 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70        if (backup
e2b0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
e2c0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
e2d0: 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
e2e0: 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29  eption("backup")
e2f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
e300: 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20  iteBackupHandle 
e310: 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e  handle = backup.
e320: 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d  _sqlite_backup;.
e330: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
e340: 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
e350: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
e360: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
e370: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
e380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e390: 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
e3a0: 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
e3b0: 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20  handle.");....  
e3c0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
e3d0: 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  dlePtr = handle;
e3e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
e3f0: 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74  handlePtr == Int
e400: 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
e410: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
e420: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
e430: 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
e440: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
e450: 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
e460: 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
e470: 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d  e pointer.");...
e480: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
e490: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
e4a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
e4b0: 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  .sqlite3_backup_
e4c0: 66 69 6e 69 73 68 28 68 61 6e 64 6c 65 50 74 72  finish(handlePtr
e4d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64  );..        hand
e4e0: 6c 65 2e 53 65 74 48 61 6e 64 6c 65 41 73 49 6e  le.SetHandleAsIn
e4f0: 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  valid();....    
e500: 20 20 20 20 69 66 20 28 28 6e 20 21 3d 20 53 51      if ((n != SQ
e510: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
e520: 29 20 26 26 20 28 6e 20 21 3d 20 62 61 63 6b 75  ) && (n != backu
e530: 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29 0d  p._stepResult)).
e540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
e550: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
e560: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
e570: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
e580: 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e5e0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e5f0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
e600: 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65     /// Determine
e610: 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  s if the SQLite 
e620: 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
e630: 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65   been initialize
e640: 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f  d for the..    /
e650: 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  // current proce
e660: 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ss...    /// </s
e670: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
e680: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
e690: 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e  /// A boolean in
e6a0: 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
e6b0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69   or not the SQLi
e6c0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
e6d0: 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f  has been..    //
e6e0: 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f  / initialized fo
e6f0: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  r the current pr
e700: 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ocess...    /// 
e710: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
e720: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
e730: 65 20 62 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c  e bool IsInitial
e740: 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  ized()..    {.. 
e750: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
e760: 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65  aticIsInitialize
e770: 64 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  d();..    }.... 
e780: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
e790: 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d  ..    /// Determ
e7a0: 69 6e 65 73 20 69 66 20 74 68 65 20 53 51 4c 69  ines if the SQLi
e7b0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
e7c0: 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  has been initial
e7d0: 69 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20  ized for the..  
e7e0: 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72    /// current pr
e7f0: 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ocess...    /// 
e800: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
e810: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
e820: 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e     /// A boolean
e830: 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74   indicating whet
e840: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53  her or not the S
e850: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
e860: 72 79 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20  ry has been..   
e870: 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64   /// initialized
e880: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
e890: 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f   process...    /
e8a0: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
e8b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
e8c0: 69 63 20 62 6f 6f 6c 20 53 74 61 74 69 63 49 73  ic bool StaticIs
e8d0: 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20  Initialized().. 
e8e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
e8f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47  ..        // BUG
e900: 46 49 58 3a 20 50 72 65 76 65 6e 74 20 72 61 63  FIX: Prevent rac
e910: 65 73 20 77 69 74 68 20 6f 74 68 65 72 20 74 68  es with other th
e920: 72 65 61 64 73 20 66 6f 72 20 74 68 69 73 20 65  reads for this e
e930: 6e 74 69 72 65 20 62 6c 6f 63 6b 2c 20 64 75 65  ntire block, due
e940: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
e950: 20 20 20 20 20 74 6f 20 74 68 65 20 74 72 79 2f       to the try/
e960: 66 69 6e 61 6c 6c 79 20 73 65 6d 61 6e 74 69 63  finally semantic
e970: 73 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20 5b  s.  See ticket [
e980: 37 32 39 30 35 63 39 61 37 37 5d 2e 0d 0a 20 20  72905c9a77]...  
e990: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
e9a0: 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74    lock (syncRoot
e9b0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  )..        {..#i
e9c0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
e9d0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
e9e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
e9f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
ea00: 45 3a 20 53 61 76 65 20 74 68 65 20 73 74 61 74  E: Save the stat
ea10: 65 20 6f 66 20 74 68 65 20 6c 6f 67 67 69 6e 67  e of the logging
ea20: 20 63 6c 61 73 73 20 61 6e 64 20 74 68 65 6e 20   class and then 
ea30: 72 65 73 74 6f 72 65 20 69 74 0d 0a 20 20 20 20  restore it..    
ea40: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
ea50: 20 61 66 74 65 72 20 77 65 20 61 72 65 20 64 6f   after we are do
ea60: 6e 65 20 74 6f 20 61 76 6f 69 64 20 6c 6f 67 67  ne to avoid logg
ea70: 69 6e 67 20 74 6f 6f 20 6d 61 6e 79 20 66 61 6c  ing too many fal
ea80: 73 65 20 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20  se errors...    
ea90: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
eaa0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 76          bool sav
eab0: 65 64 45 6e 61 62 6c 65 64 20 3d 20 53 51 4c 69  edEnabled = SQLi
eac0: 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a  teLog.Enabled;..
ead0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
eae0: 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20  teLog.Enabled = 
eaf0: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
eb00: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
eb10: 20 20 20 20 20 20 20 7b 0d 0a 23 65 6e 64 69 66         {..#endif
eb20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eb30: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
eb40: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
eb50: 68 69 73 20 6d 65 74 68 6f 64 20 5b 61 62 5d 75  his method [ab]u
eb60: 73 65 73 20 74 68 65 20 66 61 63 74 20 74 68 61  ses the fact tha
eb70: 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c  t SQLite will al
eb80: 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ways..          
eb90: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72        //       r
eba0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
ebb0: 4f 52 20 66 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f  OR for any unkno
ebc0: 77 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  wn configuration
ebd0: 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20   option..       
ebe0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
ebf0: 20 20 2a 75 6e 6c 65 73 73 2a 20 74 68 65 20 53    *unless* the S
ec00: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 68 61  QLite library ha
ec10: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69  s already been i
ec20: 6e 69 74 69 61 6c 69 7a 65 64 2e 0d 0a 20 20 20  nitialized...   
ec30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
ec40: 20 20 20 20 20 20 49 6e 20 74 68 61 74 20 63 61        In that ca
ec50: 73 65 20 69 74 20 77 69 6c 6c 20 61 6c 77 61 79  se it will alway
ec60: 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  s return SQLITE_
ec70: 4d 49 53 55 53 45 2e 0d 0a 20 20 20 20 20 20 20  MISUSE...       
ec80: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
ec90: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
eca0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
ecb0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
ecc0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
ecd0: 6e 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20 20 20 20  nfig_none(..    
ece0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecf0: 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
ed00: 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
ed10: 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20 20 20 20  G_NONE);....    
ed20: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
ed30: 72 6e 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  rn (rc == SQLite
ed40: 45 72 72 6f 72 43 6f 64 65 2e 4d 69 73 75 73 65  ErrorCode.Misuse
ed50: 29 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  );..#if !PLATFOR
ed60: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
ed70: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
ed80: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  }..            f
ed90: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
eda0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
edb0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
edc0: 2e 45 6e 61 62 6c 65 64 20 3d 20 73 61 76 65 64  .Enabled = saved
edd0: 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20  Enabled;..      
ede0: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
edf0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
ee00: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
ee10: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
ee20: 48 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 20  Helper function 
ee30: 74 6f 20 72 65 74 72 69 65 76 65 20 61 20 63 6f  to retrieve a co
ee40: 6c 75 6d 6e 20 6f 66 20 64 61 74 61 20 66 72 6f  lumn of data fro
ee50: 6d 20 61 6e 20 61 63 74 69 76 65 20 73 74 61 74  m an active stat
ee60: 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ement...    /// 
ee70: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
ee80: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
ee90: 22 73 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65  "stmt">The state
eea0: 6d 65 6e 74 20 62 65 69 6e 67 20 73 74 65 70 28  ment being step(
eeb0: 29 27 64 20 74 68 72 6f 75 67 68 3c 2f 70 61 72  )'d through</par
eec0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
eed0: 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22  ram name="index"
eee0: 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  >The column inde
eef0: 78 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  x to retrieve</p
ef00: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
ef10: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22  param name="typ"
ef20: 3e 54 68 65 20 74 79 70 65 20 6f 66 20 64 61 74  >The type of dat
ef30: 61 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  a contained in t
ef40: 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 55  he column.  If U
ef50: 6e 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68  ninitialized, th
ef60: 69 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c  is function will
ef70: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 64 61   retrieve the da
ef80: 74 61 74 79 70 65 20 69 6e 66 6f 72 6d 61 74 69  tatype informati
ef90: 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  on.</param>..   
efa0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
efb0: 74 75 72 6e 73 20 74 68 65 20 64 61 74 61 20 69  turns the data i
efc0: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65  n the column</re
efd0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
efe0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 62  rnal override ob
eff0: 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 53 51  ject GetValue(SQ
f000: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
f010: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 53  mt, int index, S
f020: 51 4c 69 74 65 54 79 70 65 20 74 79 70 29 0d 0a  QLiteType typ)..
f030: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20      {..      if 
f040: 28 49 73 4e 75 6c 6c 28 73 74 6d 74 2c 20 69 6e  (IsNull(stmt, in
f050: 64 65 78 29 29 20 72 65 74 75 72 6e 20 44 42 4e  dex)) return DBN
f060: 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20  ull.Value;..    
f070: 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61    TypeAffinity a
f080: 66 66 20 3d 20 74 79 70 2e 41 66 66 69 6e 69 74  ff = typ.Affinit
f090: 79 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 20 74  y;..      Type t
f0a0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
f0b0: 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 21    if (typ.Type !
f0c0: 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29  = DbType.Object)
f0d0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
f0e0: 20 20 20 74 20 3d 20 53 51 4c 69 74 65 43 6f 6e     t = SQLiteCon
f0f0: 76 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54  vert.SQLiteTypeT
f100: 6f 54 79 70 65 28 74 79 70 29 3b 0d 0a 20 20 20  oType(typ);..   
f110: 20 20 20 20 20 61 66 66 20 3d 20 54 79 70 65 54       aff = TypeT
f120: 6f 41 66 66 69 6e 69 74 79 28 74 29 3b 0d 0a 20  oAffinity(t);.. 
f130: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f140: 73 77 69 74 63 68 20 28 61 66 66 29 0d 0a 20 20  switch (aff)..  
f150: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63      {..        c
f160: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
f170: 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20  .Blob:..        
f180: 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d    if (typ.Type =
f190: 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26  = DbType.Guid &&
f1a0: 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d   typ.Affinity ==
f1b0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65   TypeAffinity.Te
f1c0: 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt)..           
f1d0: 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64   return new Guid
f1e0: 28 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69  (GetText(stmt, i
f1f0: 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndex));....     
f200: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e       int n = (in
f210: 74 29 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c  t)GetBytes(stmt,
f220: 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c   index, 0, null,
f230: 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 20   0, 0);..       
f240: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 6e 65     byte[] b = ne
f250: 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20  w byte[n];..    
f260: 20 20 20 20 20 20 47 65 74 42 79 74 65 73 28 73        GetBytes(s
f270: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62  tmt, index, 0, b
f280: 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20  , 0, n);....    
f290: 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79        if (typ.Ty
f2a0: 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69  pe == DbType.Gui
f2b0: 64 20 26 26 20 6e 20 3d 3d 20 31 36 29 0d 0a 20  d && n == 16).. 
f2c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
f2d0: 6e 20 6e 65 77 20 47 75 69 64 28 62 29 3b 0d 0a  n new Guid(b);..
f2e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
f2f0: 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20 20 20 63  rn b;..        c
f300: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
f310: 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20 20 20 20  .DateTime:..    
f320: 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
f330: 44 61 74 65 54 69 6d 65 28 73 74 6d 74 2c 20 69  DateTime(stmt, i
f340: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
f350: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
f360: 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20  y.Double:..     
f370: 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75       if (t == nu
f380: 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74 44 6f  ll) return GetDo
f390: 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  uble(stmt, index
f3a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c  );..          el
f3b0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
f3c0: 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43  return Convert.C
f3d0: 68 61 6e 67 65 54 79 70 65 28 47 65 74 44 6f 75  hangeType(GetDou
f3e0: 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ble(stmt, index)
f3f0: 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  , t, null);..   
f400: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
f410: 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20  finity.Int64:.. 
f420: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
f430: 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47  = null) return G
f440: 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e  etInt64(stmt, in
f450: 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
f460: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
f470: 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72     return Conver
f480: 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65 74  t.ChangeType(Get
f490: 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65  Int64(stmt, inde
f4a0: 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20  x), t, null);.. 
f4b0: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d         default:.
f4c0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
f4d0: 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20  n GetText(stmt, 
f4e0: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d  index);..      }
f4f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
f500: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
f510: 20 69 6e 74 20 47 65 74 43 75 72 73 6f 72 46 6f   int GetCursorFo
f520: 72 54 61 62 6c 65 28 53 51 4c 69 74 65 53 74 61  rTable(SQLiteSta
f530: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
f540: 20 64 62 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67   db, int rootPag
f550: 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  e)..    {..#if !
f560: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
f570: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
f580: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f590: 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  s.sqlite3_table_
f5a0: 63 75 72 73 6f 72 28 73 74 6d 74 2e 5f 73 71 6c  cursor(stmt._sql
f5b0: 69 74 65 5f 73 74 6d 74 2c 20 64 62 2c 20 72 6f  ite_stmt, db, ro
f5c0: 6f 74 50 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d  otPage);..#else.
f5d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31  .      return -1
f5e0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
f5f0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
f600: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
f610: 65 74 52 6f 77 49 64 46 6f 72 43 75 72 73 6f 72  etRowIdForCursor
f620: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
f630: 20 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f   stmt, int curso
f640: 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  r)..    {..#if !
f650: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
f660: 0a 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 69  .      long rowi
f670: 64 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  d;..      SQLite
f680: 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55  ErrorCode rc = U
f690: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
f6a0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 75 72 73 6f  ds.sqlite3_curso
f6b0: 72 5f 72 6f 77 69 64 28 73 74 6d 74 2e 5f 73 71  r_rowid(stmt._sq
f6c0: 6c 69 74 65 5f 73 74 6d 74 2c 20 63 75 72 73 6f  lite_stmt, curso
f6d0: 72 2c 20 6f 75 74 20 72 6f 77 69 64 29 3b 0d 0a  r, out rowid);..
f6e0: 20 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20        if (rc == 
f6f0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
f700: 4f 6b 29 20 72 65 74 75 72 6e 20 72 6f 77 69 64  Ok) return rowid
f710: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
f720: 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  n 0;..#else..   
f730: 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65     return 0;..#e
f740: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
f750: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
f760: 72 69 64 65 20 76 6f 69 64 20 47 65 74 49 6e 64  ride void GetInd
f770: 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e 64 65 64  exColumnExtended
f780: 49 6e 66 6f 28 73 74 72 69 6e 67 20 64 61 74 61  Info(string data
f790: 62 61 73 65 2c 20 73 74 72 69 6e 67 20 69 6e 64  base, string ind
f7a0: 65 78 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d  ex, string colum
f7b0: 6e 2c 20 6f 75 74 20 69 6e 74 20 73 6f 72 74 4d  n, out int sortM
f7c0: 6f 64 65 2c 20 6f 75 74 20 69 6e 74 20 6f 6e 45  ode, out int onE
f7d0: 72 72 6f 72 2c 20 6f 75 74 20 73 74 72 69 6e 67  rror, out string
f7e0: 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   collationSequen
f7f0: 63 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ce)..    {..#if 
f800: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
f810: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 63  ..      IntPtr c
f820: 6f 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  oll;..      int 
f830: 63 6f 6c 6c 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  colllen;..      
f840: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
f850: 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 63 20  rc;....      rc 
f860: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
f870: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e  thods.sqlite3_in
f880: 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f  dex_column_info_
f890: 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f  interop(_sql, To
f8a0: 55 54 46 38 28 64 61 74 61 62 61 73 65 29 2c 20  UTF8(database), 
f8b0: 54 6f 55 54 46 38 28 69 6e 64 65 78 29 2c 20 54  ToUTF8(index), T
f8c0: 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f  oUTF8(column), o
f8d0: 75 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74  ut sortMode, out
f8e0: 20 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20 63 6f   onError, out co
f8f0: 6c 6c 2c 20 6f 75 74 20 63 6f 6c 6c 6c 65 6e 29  ll, out colllen)
f900: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63 20  ;..      if (rc 
f910: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
f920: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
f930: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
f940: 28 72 63 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20  (rc, null);.... 
f950: 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65       collationSe
f960: 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53  quence = UTF8ToS
f970: 74 72 69 6e 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c  tring(coll, coll
f980: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
f990: 20 20 20 20 73 6f 72 74 4d 6f 64 65 20 3d 20 30      sortMode = 0
f9a0: 3b 0d 0a 20 20 20 20 20 20 6f 6e 45 72 72 6f 72  ;..      onError
f9b0: 20 3d 20 32 3b 0d 0a 20 20 20 20 20 20 63 6f 6c   = 2;..      col
f9c0: 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d  lationSequence =
f9d0: 20 22 42 49 4e 41 52 59 22 3b 0d 0a 23 65 6e 64   "BINARY";..#end
f9e0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
f9f0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
fa00: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
fa10: 64 65 20 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 73  de FileControl(s
fa20: 74 72 69 6e 67 20 7a 44 62 4e 61 6d 65 2c 20 69  tring zDbName, i
fa30: 6e 74 20 6f 70 2c 20 49 6e 74 50 74 72 20 70 41  nt op, IntPtr pA
fa40: 72 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  rg)..    {..    
fa50: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
fa60: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
fa70: 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
fa80: 6c 28 5f 73 71 6c 2c 20 28 7a 44 62 4e 61 6d 65  l(_sql, (zDbName
fa90: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 55 54   != null) ? ToUT
faa0: 46 38 28 7a 44 62 4e 61 6d 65 29 20 3a 20 6e 75  F8(zDbName) : nu
fab0: 6c 6c 2c 20 6f 70 2c 20 70 41 72 67 29 3b 0d 0a  ll, op, pArg);..
fac0: 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a         }..  }..}..