System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 261b647addcc47f9500f583b840a2888d0a1d7d5:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 20 0d 0a  soft.com).. * ..
00b0: 20 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74   * Released to t
00c0: 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e  he public domain
00d0: 2c 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77  , use at your ow
00e0: 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a  n risk!.. ******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65  **/....namespace
0130: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
0140: 69 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20  ite..{..  using 
0150: 53 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67  System;..  using
0160: 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69   System.Collecti
0170: 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 0d 0a  ons.Generic;....
0180: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
0190: 5f 32 30 20 26 26 20 28 54 52 41 43 45 5f 43 4f  _20 && (TRACE_CO
01a0: 4e 4e 45 43 54 49 4f 4e 20 7c 7c 20 54 52 41 43  NNECTION || TRAC
01b0: 45 5f 53 54 41 54 45 4d 45 4e 54 29 0d 0a 20 20  E_STATEMENT)..  
01c0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61  using System.Dia
01d0: 67 6e 6f 73 74 69 63 73 3b 0d 0a 23 65 6e 64 69  gnostics;..#endi
01e0: 66 0d 0a 0d 0a 20 20 75 73 69 6e 67 20 53 79 73  f....  using Sys
01f0: 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f  tem.Globalizatio
0200: 6e 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  n;..  using Syst
0210: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0220: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 20 20 75  opServices;..  u
0230: 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74  sing System.Text
0240: 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;....  /// <summ
0250: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  ary>..  /// This
0260: 20 69 73 20 74 68 65 20 6d 65 74 68 6f 64 20 73   is the method s
0270: 69 67 6e 61 74 75 72 65 20 66 6f 72 20 74 68 65  ignature for the
0280: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
0290: 72 61 72 79 20 6c 6f 67 67 69 6e 67 20 63 61 6c  rary logging cal
02a0: 6c 62 61 63 6b 0d 0a 20 20 2f 2f 2f 20 66 75 6e  lback..  /// fun
02b0: 63 74 69 6f 6e 20 66 6f 72 20 75 73 65 20 77 69  ction for use wi
02c0: 74 68 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  th sqlite3_log()
02d0: 20 61 6e 64 20 74 68 65 20 53 51 4c 49 54 45 5f   and the SQLITE_
02e0: 43 4f 4e 46 49 47 5f 4c 4f 47 2e 0d 0a 20 20 2f  CONFIG_LOG...  /
02f0: 2f 2f 0d 0a 20 20 2f 2f 2f 20 57 41 52 4e 49 4e  //..  /// WARNIN
0300: 47 3a 20 54 68 69 73 20 64 65 6c 65 67 61 74 65  G: This delegate
0310: 20 69 73 20 75 73 65 64 20 6d 6f 72 65 2d 6f 72   is used more-or
0320: 2d 6c 65 73 73 20 64 69 72 65 63 74 6c 79 20 62  -less directly b
0330: 79 20 6e 61 74 69 76 65 20 63 6f 64 65 2c 20 64  y native code, d
0340: 6f 0d 0a 20 20 2f 2f 2f 20 20 20 20 20 20 20 20  o..  ///        
0350: 20 20 6e 6f 74 20 6d 6f 64 69 66 79 20 69 74 73    not modify its
0360: 20 74 79 70 65 20 73 69 67 6e 61 74 75 72 65 2e   type signature.
0370: 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
0380: 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  y>..  /// <param
0390: 20 6e 61 6d 65 3d 22 70 55 73 65 72 44 61 74 61   name="pUserData
03a0: 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 65 78  ">..  /// The ex
03b0: 74 72 61 20 64 61 74 61 20 61 73 73 6f 63 69 61  tra data associa
03c0: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6d 65  ted with this me
03d0: 73 73 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d 0a  ssage, if any...
03e0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
03f0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
0400: 65 3d 22 65 72 72 6f 72 43 6f 64 65 22 3e 0d 0a  e="errorCode">..
0410: 20 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72 20    /// The error 
0420: 63 6f 64 65 20 61 73 73 6f 63 69 61 74 65 64 20  code associated 
0430: 77 69 74 68 20 74 68 69 73 20 6d 65 73 73 61 67  with this messag
0440: 65 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  e...  /// </para
0450: 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  m>..  /// <param
0460: 20 6e 61 6d 65 3d 22 70 4d 65 73 73 61 67 65 22   name="pMessage"
0470: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 6d 65 73  >..  /// The mes
0480: 73 61 67 65 20 73 74 72 69 6e 67 20 74 6f 20 62  sage string to b
0490: 65 20 6c 6f 67 67 65 64 2e 0d 0a 20 20 2f 2f 2f  e logged...  ///
04a0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 23 69 66 20 21   </param>..#if !
04b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
04c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 5b 55 6e  FRAMEWORK..  [Un
04d0: 6d 61 6e 61 67 65 64 46 75 6e 63 74 69 6f 6e 50  managedFunctionP
04e0: 6f 69 6e 74 65 72 28 43 61 6c 6c 69 6e 67 43 6f  ointer(CallingCo
04f0: 6e 76 65 6e 74 69 6f 6e 2e 43 64 65 63 6c 29 5d  nvention.Cdecl)]
0500: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 69 6e 74 65  ..#endif..  inte
0510: 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f  rnal delegate vo
0520: 69 64 20 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c  id SQLiteLogCall
0530: 62 61 63 6b 28 49 6e 74 50 74 72 20 70 55 73 65  back(IntPtr pUse
0540: 72 44 61 74 61 2c 20 69 6e 74 20 65 72 72 6f 72  rData, int error
0550: 43 6f 64 65 2c 20 49 6e 74 50 74 72 20 70 4d 65  Code, IntPtr pMe
0560: 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f  ssage);....  ///
0570: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f   <summary>..  //
0580: 2f 20 54 68 69 73 20 63 6c 61 73 73 20 69 6d 70  / This class imp
0590: 6c 65 6d 65 6e 74 73 20 53 51 4c 69 74 65 42 61  lements SQLiteBa
05a0: 73 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2c 20 61  se completely, a
05b0: 6e 64 20 69 73 20 74 68 65 20 67 75 74 73 20 6f  nd is the guts o
05c0: 66 20 74 68 65 20 63 6f 64 65 20 74 68 61 74 20  f the code that 
05d0: 69 6e 74 65 72 6f 70 27 73 20 53 51 4c 69 74 65  interop's SQLite
05e0: 20 77 69 74 68 20 2e 4e 45 54 0d 0a 20 20 2f 2f   with .NET..  //
05f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0600: 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 53  internal class S
0610: 51 4c 69 74 65 33 20 3a 20 53 51 4c 69 74 65 42  QLite3 : SQLiteB
0620: 61 73 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 70 72  ase..  {..    pr
0630: 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a  ivate static obj
0640: 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e  ect syncRoot = n
0650: 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 0d 0a  ew object();....
0660: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 2f 2f 20 4e      //..    // N
0670: 4f 54 45 3a 20 54 68 69 73 20 69 73 20 74 68 65  OTE: This is the
0680: 20 70 75 62 6c 69 63 20 6b 65 79 20 66 6f 72 20   public key for 
0690: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
06a0: 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 2e  SQLite assembly.
06b0: 20 20 49 66 20 79 6f 75 20 63 68 61 6e 67 65 20    If you change 
06c0: 74 68 65 0d 0a 20 20 20 20 2f 2f 20 20 20 20 20  the..    //     
06d0: 20 20 53 4e 4b 20 66 69 6c 65 2c 20 79 6f 75 20    SNK file, you 
06e0: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 63 68 61  will need to cha
06f0: 6e 67 65 20 74 68 69 73 20 61 73 20 77 65 6c 6c  nge this as well
0700: 2e 0d 0a 20 20 20 20 2f 2f 0d 0a 20 20 20 20 69  ...    //..    i
0710: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74  nternal const st
0720: 72 69 6e 67 20 50 75 62 6c 69 63 4b 65 79 20 3d  ring PublicKey =
0730: 0d 0a 20 20 20 20 20 20 20 20 22 30 30 32 34 30  ..        "00240
0740: 30 30 30 30 34 38 30 30 30 30 30 39 34 30 30 30  0000480000094000
0750: 30 30 30 30 36 30 32 30 30 30 30 30 30 32 34 30  0000602000000240
0760: 30 30 30 35 32 35 33 34 31 33 31 30 30 30 34 30  0005253413100040
0770: 30 30 30 30 31 30 30 30 31 30 30 30 35 61 32 38  0000100010005a28
0780: 38 64 65 35 36 38 37 63 34 65 31 22 20 2b 0d 0a  8de5687c4e1" +..
0790: 20 20 20 20 20 20 20 20 22 62 36 32 31 64 64 66          "b621ddf
07a0: 66 35 64 38 34 34 37 32 37 34 31 38 39 35 36 39  f5d8447274189569
07b0: 39 37 66 34 37 35 65 62 38 32 39 34 32 39 65 34  97f475eb829429e4
07c0: 31 31 61 66 66 33 65 39 33 66 39 37 62 37 30 64  11aff3e93f97b70d
07d0: 65 36 39 38 62 39 37 32 36 34 30 39 32 35 62 64  e698b972640925bd
07e0: 64 34 34 32 38 30 64 66 30 22 20 2b 0d 0a 20 20  d44280df0" +..  
07f0: 20 20 20 20 20 20 22 61 32 35 61 38 34 33 32 36        "a25a84326
0800: 36 39 37 33 37 30 34 31 33 37 63 62 62 30 65 37  6973704137cbb0e7
0810: 34 34 31 63 31 66 65 37 63 61 65 34 65 32 34 34  441c1fe7cae4e244
0820: 30 61 65 39 31 61 62 38 63 64 65 33 39 33 33 66  0ae91ab8cde3933f
0830: 65 62 63 62 31 61 63 34 38 64 64 33 33 62 34 30  ebcb1ac48dd33b40
0840: 65 31 33 63 34 32 31 22 20 2b 0d 0a 20 20 20 20  e13c421" +..    
0850: 20 20 20 20 22 64 38 32 31 35 63 31 38 61 34 33      "d8215c18a43
0860: 34 39 61 34 33 36 64 64 34 39 39 65 33 63 33 38  49a436dd499e3c38
0870: 35 63 63 36 38 33 30 31 35 66 38 38 36 66 36 63  5cc683015f886f6c
0880: 31 30 62 64 39 30 31 31 35 65 62 32 62 64 36 31  10bd90115eb2bd61
0890: 62 36 37 37 35 30 38 33 39 65 33 61 31 39 39 34  b67750839e3a1994
08a0: 31 64 63 39 63 22 3b 0d 0a 0d 0a 23 69 66 20 21  1dc9c";....#if !
08b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
08c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 69  FRAMEWORK..    i
08d0: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74  nternal const st
08e0: 72 69 6e 67 20 44 65 73 69 67 6e 65 72 56 65 72  ring DesignerVer
08f0: 73 69 6f 6e 20 3d 20 22 31 2e 30 2e 38 37 2e 30  sion = "1.0.87.0
0900: 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  ";..#endif....  
0910: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0920: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 70 61  .    /// The opa
0930: 71 75 65 20 70 6f 69 6e 74 65 72 20 72 65 74 75  que pointer retu
0940: 72 6e 65 64 20 74 6f 20 75 73 20 62 79 20 74 68  rned to us by th
0950: 65 20 73 71 6c 69 74 65 20 70 72 6f 76 69 64 65  e sqlite provide
0960: 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  r..    /// </sum
0970: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0980: 63 74 65 64 20 69 6e 74 65 72 6e 61 6c 20 53 51  cted internal SQ
0990: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
09a0: 6e 64 6c 65 20 5f 73 71 6c 3b 0d 0a 20 20 20 20  ndle _sql;..    
09b0: 70 72 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67  protected string
09c0: 20 5f 66 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20   _fileName;..   
09d0: 20 70 72 6f 74 65 63 74 65 64 20 62 6f 6f 6c 20   protected bool 
09e0: 5f 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 70  _usePool;..    p
09f0: 72 6f 74 65 63 74 65 64 20 69 6e 74 20 5f 70 6f  rotected int _po
0a00: 6f 6c 56 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 23 69  olVersion;....#i
0a10: 66 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54  f (NET_35 || NET
0a20: 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 29 20 26  _40 || NET_45) &
0a30: 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  & !PLATFORM_COMP
0a40: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
0a50: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 5f    private bool _
0a60: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 3b 0d  buildingSchema;.
0a70: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
0a80: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0a90: 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72 2d 64    /// The user-d
0aa0: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
0ab0: 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e 20 74   registered on t
0ac0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  his connection..
0ad0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ae0: 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  y>..    protecte
0af0: 64 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  d SQLiteFunction
0b00: 5b 5d 20 5f 66 75 6e 63 74 69 6f 6e 73 41 72 72  [] _functionsArr
0b10: 61 79 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52  ay;....#if INTER
0b20: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
0b30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0b40: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
0b50: 20 6d 6f 64 75 6c 65 73 20 63 72 65 61 74 65 64   modules created
0b60: 20 75 73 69 6e 67 20 74 68 69 73 20 63 6f 6e 6e   using this conn
0b70: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
0b80: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0b90: 20 70 72 6f 74 65 63 74 65 64 20 44 69 63 74 69   protected Dicti
0ba0: 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51  onary<string, SQ
0bb0: 4c 69 74 65 4d 6f 64 75 6c 65 3e 20 5f 6d 6f 64  LiteModule> _mod
0bc0: 75 6c 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ules;..#endif...
0bd0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
0be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c30: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
0c40: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0c50: 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 74 68  // Constructs th
0c60: 65 20 6f 62 6a 65 63 74 20 75 73 65 64 20 74 6f  e object used to
0c70: 20 69 6e 74 65 72 61 63 74 20 77 69 74 68 20 74   interact with t
0c80: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
0c90: 69 62 72 61 72 79 0d 0a 20 20 20 20 2f 2f 2f 20  ibrary..    /// 
0ca0: 75 73 69 6e 67 20 74 68 65 20 55 54 46 2d 38 20  using the UTF-8 
0cb0: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 0d 0a  text encoding...
0cc0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0cd0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
0ce0: 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e 0d 0a  am name="fmt">..
0cf0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 44 61 74 65      /// The Date
0d00: 54 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20 62  Time format to b
0d10: 65 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6e 76  e used when conv
0d20: 65 72 74 69 6e 67 20 73 74 72 69 6e 67 20 76 61  erting string va
0d30: 6c 75 65 73 20 74 6f 20 61 0d 0a 20 20 20 20 2f  lues to a..    /
0d40: 2f 2f 20 44 61 74 65 54 69 6d 65 20 61 6e 64 20  // DateTime and 
0d50: 62 69 6e 64 69 6e 67 20 44 61 74 65 54 69 6d 65  binding DateTime
0d60: 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20   parameters...  
0d70: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
0d80: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
0d90: 61 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20 20 20  ame="kind">..   
0da0: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
0db0: 65 66 3d 22 44 61 74 65 54 69 6d 65 4b 69 6e 64  ef="DateTimeKind
0dc0: 22 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64 20  " /> to be used 
0dd0: 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 44 61  when creating Da
0de0: 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20  teTime..    /// 
0df0: 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f  values...    ///
0e00: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
0e10: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0e20: 66 6d 74 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20  fmtString">..   
0e30: 20 2f 2f 2f 20 54 68 65 20 66 6f 72 6d 61 74 20   /// The format 
0e40: 73 74 72 69 6e 67 20 74 6f 20 62 65 20 75 73 65  string to be use
0e50: 64 20 77 68 65 6e 20 70 61 72 73 69 6e 67 20 61  d when parsing a
0e60: 6e 64 20 66 6f 72 6d 61 74 74 69 6e 67 20 44 61  nd formatting Da
0e70: 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20  teTime..    /// 
0e80: 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f  values...    ///
0e90: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
0ea0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0eb0: 64 62 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  db">..    /// Th
0ec0: 65 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20  e native handle 
0ed0: 74 6f 20 62 65 20 61 73 73 6f 63 69 61 74 65 64  to be associated
0ee0: 20 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61   with the databa
0ef0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  se connection...
0f00: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
0f10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0f20: 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22   name="fileName"
0f30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
0f40: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66  ully qualified f
0f50: 69 6c 65 20 6e 61 6d 65 20 61 73 73 6f 63 69 61  ile name associa
0f60: 74 65 64 20 77 69 74 68 20 3c 70 61 72 61 6d 72  ted with <paramr
0f70: 65 66 20 6e 61 6d 65 3d 22 64 62 20 22 2f 3e 2e  ef name="db "/>.
0f80: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
0f90: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
0fa0: 61 6d 20 6e 61 6d 65 3d 22 6f 77 6e 48 61 6e 64  am name="ownHand
0fb0: 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  le">..    /// No
0fc0: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 65  n-zero if the ne
0fd0: 77 6c 79 20 63 72 65 61 74 65 64 20 6f 62 6a 65  wly created obje
0fe0: 63 74 20 69 6e 73 74 61 6e 63 65 20 77 69 6c 6c  ct instance will
0ff0: 20 6e 65 65 64 20 74 6f 20 64 69 73 70 6f 73 65   need to dispose
1000: 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 3c 70 61  ..    /// of <pa
1010: 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 64 62 22  ramref name="db"
1020: 20 2f 3e 20 77 68 65 6e 20 69 74 20 69 73 20 6e   /> when it is n
1030: 6f 20 6c 6f 6e 67 65 72 20 6e 65 65 64 65 64 2e  o longer needed.
1040: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
1050: 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
1060: 20 53 51 4c 69 74 65 33 28 0d 0a 20 20 20 20 20   SQLite3(..     
1070: 20 20 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72     SQLiteDateFor
1080: 6d 61 74 73 20 66 6d 74 2c 0d 0a 20 20 20 20 20  mats fmt,..     
1090: 20 20 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20     DateTimeKind 
10a0: 6b 69 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 73  kind,..        s
10b0: 74 72 69 6e 67 20 66 6d 74 53 74 72 69 6e 67 2c  tring fmtString,
10c0: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
10d0: 20 64 62 2c 0d 0a 20 20 20 20 20 20 20 20 73 74   db,..        st
10e0: 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
10f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f 77 6e          bool own
1100: 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20  Handle..        
1110: 29 0d 0a 20 20 20 20 20 20 3a 20 62 61 73 65 28  )..      : base(
1120: 66 6d 74 2c 20 6b 69 6e 64 2c 20 66 6d 74 53 74  fmt, kind, fmtSt
1130: 72 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ring)..    {..  
1140: 20 20 20 20 20 20 69 66 20 28 64 62 20 21 3d 20        if (db != 
1150: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
1160: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1170: 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20       _sql = new 
1180: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1190: 48 61 6e 64 6c 65 28 64 62 2c 20 6f 77 6e 48 61  Handle(db, ownHa
11a0: 6e 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndle);..        
11b0: 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20      _fileName = 
11c0: 66 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  fileName;..     
11d0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
11e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
11f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1240: 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
1250: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50  n IDisposable "P
1260: 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d  attern" Members.
1270: 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f  .    private boo
1280: 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20  l disposed;..   
1290: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
12a0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a  eckDisposed() /*
12b0: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b   throw */..    {
12c0: 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44  ..#if THROW_ON_D
12d0: 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20  ISPOSED..       
12e0: 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a   if (disposed)..
12f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1300: 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70  w new ObjectDisp
1310: 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74 79  osedException(ty
1320: 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2e 4e 61  peof(SQLite3).Na
1330: 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  me);..#endif..  
1340: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
1350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
13b0: 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72    protected over
13c0: 72 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73  ride void Dispos
13d0: 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67  e(bool disposing
13e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
13f0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
1400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1410: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
1420: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1430: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69               //i
1440: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
1450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1460: 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  /{..            
1470: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f      //    //////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b0: 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65  //    // dispose
14c0: 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
14d0: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
14e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
14f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1510: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
1520: 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20          //}.... 
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1560: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1570: 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73         // releas
1580: 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f  e unmanaged reso
1590: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54  /////....#if INT
15e0: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
15f0: 4c 45 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  LE..            
1600: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1610: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1620: 20 49 66 20 61 6e 79 20 6d 6f 64 75 6c 65 73 20   If any modules 
1630: 77 65 72 65 20 63 72 65 61 74 65 64 2c 20 61 74  were created, at
1640: 74 65 6d 70 74 20 74 6f 20 64 69 73 70 6f 73 65  tempt to dispose
1650: 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20   of..           
1660: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
1670: 65 6d 20 6e 6f 77 2e 20 20 54 68 69 73 20 63 6f  em now.  This co
1680: 64 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74  de is designed t
1690: 6f 20 61 76 6f 69 64 20 74 68 72 6f 77 69 6e 67  o avoid throwing
16a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16b0: 20 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70    //       excep
16c0: 74 69 6f 6e 73 20 75 6e 6c 65 73 73 20 74 68 65  tions unless the
16d0: 20 44 69 73 70 6f 73 65 20 6d 65 74 68 6f 64 20   Dispose method 
16e0: 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 0d 0a 20  of the module.. 
16f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1700: 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 74  /       itself t
1710: 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74 69  hrows an excepti
1720: 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on...           
1730: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1740: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f           if (_mo
1750: 64 75 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a  dules != null)..
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1770: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1780: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
1790: 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74 72  KeyValuePair<str
17a0: 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c  ing, SQLiteModul
17b0: 65 3e 20 70 61 69 72 20 69 6e 20 5f 6d 6f 64 75  e> pair in _modu
17c0: 6c 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  les)..          
17d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f0: 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
1800: 65 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69 72 2e  e module = pair.
1810: 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  Value;....      
1820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1830: 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
1840: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1860: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1880: 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44          module.D
1890: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18c0: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
18e0: 6c 6f 73 65 28 66 61 6c 73 65 29 3b 20 2f 2a 20  lose(false); /* 
18f0: 44 69 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e 6f  Disposing, canno
1900: 74 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a 0d 0a 20  t throw. */.... 
1910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1920: 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d  isposed = true;.
1930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1940: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1950: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
1960: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1970: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
1980: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 20 20 20  disposing);..   
1990: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
19a0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
19b0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
19c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a10: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49  ////....    // I
1a20: 74 20 69 73 6e 27 74 20 6e 65 63 65 73 73 61 72  t isn't necessar
1a30: 79 20 74 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79  y to cleanup any
1a40: 20 66 75 6e 63 74 69 6f 6e 73 20 77 65 27 76 65   functions we've
1a50: 20 72 65 67 69 73 74 65 72 65 64 2e 20 20 49 66   registered.  If
1a60: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d   the connection.
1a70: 0a 20 20 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20  .    // goes to 
1a80: 74 68 65 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20  the pool and is 
1a90: 72 65 73 75 72 72 65 63 74 65 64 20 6c 61 74 65  resurrected late
1aa0: 72 2c 20 72 65 2d 72 65 67 69 73 74 65 72 65 64  r, re-registered
1ab0: 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20   functions will 
1ac0: 6f 76 65 72 77 72 69 74 65 20 74 68 65 0d 0a 20  overwrite the.. 
1ad0: 20 20 20 2f 2f 20 70 72 65 76 69 6f 75 73 20 66     // previous f
1ae0: 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 53  unctions.  The S
1af0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f  QLiteFunctionCoo
1b00: 6b 69 65 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74  kieHandle will t
1b10: 61 6b 65 20 63 61 72 65 20 6f 66 20 66 72 65 65  ake care of free
1b20: 69 6e 67 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20  ing unmanaged.. 
1b30: 20 20 20 2f 2f 20 72 65 73 6f 75 72 63 65 73 20     // resources 
1b40: 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65  belonging to the
1b50: 20 70 72 65 76 69 6f 75 73 6c 79 2d 72 65 67 69   previously-regi
1b60: 73 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73  stered functions
1b70: 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1b80: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c  override void Cl
1b90: 6f 73 65 28 62 6f 6f 6c 20 63 61 6e 54 68 72 6f  ose(bool canThro
1ba0: 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  w)..    {..     
1bb0: 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c   if (_sql != nul
1bc0: 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
1bd0: 20 20 20 20 20 20 20 69 66 20 28 21 5f 73 71 6c         if (!_sql
1be0: 2e 4f 77 6e 48 61 6e 64 6c 65 29 0d 0a 20 20 20  .OwnHandle)..   
1bf0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c00: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
1c10: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
1c20: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20      return;..   
1c30: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1c40: 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f        if (_usePo
1c50: 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ol)..          {
1c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c70: 69 66 20 28 53 51 4c 69 74 65 42 61 73 65 2e 52  if (SQLiteBase.R
1c80: 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f  esetConnection(_
1c90: 73 71 6c 2c 20 5f 73 71 6c 2c 20 63 61 6e 54 68  sql, _sql, canTh
1ca0: 72 6f 77 29 29 0d 0a 20 20 20 20 20 20 20 20 20  row))..         
1cb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1cc0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1cd0: 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41  ConnectionPool.A
1ce0: 64 64 28 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 73  dd(_fileName, _s
1cf0: 71 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e  ql, _poolVersion
1d00: 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  );....#if !NET_C
1d10: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
1d20: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d40: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
1d50: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
1d60: 43 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 53 75 63  Close (Pool) Suc
1d70: 63 65 73 73 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c  cess: {0}", _sql
1d80: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
1d90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69             }..#i
1da0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
1db0: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
1dc0: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
1dd0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
1de0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1e00: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74  ace.WriteLine(St
1e10: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43 6c 6f  ring.Format("Clo
1e20: 73 65 20 28 50 6f 6f 6c 29 20 46 61 69 6c 75 72  se (Pool) Failur
1e30: 65 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29 29 3b  e: {0}", _sql));
1e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e50: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
1e60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1e70: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1e80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e90: 20 20 20 5f 73 71 6c 2e 44 69 73 70 6f 73 65 28     _sql.Dispose(
1ea0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
1eb0: 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20  .          _sql 
1ec0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d  = null;..      }
1ed0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1f40: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1f50: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 61 6e  verride void Can
1f60: 63 65 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  cel()..    {..  
1f70: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
1f80: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
1f90: 69 6e 74 65 72 72 75 70 74 28 5f 73 71 6c 29 3b  interrupt(_sql);
1fa0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1fb0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1fc0: 20 73 74 72 69 6e 67 20 56 65 72 73 69 6f 6e 0d   string Version.
1fd0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
1fe0: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
1ff0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
2000: 65 33 2e 53 51 4c 69 74 65 56 65 72 73 69 6f 6e  e3.SQLiteVersion
2010: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
2020: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
2030: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56  l override int V
2040: 65 72 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20  ersionNumber..  
2050: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
2060: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2070: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 33 2e   return SQLite3.
2080: 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d  SQLiteVersionNum
2090: 62 65 72 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ber;..      }.. 
20a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
20b0: 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69  rnal static stri
20c0: 6e 67 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e  ng DefineConstan
20d0: 74 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ts..    {..     
20e0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
20f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
2100: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73  tringBuilder res
2110: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
2120: 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20  Builder();..    
2130: 20 20 20 20 20 20 20 20 49 4c 69 73 74 3c 73 74          IList<st
2140: 72 69 6e 67 3e 20 6c 69 73 74 20 3d 20 53 51 4c  ring> list = SQL
2150: 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e  iteDefineConstan
2160: 74 73 2e 4f 70 74 69 6f 6e 4c 69 73 74 3b 0d 0a  ts.OptionList;..
2170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2180: 20 28 6c 69 73 74 20 21 3d 20 6e 75 6c 6c 29 0d   (list != null).
2190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
21a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b0: 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67 20  foreach (string 
21c0: 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 73 74 29  element in list)
21d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6c 65           if (ele
2200: 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ment == null).. 
2210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2220: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
2230: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2240: 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
2250: 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  lt.Length > 0)..
2260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2270: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
2280: 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a 20  ppend(' ');.... 
2290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a0: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
22b0: 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20  (element);..    
22c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
22d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
22e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
22f0: 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69  rn result.ToStri
2300: 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ng();..        }
2310: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
2320: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73  nternal static s
2330: 74 72 69 6e 67 20 53 51 4c 69 74 65 56 65 72 73  tring SQLiteVers
2340: 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ion..    {..    
2350: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
2360: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
2370: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
2380: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2390: 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
23a0: 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a 20 20 20 20  on(), -1);..    
23b0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
23c0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
23d0: 63 20 69 6e 74 20 53 51 4c 69 74 65 56 65 72 73  c int SQLiteVers
23e0: 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20 7b  ionNumber..    {
23f0: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
2400: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
2410: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
2420: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
2430: 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62  _libversion_numb
2440: 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  er();..      }..
2450: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
2460: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72  ernal static str
2470: 69 6e 67 20 53 51 4c 69 74 65 53 6f 75 72 63 65  ing SQLiteSource
2480: 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  Id..    {..     
2490: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
24a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54         return UT
24b0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
24c0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
24d0: 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28  qlite3_sourceid(
24e0: 29 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d  ), -1);..      }
24f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
2500: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
2510: 20 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69 74   bool AutoCommit
2520: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
2530: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
2540: 20 20 20 20 20 72 65 74 75 72 6e 20 49 73 41 75       return IsAu
2550: 74 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c 20 5f  tocommit(_sql, _
2560: 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  sql);..      }..
2570: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
2580: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
2590: 6f 6e 67 20 4c 61 73 74 49 6e 73 65 72 74 52 6f  ong LastInsertRo
25a0: 77 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  wId..    {..    
25b0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
25c0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
25d0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
25e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
25f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2600: 64 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  ds.sqlite3_last_
2610: 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 5f 73 71  insert_rowid(_sq
2620: 6c 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  l);..#elif !SQLI
2630: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
2640: 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 49 64 20       long rowId 
2650: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e  = 0;..        Un
2660: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
2670: 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  s.sqlite3_last_i
2680: 6e 73 65 72 74 5f 72 6f 77 69 64 5f 69 6e 74 65  nsert_rowid_inte
2690: 72 6f 70 28 5f 73 71 6c 2c 20 72 65 66 20 72 6f  rop(_sql, ref ro
26a0: 77 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  wId);..        r
26b0: 65 74 75 72 6e 20 72 6f 77 49 64 3b 0d 0a 23 65  eturn rowId;..#e
26c0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72  lse..        thr
26d0: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
26e0: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
26f0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
2700: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
2710: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
2720: 64 65 20 69 6e 74 20 43 68 61 6e 67 65 73 0d 0a  de int Changes..
2730: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
2740: 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21  ..      {..#if !
2750: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
2760: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
2770: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2780: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e  ods.sqlite3_chan
2790: 67 65 73 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  ges_interop(_sql
27a0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
27b0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
27c0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
27d0: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 5f 73  lite3_changes(_s
27e0: 71 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ql);..#endif..  
27f0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
2800: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
2810: 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72  rride long Memor
2820: 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20  yUsed..    {..  
2830: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
2840: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
2850: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
2860: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2870: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2880: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d  hods.sqlite3_mem
2890: 6f 72 79 5f 75 73 65 64 28 29 3b 0d 0a 23 65 6c  ory_used();..#el
28a0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
28b0: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6e  ARD..        lon
28c0: 67 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20  g bytes = 0;..  
28d0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
28e0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
28f0: 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 5f 69 6e  3_memory_used_in
2900: 74 65 72 6f 70 28 72 65 66 20 62 79 74 65 73 29  terop(ref bytes)
2910: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
2920: 6e 20 62 79 74 65 73 3b 0d 0a 23 65 6c 73 65 0d  n bytes;..#else.
2930: 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e  .        throw n
2940: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
2950: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
2960: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a  endif..      }..
2970: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
2980: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
2990: 6f 6e 67 20 4d 65 6d 6f 72 79 48 69 67 68 77 61  ong MemoryHighwa
29a0: 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ter..    {..    
29b0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
29c0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
29d0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
29e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
29f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2a00: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  ds.sqlite3_memor
2a10: 79 5f 68 69 67 68 77 61 74 65 72 28 30 29 3b 0d  y_highwater(0);.
2a20: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
2a30: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
2a40: 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20 30 3b   long bytes = 0;
2a50: 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65  ..        Unsafe
2a60: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
2a70: 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67  lite3_memory_hig
2a80: 68 77 61 74 65 72 5f 69 6e 74 65 72 6f 70 28 30  hwater_interop(0
2a90: 2c 20 72 65 66 20 62 79 74 65 73 29 3b 0d 0a 20  , ref bytes);.. 
2aa0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79         return by
2ab0: 74 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  tes;..#else..   
2ac0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
2ad0: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
2ae0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
2af0: 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  f..      }..    
2b00: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
2b10: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
2b20: 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  Returns non-zero
2b30: 20 69 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69   if the underlyi
2b40: 6e 67 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63  ng native connec
2b50: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f  tion handle is o
2b60: 77 6e 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 79  wned..    /// by
2b70: 20 74 68 69 73 20 69 6e 73 74 61 6e 63 65 2e 0d   this instance..
2b80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
2b90: 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
2ba0: 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
2bb0: 4f 77 6e 48 61 6e 64 6c 65 0d 0a 20 20 20 20 7b  OwnHandle..    {
2bc0: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20  ..        get.. 
2bd0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2be0: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
2bf0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2c00: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
2c10: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
2c20: 6f 6e 28 22 6e 6f 20 63 6f 6e 6e 65 63 74 69 6f  on("no connectio
2c30: 6e 20 68 61 6e 64 6c 65 20 61 76 61 69 6c 61 62  n handle availab
2c40: 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  le");....       
2c50: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 73 71 6c       return _sql
2c60: 2e 4f 77 6e 48 61 6e 64 6c 65 3b 0d 0a 20 20 20  .OwnHandle;..   
2c70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2c80: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
2c90: 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
2ca0: 6f 72 43 6f 64 65 20 53 65 74 4d 65 6d 6f 72 79  orCode SetMemory
2cb0: 53 74 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75  Status(bool valu
2cc0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
2cd0: 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63     return Static
2ce0: 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28  SetMemoryStatus(
2cf0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  value);..    }..
2d00: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
2d10: 74 61 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f  tatic SQLiteErro
2d20: 72 43 6f 64 65 20 53 74 61 74 69 63 53 65 74 4d  rCode StaticSetM
2d30: 65 6d 6f 72 79 53 74 61 74 75 73 28 62 6f 6f 6c  emoryStatus(bool
2d40: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
2d50: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
2d60: 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
2d70: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2d80: 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f  .sqlite3_config_
2d90: 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  int(..          
2da0: 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70    SQLiteConfigOp
2db0: 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e  sEnum.SQLITE_CON
2dc0: 46 49 47 5f 4d 45 4d 53 54 41 54 55 53 2c 20 76  FIG_MEMSTATUS, v
2dd0: 61 6c 75 65 20 3f 20 31 20 3a 20 30 29 3b 0d 0a  alue ? 1 : 0);..
2de0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2df0: 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   rc;..    }.... 
2e00: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2e10: 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f  ..    /// Shutdo
2e20: 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e  wn the SQLite en
2e30: 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20  gine so that it 
2e40: 63 61 6e 20 62 65 20 72 65 73 74 61 72 74 65 64  can be restarted
2e50: 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 20   with different 
2e60: 63 6f 6e 66 69 67 20 6f 70 74 69 6f 6e 73 2e 0d  config options..
2e70: 0a 20 20 20 20 2f 2f 2f 20 57 65 20 64 65 70 65  .    /// We depe
2e80: 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69  nd on auto initi
2e90: 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63  alization to rec
2ea0: 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  over...    /// <
2eb0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
2ec0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
2ed0: 72 6e 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64  rns a result cod
2ee0: 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  e</returns>..   
2ef0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
2f00: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
2f10: 64 65 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a 20  de Shutdown().. 
2f20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
2f30: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
2f40: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
2f50: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73  ethods.sqlite3_s
2f60: 68 75 74 64 6f 77 6e 28 29 3b 0d 0a 20 20 20 20  hutdown();..    
2f70: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a      return rc;..
2f80: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
2f90: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
2fa0: 6f 6f 6c 20 49 73 4f 70 65 6e 28 29 0d 0a 20 20  ool IsOpen()..  
2fb0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
2fc0: 75 72 6e 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c  urn (_sql != nul
2fd0: 6c 29 20 26 26 20 21 5f 73 71 6c 2e 49 73 49 6e  l) && !_sql.IsIn
2fe0: 76 61 6c 69 64 20 26 26 20 21 5f 73 71 6c 2e 49  valid && !_sql.I
2ff0: 73 43 6c 6f 73 65 64 3b 0d 0a 20 20 20 20 7d 0d  sClosed;..    }.
3000: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
3010: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4f 70  override void Op
3020: 65 6e 28 73 74 72 69 6e 67 20 73 74 72 46 69 6c  en(string strFil
3030: 65 6e 61 6d 65 2c 20 53 51 4c 69 74 65 43 6f 6e  ename, SQLiteCon
3040: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e  nectionFlags con
3050: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51  nectionFlags, SQ
3060: 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75  LiteOpenFlagsEnu
3070: 6d 20 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74  m openFlags, int
3080: 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f   maxPoolSize, bo
3090: 6f 6c 20 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20  ol usePool)..   
30a0: 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20   {..      //..  
30b0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
30c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
30d0: 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
30e0: 6e 74 6c 79 20 6f 70 65 6e 2c 20 61 74 74 65 6d  ntly open, attem
30f0: 70 74 20 74 6f 0d 0a 20 20 20 20 20 20 2f 2f 20  pt to..      // 
3100: 20 20 20 20 20 20 63 6c 6f 73 65 20 69 74 20 6e        close it n
3110: 6f 77 2e 20 20 54 68 69 73 20 6d 75 73 74 20 62  ow.  This must b
3120: 65 20 64 6f 6e 65 20 62 65 63 61 75 73 65 20 74  e done because t
3130: 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72 0d  he file name or.
3140: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
3150: 6f 74 68 65 72 20 70 61 72 61 6d 65 74 65 72 73  other parameters
3160: 20 74 68 61 74 20 6d 61 79 20 69 6d 70 61 63 74   that may impact
3170: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
3180: 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20  database..      
3190: 2f 2f 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74  //       connect
31a0: 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63 68 61  ion may have cha
31b0: 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d  nged...      //.
31c0: 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20  .      if (_sql 
31d0: 21 3d 20 6e 75 6c 6c 29 20 43 6c 6f 73 65 28 74  != null) Close(t
31e0: 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  rue);....      /
31f0: 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  /..      // NOTE
3200: 3a 20 49 66 20 74 68 65 20 63 6f 6e 6e 65 63 74  : If the connect
3210: 69 6f 6e 20 77 61 73 20 6e 6f 74 20 63 6c 6f 73  ion was not clos
3220: 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c 79 2c  ed successfully,
3230: 20 74 68 72 6f 77 20 61 6e 0d 0a 20 20 20 20 20   throw an..     
3240: 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70 74   //       except
3250: 69 6f 6e 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ion now...      
3260: 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73  //..      if (_s
3270: 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql != null)..   
3280: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
3290: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
32a0: 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  ("connection han
32b0: 64 6c 65 20 69 73 20 73 74 69 6c 6c 20 61 63 74  dle is still act
32c0: 69 76 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ive");....      
32d0: 5f 75 73 65 50 6f 6f 6c 20 3d 20 75 73 65 50 6f  _usePool = usePo
32e0: 6f 6c 3b 0d 0a 20 20 20 20 20 20 5f 66 69 6c 65  ol;..      _file
32f0: 4e 61 6d 65 20 3d 20 73 74 72 46 69 6c 65 6e 61  Name = strFilena
3300: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  me;....      if 
3310: 28 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20  (usePool)..     
3320: 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c   {..        _sql
3330: 20 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   = SQLiteConnect
3340: 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28 73  ionPool.Remove(s
3350: 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61 78 50  trFilename, maxP
3360: 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f 70 6f  oolSize, out _po
3370: 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 23  olVersion);....#
3380: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
3390: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
33a0: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
33b0: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
33c0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 4f  String.Format("O
33d0: 70 65 6e 20 28 50 6f 6f 6c 29 3a 20 7b 30 7d 22  pen (Pool): {0}"
33e0: 2c 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  , (_sql != null)
33f0: 20 3f 20 5f 73 71 6c 2e 54 6f 53 74 72 69 6e 67   ? _sql.ToString
3400: 28 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b  () : "<null>"));
3410: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
3420: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  }....      if (_
3430: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
3440: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
3450: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
3460: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
3470: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
3480: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
3490: 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54  nally /* NOTE: T
34a0: 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72  hread.Abort() pr
34b0: 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20  otection. */..  
34c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
34d0: 20 20 20 49 6e 74 50 74 72 20 64 62 3b 0d 0a 20     IntPtr db;.. 
34e0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
34f0: 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23  rrorCode n;....#
3500: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
3510: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ARD..          i
3520: 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  f ((connectionFl
3530: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
3540: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78  ectionFlags.NoEx
3550: 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73  tensionFunctions
3560: 29 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) != SQLiteConne
3570: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78 74  ctionFlags.NoExt
3580: 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 29  ensionFunctions)
3590: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
35a0: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
35b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
35c0: 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  ds.sqlite3_open_
35d0: 69 6e 74 65 72 6f 70 28 54 6f 55 54 46 38 28 73  interop(ToUTF8(s
35e0: 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 6f 70 65  trFilename), ope
35f0: 6e 46 6c 61 67 73 2c 20 6f 75 74 20 64 62 29 3b  nFlags, out db);
3600: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
3610: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23           else..#
3620: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
3630: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3640: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
3650: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3660: 6f 70 65 6e 5f 76 32 28 54 6f 55 54 46 38 28 73  open_v2(ToUTF8(s
3670: 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 6f 75 74  trFilename), out
3680: 20 64 62 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20   db, openFlags, 
3690: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20  IntPtr.Zero);.. 
36a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69           }....#i
36b0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
36c0: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
36d0: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
36e0: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
36f0: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
3700: 4f 70 65 6e 3a 20 7b 30 7d 22 2c 20 64 62 29 29  Open: {0}", db))
3710: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
3720: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
3730: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
3740: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
3750: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
3760: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
3770: 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53 51     _sql = new SQ
3780: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
3790: 6e 64 6c 65 28 64 62 2c 20 74 72 75 65 29 3b 0d  ndle(db, true);.
37a0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
37b0: 20 20 20 20 6c 6f 63 6b 20 28 5f 73 71 6c 29 20      lock (_sql) 
37c0: 7b 20 2f 2a 20 48 41 43 4b 3a 20 46 6f 72 63 65  { /* HACK: Force
37d0: 20 74 68 65 20 53 79 6e 63 42 6c 6f 63 6b 20 74   the SyncBlock t
37e0: 6f 20 62 65 20 22 63 72 65 61 74 65 64 22 20 6e  o be "created" n
37f0: 6f 77 2e 20 2a 2f 20 7d 0d 0a 20 20 20 20 20 20  ow. */ }..      
3800: 7d 0d 0a 20 20 20 20 20 20 2f 2f 20 42 69 6e 64  }..      // Bind
3810: 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 20 74 68   functions to th
3820: 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  is connection.  
3830: 49 66 20 61 6e 79 20 70 72 65 76 69 6f 75 73 20  If any previous 
3840: 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20 74 68 65  functions of the
3850: 20 73 61 6d 65 20 6e 61 6d 65 0d 0a 20 20 20 20   same name..    
3860: 20 20 2f 2f 20 77 65 72 65 20 61 6c 72 65 61 64    // were alread
3870: 79 20 62 6f 75 6e 64 2c 20 74 68 65 6e 20 74 68  y bound, then th
3880: 65 20 6e 65 77 20 62 69 6e 64 69 6e 67 73 20 72  e new bindings r
3890: 65 70 6c 61 63 65 20 74 68 65 20 6f 6c 64 2e 0d  eplace the old..
38a0: 0a 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e  .      _function
38b0: 73 41 72 72 61 79 20 3d 20 53 51 4c 69 74 65 46  sArray = SQLiteF
38c0: 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63  unction.BindFunc
38d0: 74 69 6f 6e 73 28 74 68 69 73 2c 20 63 6f 6e 6e  tions(this, conn
38e0: 65 63 74 69 6f 6e 46 6c 61 67 73 29 3b 0d 0a 20  ectionFlags);.. 
38f0: 20 20 20 20 20 53 65 74 54 69 6d 65 6f 75 74 28       SetTimeout(
3900: 30 29 3b 0d 0a 20 20 20 20 20 20 47 43 2e 4b 65  0);..      GC.Ke
3910: 65 70 41 6c 69 76 65 28 5f 73 71 6c 29 3b 0d 0a  epAlive(_sql);..
3920: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
3930: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
3940: 6f 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28 29 0d  oid ClearPool().
3950: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
3960: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f  LiteConnectionPo
3970: 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f 66 69  ol.ClearPool(_fi
3980: 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d  leName);..    }.
3990: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
39a0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 75  override int Cou
39b0: 6e 74 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d  ntPool()..    {.
39c0: 0a 20 20 20 20 20 20 20 20 44 69 63 74 69 6f 6e  .        Diction
39d0: 61 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e  ary<string, int>
39e0: 20 63 6f 75 6e 74 73 20 3d 20 6e 75 6c 6c 3b 0d   counts = null;.
39f0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6f 70 65  .        int ope
3a00: 6e 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20  nCount = 0;..   
3a10: 20 20 20 20 20 69 6e 74 20 63 6c 6f 73 65 43 6f       int closeCo
3a20: 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  unt = 0;..      
3a30: 20 20 69 6e 74 20 74 6f 74 61 6c 43 6f 75 6e 74    int totalCount
3a40: 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   = 0;....       
3a50: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
3a60: 6e 50 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74 73 28  nPool.GetCounts(
3a70: 5f 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  _fileName,..    
3a80: 20 20 20 20 20 20 20 20 72 65 66 20 63 6f 75 6e          ref coun
3a90: 74 73 2c 20 72 65 66 20 6f 70 65 6e 43 6f 75 6e  ts, ref openCoun
3aa0: 74 2c 20 72 65 66 20 63 6c 6f 73 65 43 6f 75 6e  t, ref closeCoun
3ab0: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
3ac0: 72 65 66 20 74 6f 74 61 6c 43 6f 75 6e 74 29 3b  ref totalCount);
3ad0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
3ae0: 72 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 3b 0d 0a  rn totalCount;..
3af0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
3b00: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
3b10: 6f 69 64 20 53 65 74 54 69 6d 65 6f 75 74 28 69  oid SetTimeout(i
3b20: 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29 0d 0a  nt nTimeoutMS)..
3b30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
3b40: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
3b50: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
3b60: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 75 73  hods.sqlite3_bus
3b70: 79 5f 74 69 6d 65 6f 75 74 28 5f 73 71 6c 2c 20  y_timeout(_sql, 
3b80: 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20 20  nTimeoutMS);..  
3b90: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
3ba0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
3bb0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
3bc0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
3bd0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
3be0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
3bf0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
3c00: 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69 74 65 53  ool Step(SQLiteS
3c10: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a  tatement stmt)..
3c20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
3c30: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d  iteErrorCode n;.
3c40: 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e  .      Random rn
3c50: 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  d = null;..     
3c60: 20 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20   uint starttick 
3c70: 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d  = (uint)Environm
3c80: 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a  ent.TickCount;..
3c90: 20 20 20 20 20 20 75 69 6e 74 20 74 69 6d 65 6f        uint timeo
3ca0: 75 74 20 3d 20 28 75 69 6e 74 29 28 73 74 6d 74  ut = (uint)(stmt
3cb0: 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61  ._command._comma
3cc0: 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30  ndTimeout * 1000
3cd0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c  );....      whil
3ce0: 65 20 28 74 72 75 65 29 0d 0a 20 20 20 20 20 20  e (true)..      
3cf0: 7b 0d 0a 20 20 20 20 20 20 20 20 6e 20 3d 20 55  {..        n = U
3d00: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
3d10: 64 73 2e 73 71 6c 69 74 65 33 5f 73 74 65 70 28  ds.sqlite3_step(
3d20: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
3d30: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  t);....        i
3d40: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
3d50: 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 72 65 74  rorCode.Row) ret
3d60: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
3d70: 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
3d80: 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65  teErrorCode.Done
3d90: 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d  ) return false;.
3da0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
3db0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
3dc0: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
3dd0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51   {..          SQ
3de0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 3b  LiteErrorCode r;
3df0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  ....          //
3e00: 20 41 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72   An error occurr
3e10: 65 64 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 72  ed, attempt to r
3e20: 65 73 65 74 20 74 68 65 20 73 74 61 74 65 6d 65  eset the stateme
3e30: 6e 74 2e 20 20 49 66 20 74 68 65 20 72 65 73 65  nt.  If the rese
3e40: 74 20 77 6f 72 6b 65 64 20 62 65 63 61 75 73 65  t worked because
3e50: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
3e60: 2f 2f 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  // schema has ch
3e70: 61 6e 67 65 64 2c 20 72 65 2d 74 72 79 20 74 68  anged, re-try th
3e80: 65 20 73 74 65 70 20 61 67 61 69 6e 2e 20 20 49  e step again.  I
3e90: 66 20 69 74 20 65 72 72 6f 72 65 64 20 6f 75 72  f it errored our
3ea0: 20 62 65 63 61 75 73 65 20 74 68 65 20 64 61 74   because the dat
3eb0: 61 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20  abase..         
3ec0: 20 2f 2f 20 69 73 20 6c 6f 63 6b 65 64 2c 20 74   // is locked, t
3ed0: 68 65 6e 20 6b 65 65 70 20 72 65 74 72 79 69 6e  hen keep retryin
3ee0: 67 20 75 6e 74 69 6c 20 74 68 65 20 63 6f 6d 6d  g until the comm
3ef0: 61 6e 64 20 74 69 6d 65 6f 75 74 20 6f 63 63 75  and timeout occu
3f00: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 72  rs...          r
3f10: 20 3d 20 52 65 73 65 74 28 73 74 6d 74 29 3b 0d   = Reset(stmt);.
3f20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
3f30: 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (r == SQLiteErro
3f40: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
3f50: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
3f60: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
3f70: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
3f80: 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ());....        
3f90: 20 20 65 6c 73 65 20 69 66 20 28 28 72 20 3d 3d    else if ((r ==
3fa0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
3fb0: 2e 4c 6f 63 6b 65 64 20 7c 7c 20 72 20 3d 3d 20  .Locked || r == 
3fc0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
3fd0: 42 75 73 79 29 20 26 26 20 73 74 6d 74 2e 5f 63  Busy) && stmt._c
3fe0: 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d  ommand != null).
3ff0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
4000: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65            // Kee
4010: 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20  p trying..      
4020: 20 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d        if (rnd ==
4030: 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20   null) // First 
4040: 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75  time we've encou
4050: 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d  ntered the lock.
4060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
4070: 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28  nd = new Random(
4080: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4090: 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78    // If we've ex
40a0: 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61  ceeded the comma
40b0: 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69  nd's timeout, gi
40c0: 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20  ve up and throw 
40d0: 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  an error..      
40e0: 20 20 20 20 20 20 69 66 20 28 28 75 69 6e 74 29        if ((uint)
40f0: 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b  Environment.Tick
4100: 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63  Count - starttic
4110: 6b 20 3e 20 74 69 6d 65 6f 75 74 29 0d 0a 20 20  k > timeout)..  
4120: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4130: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
4140: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
4150: 74 69 6f 6e 28 72 2c 20 47 65 74 4c 61 73 74 45  tion(r, GetLastE
4160: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
4170: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4180: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
4190: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
41a0: 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72          // Other
41b0: 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61  wise sleep for a
41c0: 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f   random amount o
41d0: 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30  f time up to 150
41e0: 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ms..            
41f0: 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69    System.Threadi
4200: 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28  ng.Thread.Sleep(
4210: 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29  rnd.Next(1, 150)
4220: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4230: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
4240: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4250: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
4260: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
4270: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
4280: 64 65 20 52 65 73 65 74 28 53 51 4c 69 74 65 53  de Reset(SQLiteS
4290: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a  tatement stmt)..
42a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
42b0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d  iteErrorCode n;.
42c0: 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
42d0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e  TANDARD..      n
42e0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
42f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
4300: 65 73 65 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d  eset_interop(stm
4310: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b  t._sqlite_stmt);
4320: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e  ..#else..      n
4330: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
4340: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
4350: 65 73 65 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  eset(stmt._sqlit
4360: 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66  e_stmt);..#endif
4370: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20  ....      // If 
4380: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
4390: 65 64 2c 20 74 72 79 20 61 6e 64 20 72 65 2d 70  ed, try and re-p
43a0: 72 65 70 61 72 65 20 69 74 0d 0a 20 20 20 20 20  repare it..     
43b0: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
43c0: 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61  ErrorCode.Schema
43d0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
43e0: 20 20 20 20 2f 2f 20 52 65 63 72 65 61 74 65 20      // Recreate 
43f0: 61 20 64 75 6d 6d 79 20 73 74 61 74 65 6d 65 6e  a dummy statemen
4400: 74 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  t..        strin
4410: 67 20 73 74 72 3b 0d 0a 20 20 20 20 20 20 20 20  g str;..        
4420: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 53 74 61  using (SQLiteSta
4430: 74 65 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72 65  tement tmp = Pre
4440: 70 61 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e  pare(null, stmt.
4450: 5f 73 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e  _sqlStatement, n
4460: 75 6c 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d 74  ull, (uint)(stmt
4470: 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61  ._command._comma
4480: 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30  ndTimeout * 1000
4490: 29 2c 20 6f 75 74 20 73 74 72 29 29 0d 0a 20 20  ), out str))..  
44a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
44b0: 20 20 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74     // Finalize t
44c0: 68 65 20 65 78 69 73 74 69 6e 67 20 73 74 61 74  he existing stat
44d0: 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  ement..         
44e0: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
44f0: 6d 74 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20  mt.Dispose();.. 
4500: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61 73           // Reas
4510: 73 69 67 6e 20 61 20 6e 65 77 20 73 74 61 74 65  sign a new state
4520: 6d 65 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f 20  ment pointer to 
4530: 74 68 65 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e  the old statemen
4540: 74 20 61 6e 64 20 63 6c 65 61 72 20 74 68 65 20  t and clear the 
4550: 74 65 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20  temporary one.. 
4560: 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73           stmt._s
4570: 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20 74 6d 70  qlite_stmt = tmp
4580: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
4590: 20 20 20 20 20 20 20 20 20 20 74 6d 70 2e 5f 73            tmp._s
45a0: 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20 6e 75 6c  qlite_stmt = nul
45b0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
45c0: 2f 2f 20 52 65 61 70 70 6c 79 20 70 61 72 61 6d  // Reapply param
45d0: 65 74 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  eters..         
45e0: 20 73 74 6d 74 2e 42 69 6e 64 50 61 72 61 6d 65   stmt.BindParame
45f0: 74 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20  ters();..       
4600: 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   }..        retu
4610: 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
4620: 64 65 2e 55 6e 6b 6e 6f 77 6e 3b 20 2f 2f 20 52  de.Unknown; // R
4630: 65 73 65 74 20 77 61 73 20 4f 4b 2c 20 77 69 74  eset was OK, wit
4640: 68 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 0d  h schema change.
4650: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
4660: 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
4670: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f  LiteErrorCode.Lo
4680: 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c  cked || n == SQL
4690: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73  iteErrorCode.Bus
46a0: 79 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  y)..        retu
46b0: 72 6e 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  rn n;....      i
46c0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
46d0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
46e0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
46f0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
4700: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
4710: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  );....      retu
4720: 72 6e 20 6e 3b 20 2f 2f 20 57 65 20 72 65 73 65  rn n; // We rese
4730: 74 20 4f 4b 2c 20 6e 6f 20 73 63 68 65 6d 61 20  t OK, no schema 
4740: 63 68 61 6e 67 65 73 0d 0a 20 20 20 20 7d 0d 0a  changes..    }..
4750: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
4760: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
4770: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 0d 0a 20  etLastError().. 
4780: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
4790: 72 6e 20 53 51 4c 69 74 65 42 61 73 65 2e 47 65  rn SQLiteBase.Ge
47a0: 74 4c 61 73 74 45 72 72 6f 72 28 5f 73 71 6c 2c  tLastError(_sql,
47b0: 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a   _sql);..    }..
47c0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
47d0: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 53 74  verride SQLiteSt
47e0: 61 74 65 6d 65 6e 74 20 50 72 65 70 61 72 65 28  atement Prepare(
47f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
4800: 20 63 6e 6e 2c 20 73 74 72 69 6e 67 20 73 74 72   cnn, string str
4810: 53 71 6c 2c 20 53 51 4c 69 74 65 53 74 61 74 65  Sql, SQLiteState
4820: 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 2c 20 75  ment previous, u
4830: 69 6e 74 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f  int timeoutMS, o
4840: 75 74 20 73 74 72 69 6e 67 20 73 74 72 52 65 6d  ut string strRem
4850: 61 69 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ain)..    {..   
4860: 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
4870: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72  sNullOrEmpty(str
4880: 53 71 6c 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  Sql))..      {..
4890: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
48a0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 51 4c      // NOTE: SQL
48b0: 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  ite does not sup
48c0: 70 6f 72 74 20 74 68 65 20 63 6f 6e 63 65 70 74  port the concept
48d0: 20 6f 66 20 73 65 70 61 72 61 74 65 20 73 63 68   of separate sch
48e0: 65 6d 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  emas..        //
48f0: 20 20 20 20 20 20 20 69 6e 20 6f 6e 65 20 64 61         in one da
4900: 74 61 62 61 73 65 3b 20 74 68 65 72 65 66 6f 72  tabase; therefor
4910: 65 2c 20 72 65 6d 6f 76 65 20 74 68 65 20 62 61  e, remove the ba
4920: 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 0d 0a  se schema name..
4930: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
4940: 20 75 73 65 64 20 74 6f 20 73 6d 6f 6f 74 68 20   used to smooth 
4950: 69 6e 74 65 67 72 61 74 69 6f 6e 20 77 69 74 68  integration with
4960: 20 74 68 65 20 62 61 73 65 20 2e 4e 45 54 20 46   the base .NET F
4970: 72 61 6d 65 77 6f 72 6b 0d 0a 20 20 20 20 20 20  ramework..      
4980: 20 20 2f 2f 20 20 20 20 20 20 20 64 61 74 61 20    //       data 
4990: 63 6c 61 73 73 65 73 2e 0d 0a 20 20 20 20 20 20  classes...      
49a0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 73 74    //..        st
49b0: 72 69 6e 67 20 62 61 73 65 53 63 68 65 6d 61 4e  ring baseSchemaN
49c0: 61 6d 65 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75  ame = (cnn != nu
49d0: 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 62 61 73 65 53  ll) ? cnn._baseS
49e0: 63 68 65 6d 61 4e 61 6d 65 20 3a 20 6e 75 6c 6c  chemaName : null
49f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
4a00: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
4a10: 72 45 6d 70 74 79 28 62 61 73 65 53 63 68 65 6d  rEmpty(baseSchem
4a20: 61 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  aName))..       
4a30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74   {..          st
4a40: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65  rSql = strSql.Re
4a50: 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  place(..        
4a60: 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
4a70: 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
4a80: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
4a90: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4aa0: 20 22 5b 7b 30 7d 5d 2e 22 2c 20 62 61 73 65 53   "[{0}].", baseS
4ab0: 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69  chemaName), Stri
4ac0: 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20  ng.Empty);....  
4ad0: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
4ae0: 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28   strSql.Replace(
4af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4b00: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75  String.Format(Cu
4b10: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
4b20: 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  antCulture,..   
4b30: 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2e             "{0}.
4b40: 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  ", baseSchemaNam
4b50: 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  e), String.Empty
4b60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
4b70: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4b80: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
4b90: 46 6c 61 67 73 20 66 6c 61 67 73 20 3d 0d 0a 20  Flags flags =.. 
4ba0: 20 20 20 20 20 20 20 20 20 28 63 6e 6e 20 21 3d           (cnn !=
4bb0: 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 46 6c 61   null) ? cnn.Fla
4bc0: 67 73 20 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs : SQLiteConne
4bd0: 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 66 61 75  ctionFlags.Defau
4be0: 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  lt;....      if 
4bf0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
4c00: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
4c10: 4c 6f 67 50 72 65 70 61 72 65 29 20 3d 3d 20 53  LogPrepare) == S
4c20: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
4c30: 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61 72 65 29  lags.LogPrepare)
4c40: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
4c50: 20 20 20 20 20 69 66 20 28 28 73 74 72 53 71 6c       if ((strSql
4c60: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 74   == null) || (st
4c70: 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3d 3d 20 30  rSql.Length == 0
4c80: 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 54 72 69  ) || (strSql.Tri
4c90: 6d 28 29 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29  m().Length == 0)
4ca0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4cb0: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
4cc0: 73 73 61 67 65 28 22 50 72 65 70 61 72 69 6e 67  ssage("Preparing
4cd0: 20 7b 3c 6e 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22   {<nothing>}..."
4ce0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c  );..          el
4cf0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
4d00: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
4d10: 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f  essage(String.Fo
4d20: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
4d30: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
4d40: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
4d50: 75 72 65 2c 20 22 50 72 65 70 61 72 69 6e 67 20  ure, "Preparing 
4d60: 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72  {{{0}}}...", str
4d70: 53 71 6c 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  Sql));..      }.
4d80: 0a 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ...      IntPtr 
4d90: 73 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65  stmt = IntPtr.Ze
4da0: 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ro;..      IntPt
4db0: 72 20 70 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a  r ptr = IntPtr.Z
4dc0: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ero;..      int 
4dd0: 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  len = 0;..      
4de0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
4df0: 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  n = SQLiteErrorC
4e00: 6f 64 65 2e 53 63 68 65 6d 61 3b 0d 0a 20 20 20  ode.Schema;..   
4e10: 20 20 20 69 6e 74 20 72 65 74 72 69 65 73 20 3d     int retries =
4e20: 20 30 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b   0;..      byte[
4e30: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 73 74 72  ] b = ToUTF8(str
4e40: 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20 73 74 72  Sql);..      str
4e50: 69 6e 67 20 74 79 70 65 64 65 66 73 20 3d 20 6e  ing typedefs = n
4e60: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  ull;..      SQLi
4e70: 74 65 53 74 61 74 65 6d 65 6e 74 20 63 6d 64 20  teStatement cmd 
4e80: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 52  = null;..      R
4e90: 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c  andom rnd = null
4ea0: 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74  ;..      uint st
4eb0: 61 72 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29  arttick = (uint)
4ec0: 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b  Environment.Tick
4ed0: 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  Count;....      
4ee0: 47 43 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  GCHandle handle 
4ef0: 3d 20 47 43 48 61 6e 64 6c 65 2e 41 6c 6c 6f 63  = GCHandle.Alloc
4f00: 28 62 2c 20 47 43 48 61 6e 64 6c 65 54 79 70 65  (b, GCHandleType
4f10: 2e 50 69 6e 6e 65 64 29 3b 0d 0a 20 20 20 20 20  .Pinned);..     
4f20: 20 49 6e 74 50 74 72 20 70 73 71 6c 20 3d 20 68   IntPtr psql = h
4f30: 61 6e 64 6c 65 2e 41 64 64 72 4f 66 50 69 6e 6e  andle.AddrOfPinn
4f40: 65 64 4f 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20  edObject();..   
4f50: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
4f60: 6e 74 48 61 6e 64 6c 65 20 73 74 61 74 65 6d 65  ntHandle stateme
4f70: 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b  ntHandle = null;
4f80: 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20  ..      try..   
4f90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 77 68     {..        wh
4fa0: 69 6c 65 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74  ile ((n == SQLit
4fb0: 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d  eErrorCode.Schem
4fc0: 61 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65  a || n == SQLite
4fd0: 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64  ErrorCode.Locked
4fe0: 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45   || n == SQLiteE
4ff0: 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 26  rrorCode.Busy) &
5000: 26 20 72 65 74 72 69 65 73 20 3c 20 33 29 0d 0a  & retries < 3)..
5010: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5020: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
5030: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5040: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
5050: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ...          }..
5060: 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
5070: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
5080: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
5090: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
50a0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
50b0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
50c0: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
50d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
50e0: 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  .sqlite3_prepare
50f0: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 70  _interop(_sql, p
5100: 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  sql, b.Length - 
5110: 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75 74  1, out stmt, out
5120: 20 70 74 72 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d   ptr, out len);.
5130: 0a 23 65 6c 73 65 0d 0a 23 69 66 20 55 53 45 5f  .#else..#if USE_
5140: 50 52 45 50 41 52 45 5f 56 32 0d 0a 20 20 20 20  PREPARE_V2..    
5150: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
5160: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5170: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
5180: 76 32 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62  v2(_sql, psql, b
5190: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74  .Length - 1, out
51a0: 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 29 3b   stmt, out ptr);
51b0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
51c0: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
51d0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
51e0: 69 74 65 33 5f 70 72 65 70 61 72 65 28 5f 73 71  ite3_prepare(_sq
51f0: 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74  l, psql, b.Lengt
5200: 68 20 2d 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c  h - 1, out stmt,
5210: 20 6f 75 74 20 70 74 72 29 3b 0d 0a 23 65 6e 64   out ptr);..#end
5220: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
5230: 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69  len = -1;..#endi
5240: 66 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  f....#if !NET_CO
5250: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
5260: 45 5f 53 54 41 54 45 4d 45 4e 54 0d 0a 20 20 20  E_STATEMENT..   
5270: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
5280: 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e  riteLine(String.
5290: 46 6f 72 6d 61 74 28 22 50 72 65 70 61 72 65 20  Format("Prepare 
52a0: 28 7b 30 7d 29 3a 20 7b 31 7d 22 2c 20 6e 2c 20  ({0}): {1}", n, 
52b0: 73 74 6d 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  stmt));..#endif.
52c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
52d0: 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  f ((n == SQLiteE
52e0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20  rrorCode.Ok) && 
52f0: 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e  (stmt != IntPtr.
5300: 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20  Zero))..        
5310: 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 48        statementH
5320: 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69  andle = new SQLi
5330: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
5340: 65 28 5f 73 71 6c 2c 20 73 74 6d 74 29 3b 0d 0a  e(_sql, stmt);..
5350: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5360: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d           if (n =
5370: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
5380: 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20  e.Schema)..     
5390: 20 20 20 20 20 20 20 72 65 74 72 69 65 73 2b 2b         retries++
53a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  ;..          els
53b0: 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
53c0: 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
53d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
53e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
53f0: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47  String.Compare(G
5400: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 22  etLastError(), "
5410: 6e 65 61 72 20 5c 22 54 59 50 45 53 5c 22 3a 20  near \"TYPES\": 
5420: 73 79 6e 74 61 78 20 65 72 72 6f 72 22 2c 20 53  syntax error", S
5430: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
5440: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
5450: 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  e) == 0)..      
5460: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5470: 20 20 20 20 20 20 20 69 6e 74 20 70 6f 73 20 3d         int pos =
5480: 20 73 74 72 53 71 6c 2e 49 6e 64 65 78 4f 66 28   strSql.IndexOf(
5490: 27 3b 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ';');..         
54a0: 20 20 20 20 20 69 66 20 28 70 6f 73 20 3d 3d 20       if (pos == 
54b0: 2d 31 29 20 70 6f 73 20 3d 20 73 74 72 53 71 6c  -1) pos = strSql
54c0: 2e 4c 65 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a  .Length - 1;....
54d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
54e0: 70 65 64 65 66 73 20 3d 20 73 74 72 53 71 6c 2e  pedefs = strSql.
54f0: 53 75 62 73 74 72 69 6e 67 28 30 2c 20 70 6f 73  Substring(0, pos
5500: 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20   + 1);..        
5510: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
5520: 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28  trSql.Substring(
5530: 70 6f 73 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20  pos + 1);....   
5540: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52 65             strRe
5550: 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20  main = "";....  
5560: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
5570: 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26  e (cmd == null &
5580: 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  & strSql.Length 
5590: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
55a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
55b0: 20 20 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65         cmd = Pre
55c0: 70 61 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c  pare(cnn, strSql
55d0: 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65  , previous, time
55e0: 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74 72 52 65  outMS, out strRe
55f0: 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  main);..        
5600: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
5610: 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20   strRemain;..   
5620: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5640: 20 28 63 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a   (cmd != null)..
5650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5660: 63 6d 64 2e 53 65 74 54 79 70 65 73 28 74 79 70  cmd.SetTypes(typ
5670: 65 64 65 66 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  edefs);....     
5680: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5690: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  cmd;..          
56a0: 20 20 7d 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35    }..#if (NET_35
56b0: 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45   || NET_40 || NE
56c0: 54 5f 34 35 29 20 26 26 20 21 50 4c 41 54 46 4f  T_45) && !PLATFO
56d0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
56e0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
56f0: 20 65 6c 73 65 20 69 66 20 28 5f 62 75 69 6c 64   else if (_build
5700: 69 6e 67 53 63 68 65 6d 61 20 3d 3d 20 66 61 6c  ingSchema == fal
5710: 73 65 20 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d  se && String.Com
5720: 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f  pare(GetLastErro
5730: 72 28 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68  r(), 0, "no such
5740: 20 74 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48   table: TEMP.SCH
5750: 45 4d 41 22 2c 20 30 2c 20 32 36 2c 20 53 74 72  EMA", 0, 26, Str
5760: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
5770: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
5780: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
5790: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
57a0: 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d       strRemain =
57b0: 20 22 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   "";..          
57c0: 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68      _buildingSch
57d0: 65 6d 61 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ema = true;..   
57e0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
57f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
5800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5810: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
5820: 74 65 6e 73 69 6f 6e 73 20 65 78 74 20 3d 20 28  tensions ext = (
5830: 28 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65  (IServiceProvide
5840: 72 29 53 51 4c 69 74 65 46 61 63 74 6f 72 79 2e  r)SQLiteFactory.
5850: 49 6e 73 74 61 6e 63 65 29 2e 47 65 74 53 65 72  Instance).GetSer
5860: 76 69 63 65 28 74 79 70 65 6f 66 28 49 53 51 4c  vice(typeof(ISQL
5870: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
5880: 6f 6e 73 29 29 20 61 73 20 49 53 51 4c 69 74 65  ons)) as ISQLite
5890: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
58a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
58b0: 20 20 20 20 20 69 66 20 28 65 78 74 20 21 3d 20       if (ext != 
58c0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
58d0: 20 20 20 20 20 20 20 20 20 65 78 74 2e 42 75 69           ext.Bui
58e0: 6c 64 54 65 6d 70 53 63 68 65 6d 61 28 63 6e 6e  ldTempSchema(cnn
58f0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5900: 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64        while (cmd
5910: 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53   == null && strS
5920: 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  ql.Length > 0)..
5930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5940: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5950: 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61       cmd = Prepa
5960: 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20  re(cnn, strSql, 
5970: 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75  previous, timeou
5980: 74 4d 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61  tMS, out strRema
5990: 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  in);..          
59a0: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
59b0: 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20   strRemain;..   
59c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
59d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
59e0: 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20    return cmd;.. 
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
5a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
5a10: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
5a20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5a30: 20 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e          _buildin
5a40: 67 53 63 68 65 6d 61 20 3d 20 66 61 6c 73 65 3b  gSchema = false;
5a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5a60: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5a70: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
5a80: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
5a90: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
5aa0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c  QLiteErrorCode.L
5ab0: 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51  ocked || n == SQ
5ac0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75  LiteErrorCode.Bu
5ad0: 73 79 29 20 2f 2f 20 4c 6f 63 6b 65 64 20 2d 2d  sy) // Locked --
5ae0: 20 64 65 6c 61 79 20 61 20 73 6d 61 6c 6c 20 61   delay a small a
5af0: 6d 6f 75 6e 74 20 62 65 66 6f 72 65 20 72 65 74  mount before ret
5b00: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
5b10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5b20: 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a  // Keep trying..
5b30: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5b40: 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20  rnd == null) // 
5b50: 46 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65  First time we've
5b60: 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65   encountered the
5b70: 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20   lock..         
5b80: 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52       rnd = new R
5b90: 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20  andom();....    
5ba0: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
5bb0: 27 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65  've exceeded the
5bc0: 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f   command's timeo
5bd0: 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20  ut, give up and 
5be0: 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a  throw an error..
5bf0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5c00: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
5c10: 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74  t.TickCount - st
5c20: 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75  arttick > timeou
5c30: 74 4d 53 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tMS)..          
5c40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5c50: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
5c60: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
5c70: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
5c80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
5c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
5ca0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
5cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5cc0: 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65  // Otherwise sle
5cd0: 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20  ep for a random 
5ce0: 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75  amount of time u
5cf0: 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20  p to 150ms..    
5d00: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
5d10: 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61  .Threading.Threa
5d20: 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74  d.Sleep(rnd.Next
5d30: 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20  (1, 150));..    
5d40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5d50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5d60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
5d70: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
5d80: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
5d90: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
5da0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
5db0: 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
5dc0: 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 55     strRemain = U
5dd0: 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c  TF8ToString(ptr,
5de0: 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   len);....      
5df0: 20 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48    if (statementH
5e00: 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 63  andle != null) c
5e10: 6d 64 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53  md = new SQLiteS
5e20: 74 61 74 65 6d 65 6e 74 28 74 68 69 73 2c 20 66  tatement(this, f
5e30: 6c 61 67 73 2c 20 73 74 61 74 65 6d 65 6e 74 48  lags, statementH
5e40: 61 6e 64 6c 65 2c 20 73 74 72 53 71 6c 2e 53 75  andle, strSql.Su
5e50: 62 73 74 72 69 6e 67 28 30 2c 20 73 74 72 53 71  bstring(0, strSq
5e60: 6c 2e 4c 65 6e 67 74 68 20 2d 20 73 74 72 52 65  l.Length - strRe
5e70: 6d 61 69 6e 2e 4c 65 6e 67 74 68 29 2c 20 70 72  main.Length), pr
5e80: 65 76 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20 20 20  evious);....    
5e90: 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d      return cmd;.
5ea0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
5eb0: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 7b  finally..      {
5ec0: 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65  ..        handle
5ed0: 2e 46 72 65 65 28 29 3b 0d 0a 20 20 20 20 20 20  .Free();..      
5ee0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
5ef0: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
5f00: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
5f10: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
5f20: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
5f30: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
5f40: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
5f50: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
5f60: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
5f70: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
5f80: 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  sage(String.Form
5f90: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
5fa0: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
5fb0: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
5fc0: 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69            "Bindi
5fd0: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d  ng statement {0}
5fe0: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61   paramter #{1} a
5ff0: 73 20 4e 55 4c 4c 2e 2e 2e 22 2c 0d 0a 20 20 20  s NULL...",..   
6000: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
6010: 6e 74 50 74 72 2c 20 69 6e 64 65 78 29 29 3b 0d  ntPtr, index));.
6020: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
6030: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
6040: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
6050: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
6060: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
6070: 64 65 78 2c 20 56 61 6c 75 65 54 79 70 65 20 76  dex, ValueType v
6080: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
6090: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
60a0: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
60b0: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  le;....        S
60c0: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
60d0: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
60e0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
60f0: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
6100: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
6110: 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d  #{1} as type {2}
6120: 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33   with value {{{3
6130: 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  }}}...",..      
6140: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
6150: 74 72 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  tr, index, value
6160: 2e 47 65 74 54 79 70 65 28 29 2c 20 76 61 6c 75  .GetType(), valu
6170: 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  e));..    }.... 
6180: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
6190: 63 20 73 74 72 69 6e 67 20 46 6f 72 6d 61 74 44  c string FormatD
61a0: 61 74 65 54 69 6d 65 28 44 61 74 65 54 69 6d 65  ateTime(DateTime
61b0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
61c0: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75          StringBu
61d0: 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e  ilder result = n
61e0: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
61f0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ();....        r
6200: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c  esult.Append(val
6210: 75 65 2e 54 6f 53 74 72 69 6e 67 28 22 79 79 79  ue.ToString("yyy
6220: 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73  y-MM-ddTHH:mm:ss
6230: 2e 46 46 46 46 46 46 46 4b 22 29 29 3b 0d 0a 20  .FFFFFFFK"));.. 
6240: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
6250: 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20  pend(' ');..    
6260: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
6270: 64 28 76 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d 0a  d(value.Kind);..
6280: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
6290: 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20  ppend(' ');..   
62a0: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
62b0: 6e 64 28 76 61 6c 75 65 2e 54 69 63 6b 73 29 3b  nd(value.Ticks);
62c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
62d0: 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69  rn result.ToStri
62e0: 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ng();..    }....
62f0: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74      protected st
6300: 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e  atic void LogBin
6310: 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  d(SQLiteStatemen
6320: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20  tHandle handle, 
6330: 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54  int index, DateT
6340: 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ime value)..    
6350: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
6360: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
6370: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
6380: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
6390: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
63a0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
63b0: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
63c0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
63d0: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
63e0: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
63f0: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
6400: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
6410: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
6420: 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29  typeof(DateTime)
6430: 2c 20 46 6f 72 6d 61 74 44 61 74 65 54 69 6d 65  , FormatDateTime
6440: 28 76 61 6c 75 65 29 29 29 3b 0d 0a 20 20 20 20  (value)));..    
6450: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
6460: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
6470: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
6480: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
6490: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
64a0: 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20  string value).. 
64b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
64c0: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
64d0: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
64e0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
64f0: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
6500: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
6510: 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67          "Binding
6520: 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70   statement {0} p
6530: 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20  aramter #{1} as 
6540: 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61  type {2} with va
6550: 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c  lue {{{3}}}...",
6560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61  ..            ha
6570: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65  ndleIntPtr, inde
6580: 78 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67  x, typeof(String
6590: 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c  ), (value != nul
65a0: 6c 29 20 3f 20 76 61 6c 75 65 20 3a 20 22 3c 6e  l) ? value : "<n
65b0: 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d  ull>"));..    }.
65c0: 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  ...    private s
65d0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 54 6f 48  tatic string ToH
65e0: 65 78 61 64 65 63 69 6d 61 6c 53 74 72 69 6e 67  exadecimalString
65f0: 28 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b  (..        byte[
6600: 5d 20 61 72 72 61 79 0d 0a 20 20 20 20 20 20 20  ] array..       
6610: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
6620: 20 20 20 69 66 20 28 61 72 72 61 79 20 3d 3d 20     if (array == 
6630: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6640: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
6650: 0a 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e  ...        Strin
6660: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
6670: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
6680: 64 65 72 28 61 72 72 61 79 2e 4c 65 6e 67 74 68  der(array.Length
6690: 20 2a 20 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   * 2);....      
66a0: 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61    int length = a
66b0: 72 72 61 79 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  rray.Length;....
66c0: 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
66d0: 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65   index = 0; inde
66e0: 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65  x < length; inde
66f0: 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x++)..          
6700: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
6710: 61 72 72 61 79 5b 69 6e 64 65 78 5d 2e 54 6f 53  array[index].ToS
6720: 74 72 69 6e 67 28 22 78 32 22 29 29 3b 0d 0a 0d  tring("x2"));...
6730: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6740: 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28  result.ToString(
6750: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
6760: 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69   protected stati
6770: 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53  c void LogBind(S
6780: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
6790: 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74  ndle handle, int
67a0: 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 76   index, byte[] v
67b0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
67c0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
67d0: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
67e0: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  le;....        S
67f0: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
6800: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
6810: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
6820: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
6830: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
6840: 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d  #{1} as type {2}
6850: 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33   with value {{{3
6860: 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  }}}...",..      
6870: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
6880: 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f  tr, index, typeo
6890: 66 28 42 79 74 65 5b 5d 29 2c 20 28 76 61 6c 75  f(Byte[]), (valu
68a0: 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 48  e != null) ? ToH
68b0: 65 78 61 64 65 63 69 6d 61 6c 53 74 72 69 6e 67  exadecimalString
68c0: 28 76 61 6c 75 65 29 20 3a 20 22 3c 6e 75 6c 6c  (value) : "<null
68d0: 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  >"));..    }....
68e0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
68f0: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
6900: 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61  Double(SQLiteSta
6910: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
6920: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6930: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
6940: 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75  dex, double valu
6950: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
6960: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
6970: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
6980: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
6990: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
69a0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
69b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
69c0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
69d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
69e0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
69f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6a00: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
6a10: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
6a20: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
6a30: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
6a40: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
6a50: 4b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  K..        SQLit
6a60: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
6a70: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6a80: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
6a90: 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69  double(handle, i
6aa0: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
6ab0: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
6ac0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53  NDARD..        S
6ad0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
6ae0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
6af0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
6b00: 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  ind_double_inter
6b10: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
6b20: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
6b30: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
6b40: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
6b50: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
6b60: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
6b70: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
6b80: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
6b90: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
6ba0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
6bb0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
6bc0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
6bd0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
6be0: 6f 69 64 20 42 69 6e 64 5f 49 6e 74 33 32 28 53  oid Bind_Int32(S
6bf0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
6c00: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
6c10: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
6c20: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74  , int index, int
6c30: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
6c40: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
6c50: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
6c60: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
6c70: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20  ite_stmt;....   
6c80: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
6c90: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
6ca0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
6cb0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
6cc0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
6cd0: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
6ce0: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
6cf0: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
6d00: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
6d10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6d20: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
6d30: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
6d40: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6d50: 62 69 6e 64 5f 69 6e 74 28 68 61 6e 64 6c 65 2c  bind_int(handle,
6d60: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
6d70: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
6d80: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
6d90: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
6da0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
6db0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
6dc0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
6dd0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
6de0: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49  ide void Bind_UI
6df0: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
6e00: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
6e10: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6e20: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
6e30: 78 2c 20 75 69 6e 74 20 76 61 6c 75 65 29 0d 0a  x, uint value)..
6e40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
6e50: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
6e60: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
6e70: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
6e80: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
6e90: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
6ea0: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
6eb0: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
6ec0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
6ed0: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
6ee0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6ef0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
6f00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6f10: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
6f20: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
6f30: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
6f40: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  dif....        S
6f50: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
6f60: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
6f70: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
6f80: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6f90: 42 69 6e 64 55 49 6e 74 33 32 41 73 49 6e 74 36  BindUInt32AsInt6
6fa0: 34 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  4) == SQLiteConn
6fb0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64  ectionFlags.Bind
6fc0: 55 49 6e 74 33 32 41 73 49 6e 74 36 34 29 0d 0a  UInt32AsInt64)..
6fd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6fe0: 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75         long valu
6ff0: 65 32 20 3d 20 76 61 6c 75 65 3b 0d 0a 0d 0a 23  e2 = value;....#
7000: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
7010: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
7020: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
7030: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
7040: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
7050: 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e  int64(handle, in
7060: 64 65 78 2c 20 76 61 6c 75 65 32 29 3b 0d 0a 23  dex, value2);..#
7070: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
7080: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
7090: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
70a0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
70b0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e  e3_bind_int64_in
70c0: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
70d0: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 32 29  dex, ref value2)
70e0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
70f0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
7100: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
7110: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
7120: 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  if..        }.. 
7130: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
7140: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7150: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
7160: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
7170: 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 28 68 61  te3_bind_uint(ha
7180: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
7190: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
71a0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
71b0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
71c0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
71d0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
71e0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
71f0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
7200: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
7210: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e  ide void Bind_In
7220: 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t64(SQLiteStatem
7230: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
7240: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
7250: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
7260: 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20  , long value).. 
7270: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
7280: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
7290: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
72a0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
72b0: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
72c0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
72d0: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
72e0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
72f0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
7300: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
7310: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7320: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
7330: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7340: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
7350: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
7360: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
7370: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
7380: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
7390: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
73a0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
73b0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
73c0: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
73d0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
73e0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
73f0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
7400: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7410: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
7420: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
7430: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
7440: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
7450: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
7460: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
7470: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
7480: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20  dif..        if 
7490: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
74a0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
74b0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
74c0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
74d0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
74e0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
74f0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
7500: 64 5f 55 49 6e 74 36 34 28 53 51 4c 69 74 65 53  d_UInt64(SQLiteS
7510: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
7520: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7530: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
7540: 69 6e 64 65 78 2c 20 75 6c 6f 6e 67 20 76 61 6c  index, ulong val
7550: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
7560: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
7570: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
7580: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
7590: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
75a0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
75b0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
75c0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
75d0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
75e0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
75f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7600: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
7610: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7620: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
7630: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
7640: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
7650: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
7660: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
7670: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7680: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
7690: 5f 75 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  _uint64(handle, 
76a0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
76b0: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
76c0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
76d0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
76e0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
76f0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7700: 62 69 6e 64 5f 75 69 6e 74 36 34 5f 69 6e 74 65  bind_uint64_inte
7710: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
7720: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
7730: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74  #else..        t
7740: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
7750: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
7760: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
7770: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
7780: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
7790: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
77a0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
77b0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
77c0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
77d0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
77e0: 76 6f 69 64 20 42 69 6e 64 5f 54 65 78 74 28 53  void Bind_Text(S
77f0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
7800: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
7810: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
7820: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72  , int index, str
7830: 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ing value)..    
7840: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
7850: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
7860: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
7870: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
7880: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
7890: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
78a0: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
78b0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
78c0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
78d0: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
78e0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
78f0: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
7900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
7910: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
7920: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
7930: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
7940: 0a 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b  ...        byte[
7950: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c  ] b = ToUTF8(val
7960: 75 65 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  ue);....#if !PLA
7970: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
7980: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
7990: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
79a0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
79b0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
79c0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
79d0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
79e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
79f0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
7a00: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b  ndle, index, b);
7a10: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
7a20: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  dif....        S
7a30: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
7a40: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7a50: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
7a60: 69 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c  ind_text(handle,
7a70: 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e   index, b, b.Len
7a80: 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72  gth - 1, (IntPtr
7a90: 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20  )(-1));..       
7aa0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
7ab0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
7ac0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
7ad0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
7ae0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
7af0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
7b00: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
7b10: 20 42 69 6e 64 5f 44 61 74 65 54 69 6d 65 28 53   Bind_DateTime(S
7b20: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
7b30: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
7b40: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
7b50: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74  , int index, Dat
7b60: 65 54 69 6d 65 20 64 74 29 0d 0a 20 20 20 20 7b  eTime dt)..    {
7b70: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
7b80: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
7b90: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
7ba0: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23  qlite_stmt;....#
7bb0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
7bc0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
7bd0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
7be0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
7bf0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
7c00: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
7c10: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
7c20: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
7c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
7c40: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
7c50: 65 78 2c 20 64 74 29 3b 0d 0a 20 20 20 20 20 20  ex, dt);..      
7c60: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
7c70: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28 5f         switch (_
7c80: 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 29 0d  datetimeFormat).
7c90: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
7ca0: 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
7cb0: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54  iteDateFormats.T
7cc0: 69 63 6b 73 3a 0d 0a 20 20 20 20 20 20 20 20 20  icks:..         
7cd0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
7cf0: 6e 67 20 76 61 6c 75 65 20 3d 20 64 74 2e 54 69  ng value = dt.Ti
7d00: 63 6b 73 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  cks;....#if !PLA
7d10: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
7d20: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
7d30: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7d40: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
7d50: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
7d60: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
7d70: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7d80: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
7d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7da0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7db0: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
7dc0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
7dd0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
7de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7df0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7e00: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
7e10: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
7e20: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7e30: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
7e40: 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  4(handle, index,
7e50: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20   value);..#elif 
7e60: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
7e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7e80: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
7e90: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
7ea0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
7eb0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
7ec0: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
7ed0: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
7ee0: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
7ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f00: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
7f10: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
7f20: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
7f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f40: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
7f50: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
7f60: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
7f70: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
7f80: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
7f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fa0: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
7fb0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7fc0: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
7fd0: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
7fe0: 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a 20 20 20 20  JulianDay:..    
7ff0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8010: 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 20     double value 
8020: 3d 20 54 6f 4a 75 6c 69 61 6e 44 61 79 28 64 74  = ToJulianDay(dt
8030: 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  );....#if !PLATF
8040: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
8050: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
8060: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66            if ((f
8070: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
8080: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
8090: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
80a0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
80b0: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
80c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
80d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80e0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
80f0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
8100: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
8110: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
8120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8130: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
8140: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
8150: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8160: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
8170: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
8180: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
8190: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
81a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
81b0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
81c0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
81d0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
81e0: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
81f0: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
8200: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
8210: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
8220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8230: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
8240: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
8250: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
8260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8270: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
8280: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
8290: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
82a0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
82b0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
82c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82d0: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
82e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
82f0: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
8300: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
8310: 55 6e 69 78 45 70 6f 63 68 3a 0d 0a 20 20 20 20  UnixEpoch:..    
8320: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8340: 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20     long value = 
8350: 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 36 34 28  Convert.ToInt64(
8360: 64 74 2e 53 75 62 74 72 61 63 74 28 55 6e 69 78  dt.Subtract(Unix
8370: 45 70 6f 63 68 29 2e 54 6f 74 61 6c 53 65 63 6f  Epoch).TotalSeco
8380: 6e 64 73 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  nds);....#if !PL
8390: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
83a0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
83b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
83c0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
83d0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
83e0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
83f0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8400: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
8410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8420: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8430: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
8440: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
8450: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
8460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8480: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
8490: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
84a0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
84b0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
84c0: 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  64(handle, index
84d0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66  , value);..#elif
84e0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
84f0: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  D..             
8500: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
8510: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
8520: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
8530: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
8540: 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  4_interop(handle
8550: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
8560: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
8570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8580: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
8590: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
85a0: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
85b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85c0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
85d0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
85e0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
85f0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
8600: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
8610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8620: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
8630: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8640: 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
8650: 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t:..            
8660: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8670: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
8680: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 64 74 29  ] b = ToUTF8(dt)
8690: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
86a0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
86b0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
86c0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c           if ((fl
86d0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
86e0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
86f0: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
8700: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
8710: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
8720: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8740: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
8750: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29  andle, index, b)
8760: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8770: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
8780: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8790: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
87a0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
87b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
87c0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
87d0: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
87e0: 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31   b, b.Length - 1
87f0: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
8800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8810: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
8820: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
8830: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
8840: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
8850: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
8860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8870: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
8880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
8890: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
88a0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
88b0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
88c0: 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69 74 65  Bind_Blob(SQLite
88d0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
88e0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
88f0: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
8900: 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 62   index, byte[] b
8910: 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d  lobData)..    {.
8920: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
8930: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
8940: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
8950: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69  lite_stmt;....#i
8960: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
8970: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
8980: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
8990: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
89a0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
89b0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
89c0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
89d0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
89e0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
89f0: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
8a00: 78 2c 20 62 6c 6f 62 44 61 74 61 29 3b 0d 0a 20  x, blobData);.. 
8a10: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
8a20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
8a30: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
8a40: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8a50: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
8a60: 5f 62 6c 6f 62 28 68 61 6e 64 6c 65 2c 20 69 6e  _blob(handle, in
8a70: 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20 62  dex, blobData, b
8a80: 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c 20  lobData.Length, 
8a90: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
8aa0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
8ab0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8ac0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
8ad0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
8ae0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
8af0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
8b00: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
8b10: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c  de void Bind_Nul
8b20: 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  l(SQLiteStatemen
8b30: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
8b40: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
8b50: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  ags, int index).
8b60: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
8b70: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
8b80: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
8b90: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8ba0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
8bb0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
8bc0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
8bd0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
8be0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
8bf0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
8c00: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8c10: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
8c20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8c30: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
8c40: 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  e, index);..    
8c50: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
8c60: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
8c70: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
8c80: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8c90: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75  .sqlite3_bind_nu
8ca0: 6c 6c 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  ll(handle, index
8cb0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
8cc0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
8cd0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
8ce0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
8cf0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
8d00: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
8d10: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
8d20: 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f  erride int Bind_
8d30: 50 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c 69 74  ParamCount(SQLit
8d40: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
8d50: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8d60: 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20  nFlags flags).. 
8d70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
8d80: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
8d90: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
8da0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
8db0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 76 61 6c  .        int val
8dc0: 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ue = UnsafeNativ
8dd0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8de0: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
8df0: 63 6f 75 6e 74 28 68 61 6e 64 6c 65 29 3b 0d 0a  count(handle);..
8e00: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
8e10: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
8e20: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
8e30: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
8e40: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
8e50: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
8e60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8e70: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
8e80: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
8e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
8ea0: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
8eb0: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
8ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8ed0: 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
8ee0: 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
8ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
8f00: 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  Statement {0} pa
8f10: 72 61 6d 74 65 72 20 63 6f 75 6e 74 20 69 73 20  ramter count is 
8f20: 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  {1}.",..        
8f30: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
8f40: 74 50 74 72 2c 20 76 61 6c 75 65 29 29 3b 0d 0a  tPtr, value));..
8f50: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8f60: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
8f70: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
8f80: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
8f90: 64 65 20 73 74 72 69 6e 67 20 42 69 6e 64 5f 50  de string Bind_P
8fa0: 61 72 61 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53  aramName(SQLiteS
8fb0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
8fc0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
8fd0: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
8fe0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
8ff0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
9000: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
9010: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
9020: 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20  te_stmt;..      
9030: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 3b 0d 0a    string name;..
9040: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
9050: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
9060: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
9070: 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53    name = UTF8ToS
9080: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
9090: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
90a0: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
90b0: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 68 61  _name_interop(ha
90c0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 6f 75 74  ndle, index, out
90d0: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
90e0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d  lse..        nam
90f0: 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
9100: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
9110: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
9120: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
9130: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 2c  (handle, index),
9140: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d   -1);..#endif...
9150: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
9160: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
9170: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
9180: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
9190: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
91a0: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
91b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  {..            I
91c0: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
91d0: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
91e0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
91f0: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
9200: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
9210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9220: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
9230: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
9250: 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72  tatement {0} par
9260: 61 6d 74 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20  amter #{1} name 
9270: 69 73 20 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20  is {{{2}}}.",.. 
9280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
9290: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
92a0: 65 78 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20  ex, name));..   
92b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
92c0: 20 20 72 65 74 75 72 6e 20 6e 61 6d 65 3b 0d 0a    return name;..
92d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
92e0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
92f0: 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64  nt Bind_ParamInd
9300: 65 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ex(SQLiteStateme
9310: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
9320: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
9330: 6c 61 67 73 2c 20 73 74 72 69 6e 67 20 70 61 72  lags, string par
9340: 61 6d 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a  amName)..    {..
9350: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
9360: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
9370: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
9380: 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20  ite_stmt;..     
9390: 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 55     int index = U
93a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
93b0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
93c0: 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28  parameter_index(
93d0: 68 61 6e 64 6c 65 2c 20 54 6f 55 54 46 38 28 70  handle, ToUTF8(p
93e0: 61 72 61 6d 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20  aramName));.... 
93f0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
9400: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
9410: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
9420: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
9430: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
9440: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
9450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
9460: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
9470: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
9480: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
9490: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
94a0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
94b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
94c0: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
94d0: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
94e0: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61              "Sta
94f0: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
9500: 74 65 72 20 69 6e 64 65 78 20 6f 66 20 6e 61 6d  ter index of nam
9510: 65 20 7b 7b 7b 31 7d 7d 7d 20 69 73 20 23 7b 32  e {{{1}}} is #{2
9520: 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
9530: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
9540: 74 72 2c 20 70 61 72 61 6d 4e 61 6d 65 2c 20 69  tr, paramName, i
9550: 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 20 20 20  ndex));..       
9560: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
9570: 74 75 72 6e 20 69 6e 64 65 78 3b 0d 0a 20 20 20  turn index;..   
9580: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
9590: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
95a0: 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51 4c 69  ColumnCount(SQLi
95b0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
95c0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
95d0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
95e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
95f0: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
9600: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
9610: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
9620: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
9630: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
9640: 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  nName(SQLiteStat
9650: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
9660: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
9670: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
9680: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
9690: 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  en;..      retur
96a0: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
96b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
96c0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
96d0: 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  n_name_interop(s
96e0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
96f0: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e  , index, out len
9700: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
9710: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
9720: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
9730: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9740: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
9750: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
9760: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
9770: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
9780: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
9790: 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41  l override TypeA
97a0: 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66  ffinity ColumnAf
97b0: 66 69 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61  finity(SQLiteSta
97c0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
97d0: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
97e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
97f0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9800: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
9810: 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  type(stmt._sqlit
9820: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
9830: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
9840: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
9850: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70  string ColumnTyp
9860: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
9870: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
9880: 78 2c 20 6f 75 74 20 54 79 70 65 41 66 66 69 6e  x, out TypeAffin
9890: 69 74 79 20 6e 41 66 66 69 6e 69 74 79 29 0d 0a  ity nAffinity)..
98a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
98b0: 20 6c 65 6e 3b 0d 0a 23 69 66 20 21 53 51 4c 49   len;..#if !SQLI
98c0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
98d0: 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
98e0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
98f0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
9900: 5f 64 65 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f  _decltype_intero
9910: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
9920: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
9930: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
9940: 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20      len = -1;.. 
9950: 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20       IntPtr p = 
9960: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9970: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
9980: 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73 74 6d 74  mn_decltype(stmt
9990: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
99a0: 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ndex);..#endif..
99b0: 20 20 20 20 20 20 6e 41 66 66 69 6e 69 74 79 20        nAffinity 
99c0: 3d 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  = ColumnAffinity
99d0: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
99e0: 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 21 3d  ..      if (p !=
99f0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65   IntPtr.Zero) re
9a00: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
9a10: 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20  g(p, len);..    
9a20: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d    else..      {.
9a30: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b  .        string[
9a40: 5d 20 61 72 20 3d 20 73 74 6d 74 2e 54 79 70 65  ] ar = stmt.Type
9a50: 44 65 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a 20 20  Definitions;..  
9a60: 20 20 20 20 20 20 69 66 20 28 61 72 20 21 3d 20        if (ar != 
9a70: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
9a80: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
9a90: 69 6e 64 65 78 20 3c 20 61 72 2e 4c 65 6e 67 74  index < ar.Lengt
9aa0: 68 20 26 26 20 61 72 5b 69 6e 64 65 78 5d 20 21  h && ar[index] !
9ab0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9ac0: 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 5b 69       return ar[i
9ad0: 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20  ndex];..        
9ae0: 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
9af0: 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  n String.Empty;.
9b00: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 73 77 69  ...        //swi
9b10: 74 63 68 20 28 6e 41 66 66 69 6e 69 74 79 29 0d  tch (nAffinity).
9b20: 0a 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20  .        //{..  
9b30: 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54        //  case T
9b40: 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
9b50: 34 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  4:..        //  
9b60: 20 20 72 65 74 75 72 6e 20 22 42 49 47 49 4e 54    return "BIGINT
9b70: 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ";..        //  
9b80: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
9b90: 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20  y.Double:..     
9ba0: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
9bb0: 22 44 4f 55 42 4c 45 22 3b 0d 0a 20 20 20 20 20  "DOUBLE";..     
9bc0: 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65     //  case Type
9bd0: 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a  Affinity.Blob:..
9be0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65          //    re
9bf0: 74 75 72 6e 20 22 42 4c 4f 42 22 3b 0d 0a 20 20  turn "BLOB";..  
9c00: 20 20 20 20 20 20 2f 2f 20 20 64 65 66 61 75 6c        //  defaul
9c10: 74 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  t:..        //  
9c20: 20 20 72 65 74 75 72 6e 20 22 54 45 58 54 22 3b    return "TEXT";
9c30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 20  ..        //}.. 
9c40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
9c50: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
9c60: 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d  erride int Colum
9c70: 6e 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61  nIndex(SQLiteSta
9c80: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72  tement stmt, str
9c90: 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 0d  ing columnName).
9ca0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
9cb0: 74 20 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f 75 6e  t x = ColumnCoun
9cc0: 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20  t(stmt);....    
9cd0: 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30    for (int n = 0
9ce0: 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d 0a 20  ; n < x; n++).. 
9cf0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9d00: 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61  if (String.Compa
9d10: 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 43  re(columnName, C
9d20: 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d 74 2c 20  olumnName(stmt, 
9d30: 6e 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  n), StringCompar
9d40: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
9d50: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
9d60: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9d70: 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  n;..      }..   
9d80: 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20     return -1;.. 
9d90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
9da0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
9db0: 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69 67 69  ring ColumnOrigi
9dc0: 6e 61 6c 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  nalName(SQLiteSt
9dd0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
9de0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
9df0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
9e00: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
9e10: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74   len;..      ret
9e20: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
9e30: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
9e40: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
9e50: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f  umn_origin_name_
9e60: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
9e70: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
9e80: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
9e90: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
9ea0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
9eb0: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
9ec0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9ed0: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
9ee0: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
9ef0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
9f00: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
9f10: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
9f20: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
9f30: 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65  g ColumnDatabase
9f40: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
9f50: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
9f60: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
9f70: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
9f80: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
9f90: 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n;..      return
9fa0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
9fb0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9fc0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
9fd0: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69  _database_name_i
9fe0: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
9ff0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
a000: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
a010: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
a020: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
a030: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
a040: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
a050: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
a060: 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ame(stmt._sqlite
a070: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d  _stmt, index), -
a080: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
a090: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
a0a0: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
a0b0: 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61  ng ColumnTableNa
a0c0: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
a0d0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
a0e0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
a0f0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
a100: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
a110: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
a120: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
a130: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a140: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
a150: 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  able_name_intero
a160: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
a170: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
a180: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
a190: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
a1a0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
a1b0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a1c0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
a1d0: 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74  _table_name(stmt
a1e0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
a1f0: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
a200: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
a210: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
a220: 69 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d  ide void ColumnM
a230: 65 74 61 44 61 74 61 28 73 74 72 69 6e 67 20 64  etaData(string d
a240: 61 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20  ataBase, string 
a250: 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f  table, string co
a260: 6c 75 6d 6e 2c 20 6f 75 74 20 73 74 72 69 6e 67  lumn, out string
a270: 20 64 61 74 61 54 79 70 65 2c 20 6f 75 74 20 73   dataType, out s
a280: 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71  tring collateSeq
a290: 75 65 6e 63 65 2c 20 6f 75 74 20 62 6f 6f 6c 20  uence, out bool 
a2a0: 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 62 6f 6f  notNull, out boo
a2b0: 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75  l primaryKey, ou
a2c0: 74 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65  t bool autoIncre
a2d0: 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ment)..    {..  
a2e0: 20 20 20 20 49 6e 74 50 74 72 20 64 61 74 61 54      IntPtr dataT
a2f0: 79 70 65 50 74 72 3b 0d 0a 20 20 20 20 20 20 49  ypePtr;..      I
a300: 6e 74 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72  ntPtr collSeqPtr
a310: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6e 6f  ;..      int nno
a320: 74 4e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e  tNull;..      in
a330: 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 3b 0d 0a  t nprimaryKey;..
a340: 20 20 20 20 20 20 69 6e 74 20 6e 61 75 74 6f 49        int nautoI
a350: 6e 63 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74  nc;..      SQLit
a360: 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20  eErrorCode n;.. 
a370: 20 20 20 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d       int dtLen;.
a380: 0a 20 20 20 20 20 20 69 6e 74 20 63 73 4c 65 6e  .      int csLen
a390: 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
a3a0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
a3b0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
a3c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a3d0: 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65  _table_column_me
a3e0: 74 61 64 61 74 61 5f 69 6e 74 65 72 6f 70 28 5f  tadata_interop(_
a3f0: 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61  sql, ToUTF8(data
a400: 42 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61  Base), ToUTF8(ta
a410: 62 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c  ble), ToUTF8(col
a420: 75 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79  umn), out dataTy
a430: 70 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53  pePtr, out collS
a440: 65 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e  eqPtr, out nnotN
a450: 75 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72  ull, out nprimar
a460: 79 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49  yKey, out nautoI
a470: 6e 63 2c 20 6f 75 74 20 64 74 4c 65 6e 2c 20 6f  nc, out dtLen, o
a480: 75 74 20 63 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73  ut csLen);..#els
a490: 65 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d  e..      dtLen =
a4a0: 20 2d 31 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65   -1;..      csLe
a4b0: 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20  n = -1;....     
a4c0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
a4d0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a4e0: 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65  _table_column_me
a4f0: 74 61 64 61 74 61 28 5f 73 71 6c 2c 20 54 6f 55  tadata(_sql, ToU
a500: 54 46 38 28 64 61 74 61 42 61 73 65 29 2c 20 54  TF8(dataBase), T
a510: 6f 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f  oUTF8(table), To
a520: 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75  UTF8(column), ou
a530: 74 20 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f  t dataTypePtr, o
a540: 75 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f  ut collSeqPtr, o
a550: 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74  ut nnotNull, out
a560: 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75   nprimaryKey, ou
a570: 74 20 6e 61 75 74 6f 49 6e 63 29 3b 0d 0a 23 65  t nautoInc);..#e
a580: 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28  ndif..      if (
a590: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
a5a0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
a5b0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
a5c0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
a5d0: 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  or());....      
a5e0: 64 61 74 61 54 79 70 65 20 3d 20 55 54 46 38 54  dataType = UTF8T
a5f0: 6f 53 74 72 69 6e 67 28 64 61 74 61 54 79 70 65  oString(dataType
a600: 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20 20  Ptr, dtLen);..  
a610: 20 20 20 20 63 6f 6c 6c 61 74 65 53 65 71 75 65      collateSeque
a620: 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  nce = UTF8ToStri
a630: 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72 2c 20 63  ng(collSeqPtr, c
a640: 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sLen);....      
a650: 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e  notNull = (nnotN
a660: 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20  ull == 1);..    
a670: 20 20 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 28    primaryKey = (
a680: 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 3d 20 31  nprimaryKey == 1
a690: 29 3b 0d 0a 20 20 20 20 20 20 61 75 74 6f 49 6e  );..      autoIn
a6a0: 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61 75 74 6f  crement = (nauto
a6b0: 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20  Inc == 1);..    
a6c0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
a6d0: 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c  l override doubl
a6e0: 65 20 47 65 74 44 6f 75 62 6c 65 28 53 51 4c 69  e GetDouble(SQLi
a6f0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
a700: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
a710: 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c    {..      doubl
a720: 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50  e value;..#if !P
a730: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
a740: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
a750: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
a760: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a770: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
a780: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
a790: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
a7a0: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
a7b0: 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61  DARD..      Unsa
a7c0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a7d0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
a7e0: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74  ouble_interop(st
a7f0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
a800: 20 69 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c 75   index, out valu
a810: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
a820: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
a830: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
a840: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
a850: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
a860: 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ue;..    }....  
a870: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
a880: 69 64 65 20 73 62 79 74 65 20 47 65 74 53 42 79  ide sbyte GetSBy
a890: 74 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  te(SQLiteStateme
a8a0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
a8b0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
a8c0: 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
a8d0: 65 64 28 28 73 62 79 74 65 29 28 47 65 74 49 6e  ed((sbyte)(GetIn
a8e0: 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
a8f0: 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65   & byte.MaxValue
a900: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
a910: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
a920: 69 64 65 20 62 79 74 65 20 47 65 74 42 79 74 65  ide byte GetByte
a930: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
a940: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
a950: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
a960: 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
a970: 28 28 62 79 74 65 29 28 47 65 74 49 6e 74 33 32  ((byte)(GetInt32
a980: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20  (stmt, index) & 
a990: 62 79 74 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b  byte.MaxValue));
a9a0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
a9b0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
a9c0: 20 73 68 6f 72 74 20 47 65 74 49 6e 74 31 36 28   short GetInt16(
a9d0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
a9e0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
a9f0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
aa00: 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28  eturn unchecked(
aa10: 28 73 68 6f 72 74 29 28 47 65 74 49 6e 74 33 32  (short)(GetInt32
aa20: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20  (stmt, index) & 
aa30: 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29  ushort.MaxValue)
aa40: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
aa50: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
aa60: 64 65 20 75 73 68 6f 72 74 20 47 65 74 55 49 6e  de ushort GetUIn
aa70: 74 31 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t16(SQLiteStatem
aa80: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
aa90: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
aaa0: 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63     return unchec
aab0: 6b 65 64 28 28 75 73 68 6f 72 74 29 28 47 65 74  ked((ushort)(Get
aac0: 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
aad0: 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61 78 56  x) & ushort.MaxV
aae0: 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  alue));..    }..
aaf0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ab00: 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 49  verride int GetI
ab10: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
ab20: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
ab30: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
ab40: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
ab50: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
ab60: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
ab70: 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
ab80: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
ab90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
aba0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75 69 6e  nal override uin
abb0: 74 20 47 65 74 55 49 6e 74 33 32 28 53 51 4c 69  t GetUInt32(SQLi
abc0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
abd0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
abe0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
abf0: 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75 69 6e  n unchecked((uin
ac00: 74 29 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  t)GetInt32(stmt,
ac10: 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d   index));..    }
ac20: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
ac30: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
ac40: 65 74 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74  etInt64(SQLiteSt
ac50: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
ac60: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
ac70: 0a 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75  .      long valu
ac80: 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  e;..#if !PLATFOR
ac90: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
aca0: 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20  RK..      value 
acb0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
acc0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
acd0: 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e  lumn_int64(stmt.
ace0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
acf0: 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  dex);..#elif !SQ
ad00: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
ad10: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
ad20: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ad30: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e  _column_int64_in
ad40: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
ad50: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
ad60: 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  out value);..#el
ad70: 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
ad80: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
ad90: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
ada0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65  #endif..      re
adb0: 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20  turn value;..   
adc0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
add0: 61 6c 20 6f 76 65 72 72 69 64 65 20 75 6c 6f 6e  al override ulon
ade0: 67 20 47 65 74 55 49 6e 74 36 34 28 53 51 4c 69  g GetUInt64(SQLi
adf0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
ae00: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
ae10: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
ae20: 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75 6c 6f  n unchecked((ulo
ae30: 6e 67 29 47 65 74 49 6e 74 36 34 28 73 74 6d 74  ng)GetInt64(stmt
ae40: 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20  , index));..    
ae50: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
ae60: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
ae70: 67 20 47 65 74 54 65 78 74 28 53 51 4c 69 74 65  g GetText(SQLite
ae80: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
ae90: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
aea0: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
aeb0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
aec0: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72  nt len;..      r
aed0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
aee0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
aef0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
af00: 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72  olumn_text_inter
af10: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
af20: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74  stmt, index, out
af30: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
af40: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
af50: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
af60: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
af70: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
af80: 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c  n_text(stmt._sql
af90: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
afa0: 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  ,..        Unsaf
afb0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
afc0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
afd0: 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  tes(stmt._sqlite
afe0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d  _stmt, index));.
aff0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
b000: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
b010: 76 65 72 72 69 64 65 20 44 61 74 65 54 69 6d 65  verride DateTime
b020: 20 47 65 74 44 61 74 65 54 69 6d 65 28 53 51 4c   GetDateTime(SQL
b030: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
b040: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
b050: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
b060: 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20  _datetimeFormat 
b070: 3d 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  == SQLiteDateFor
b080: 6d 61 74 73 2e 54 69 63 6b 73 29 0d 0a 20 20 20  mats.Ticks)..   
b090: 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61       return ToDa
b0a0: 74 65 54 69 6d 65 28 47 65 74 49 6e 74 36 34 28  teTime(GetInt64(
b0b0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64  stmt, index), _d
b0c0: 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20  atetimeKind);.. 
b0d0: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64       else if (_d
b0e0: 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d  atetimeFormat ==
b0f0: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
b100: 74 73 2e 4a 75 6c 69 61 6e 44 61 79 29 0d 0a 20  ts.JulianDay).. 
b110: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f         return To
b120: 44 61 74 65 54 69 6d 65 28 47 65 74 44 6f 75 62  DateTime(GetDoub
b130: 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  le(stmt, index),
b140: 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b   _datetimeKind);
b150: 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20  ..      else if 
b160: 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74  (_datetimeFormat
b170: 20 3d 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f   == SQLiteDateFo
b180: 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 29  rmats.UnixEpoch)
b190: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
b1a0: 20 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74 49   ToDateTime(GetI
b1b0: 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
b1c0: 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64  ), _datetimeKind
b1d0: 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  );....#if !SQLIT
b1e0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
b1f0: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
b200: 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54    return ToDateT
b210: 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ime(UnsafeNative
b220: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b230: 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65  column_text_inte
b240: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
b250: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
b260: 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  t len), len);..#
b270: 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
b280: 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e  rn ToDateTime(Un
b290: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
b2a0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
b2b0: 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69  _text(stmt._sqli
b2c0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
b2d0: 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65  ..        Unsafe
b2e0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b2f0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
b300: 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  es(stmt._sqlite_
b310: 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
b320: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
b330: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b340: 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 42  erride long GetB
b350: 79 74 65 73 28 53 51 4c 69 74 65 53 74 61 74 65  ytes(SQLiteState
b360: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
b370: 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f  ndex, int nDataO
b380: 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44  ffset, byte[] bD
b390: 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c  est, int nStart,
b3a0: 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20   int nLength).. 
b3b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
b3c0: 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nlen = UnsafeNat
b3d0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b3e0: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28  e3_column_bytes(
b3f0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
b400: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20  t, index);....  
b410: 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73      // If no des
b420: 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c  tination buffer,
b430: 20 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65   return the size
b440: 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20   needed...      
b450: 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c  if (bDest == nul
b460: 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d  l) return nlen;.
b470: 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f  ...      int nCo
b480: 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d  pied = nLength;.
b490: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
b4a0: 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20  pied + nStart > 
b4b0: 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43  bDest.Length) nC
b4c0: 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65  opied = bDest.Le
b4d0: 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a  ngth - nStart;..
b4e0: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
b4f0: 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20  d + nDataOffset 
b500: 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20  > nlen) nCopied 
b510: 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66  = nlen - nDataOf
b520: 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  fset;....      i
b530: 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d  f (nCopied > 0).
b540: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
b550: 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55    IntPtr ptr = U
b560: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b570: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
b580: 6e 5f 62 6c 6f 62 28 73 74 6d 74 2e 5f 73 71 6c  n_blob(stmt._sql
b590: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
b5a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72  ;....        Mar
b5b0: 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74  shal.Copy((IntPt
b5c0: 72 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29  r)(ptr.ToInt64()
b5d0: 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c   + nDataOffset),
b5e0: 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20   bDest, nStart, 
b5f0: 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20  nCopied);..     
b600: 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a   }..      else..
b610: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b620: 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20   nCopied = 0;.. 
b630: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b640: 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d  return nCopied;.
b650: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
b660: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
b670: 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28 53 51  long GetChars(SQ
b680: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
b690: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69  mt, int index, i
b6a0: 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20  nt nDataOffset, 
b6b0: 63 68 61 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e  char[] bDest, in
b6c0: 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c  t nStart, int nL
b6d0: 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20  ength)..    {.. 
b6e0: 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a       int nlen;..
b6f0: 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65        int nCopie
b700: 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  d = nLength;....
b710: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72        string str
b720: 20 3d 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c   = GetText(stmt,
b730: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
b740: 6e 6c 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74  nlen = str.Lengt
b750: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  h;....      if (
b760: 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72  bDest == null) r
b770: 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20  eturn nlen;.... 
b780: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
b790: 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73   + nStart > bDes
b7a0: 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65  t.Length) nCopie
b7b0: 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  d = bDest.Length
b7c0: 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20   - nStart;..    
b7d0: 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20    if (nCopied + 
b7e0: 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c  nDataOffset > nl
b7f0: 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c  en) nCopied = nl
b800: 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74  en - nDataOffset
b810: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
b820: 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20  Copied > 0)..   
b830: 20 20 20 20 20 73 74 72 2e 43 6f 70 79 54 6f 28       str.CopyTo(
b840: 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 44 65  nDataOffset, bDe
b850: 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70  st, nStart, nCop
b860: 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73  ied);..      els
b870: 65 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a  e nCopied = 0;..
b880: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e  ..      return n
b890: 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a  Copied;..    }..
b8a0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
b8b0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e  verride bool IsN
b8c0: 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ull(SQLiteStatem
b8d0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
b8e0: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
b8f0: 20 20 20 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d     return (Colum
b900: 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20  nAffinity(stmt, 
b910: 69 6e 64 65 78 29 20 3d 3d 20 54 79 70 65 41 66  index) == TypeAf
b920: 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20  finity.Null);.. 
b930: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
b940: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
b950: 74 20 41 67 67 72 65 67 61 74 65 43 6f 75 6e 74  t AggregateCount
b960: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29  (IntPtr context)
b970: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
b980: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
b990: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
b9a0: 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75 6e  3_aggregate_coun
b9b0: 74 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20  t(context);..   
b9c0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
b9d0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
b9e0: 20 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e 28   CreateFunction(
b9f0: 73 74 72 69 6e 67 20 73 74 72 46 75 6e 63 74 69  string strFuncti
ba00: 6f 6e 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20 62  on, int nArgs, b
ba10: 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c  ool needCollSeq,
ba20: 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20   SQLiteCallback 
ba30: 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c  func, SQLiteCall
ba40: 62 61 63 6b 20 66 75 6e 63 73 74 65 70 2c 20 53  back funcstep, S
ba50: 51 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61  QLiteFinalCallba
ba60: 63 6b 20 66 75 6e 63 66 69 6e 61 6c 29 0d 0a 20  ck funcfinal).. 
ba70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
ba80: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a  teErrorCode n;..
ba90: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
baa0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20  ANDARD..      n 
bab0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
bac0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
bad0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e  eate_function_in
bae0: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
baf0: 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c  F8(strFunction),
bb00: 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74   nArgs, 4, IntPt
bb10: 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75  r.Zero, func, fu
bb20: 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61  ncstep, funcfina
bb30: 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20  l, (needCollSeq 
bb40: 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30  == true) ? 1 : 0
bb50: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
bb60: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
bb70: 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66  de.Ok) n = Unsaf
bb80: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
bb90: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
bba0: 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f  nction_interop(_
bbb0: 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46  sql, ToUTF8(strF
bbc0: 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c  unction), nArgs,
bbd0: 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   1, IntPtr.Zero,
bbe0: 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c   func, funcstep,
bbf0: 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65   funcfinal, (nee
bc00: 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65  dCollSeq == true
bc10: 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c  ) ? 1 : 0);..#el
bc20: 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e  se..      n = Un
bc30: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
bc40: 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
bc50: 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20  _function(_sql, 
bc60: 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
bc70: 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49  on), nArgs, 4, I
bc80: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
bc90: 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
bca0: 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69  final);..      i
bcb0: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
bcc0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20  rorCode.Ok) n = 
bcd0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
bce0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
bcf0: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c  te_function(_sql
bd00: 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63  , ToUTF8(strFunc
bd10: 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c  tion), nArgs, 1,
bd20: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
bd30: 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75  nc, funcstep, fu
bd40: 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69  ncfinal);..#endi
bd50: 66 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  f..      if (n !
bd60: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
bd70: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
bd80: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
bd90: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
bda0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
bdb0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
bdc0: 69 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 43  ide void CreateC
bdd0: 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67 20  ollation(string 
bde0: 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51  strCollation, SQ
bdf0: 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75  LiteCollation fu
be00: 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74  nc, SQLiteCollat
be10: 69 6f 6e 20 66 75 6e 63 31 36 29 0d 0a 20 20 20  ion func16)..   
be20: 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
be30: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
be40: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
be50: 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
be60: 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c  _collation(_sql,
be70: 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61   ToUTF8(strColla
be80: 74 69 6f 6e 29 2c 20 32 2c 20 49 6e 74 50 74 72  tion), 2, IntPtr
be90: 2e 5a 65 72 6f 2c 20 66 75 6e 63 31 36 29 3b 0d  .Zero, func16);.
bea0: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20  .      if (n == 
beb0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
bec0: 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  Ok) n = UnsafeNa
bed0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
bee0: 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
bef0: 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46  tion(_sql, ToUTF
bf00: 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c  8(strCollation),
bf10: 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   1, IntPtr.Zero,
bf20: 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 20 20 69   func);..      i
bf30: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
bf40: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
bf50: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
bf60: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
bf70: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
bf80: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
bf90: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f   override int Co
bfa0: 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70  ntextCollateComp
bfb0: 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  are(CollationEnc
bfc0: 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49  odingEnum enc, I
bfd0: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73  ntPtr context, s
bfe0: 74 72 69 6e 67 20 73 31 2c 20 73 74 72 69 6e 67  tring s1, string
bff0: 20 73 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66   s2)..    {..#if
c000: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
c010: 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  D..      byte[] 
c020: 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b  b1;..      byte[
c030: 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73  ] b2;..      Sys
c040: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
c050: 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75  g converter = nu
c060: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69  ll;....      swi
c070: 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20  tch (enc)..     
c080: 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65   {..        case
c090: 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
c0a0: 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20  ngEnum.UTF8:..  
c0b0: 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
c0c0: 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
c0d0: 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a  Encoding.UTF8;..
c0e0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
c0f0: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
c100: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
c110: 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20  Enum.UTF16LE:.. 
c120: 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
c130: 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
c140: 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64  .Encoding.Unicod
c150: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  e;..          br
c160: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  eak;..        ca
c170: 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
c180: 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45  dingEnum.UTF16BE
c190: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
c1a0: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
c1b0: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69  Text.Encoding.Bi
c1c0: 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d  gEndianUnicode;.
c1d0: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
c1e0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
c1f0: 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74      b1 = convert
c200: 65 72 2e 47 65 74 42 79 74 65 73 28 73 31 29 3b  er.GetBytes(s1);
c210: 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e  ..      b2 = con
c220: 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28  verter.GetBytes(
c230: 73 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  s2);....      re
c240: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
c250: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c260: 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d  _context_collcom
c270: 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  pare_interop(con
c280: 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e  text, b1, b1.Len
c290: 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67  gth, b2, b2.Leng
c2a0: 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  th);..#else..   
c2b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
c2c0: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
c2d0: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
c2e0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
c2f0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
c300: 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61  int ContextColla
c310: 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74  teCompare(Collat
c320: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20  ionEncodingEnum 
c330: 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  enc, IntPtr cont
c340: 65 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20  ext, char[] c1, 
c350: 63 68 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20  char[] c2)..    
c360: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
c370: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62  TANDARD..      b
c380: 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20  yte[] b1;..     
c390: 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20   byte[] b2;..   
c3a0: 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45     System.Text.E
c3b0: 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65  ncoding converte
c3c0: 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  r = null;....   
c3d0: 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d     switch (enc).
c3e0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
c3f0: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
c400: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
c410: 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  8:..          co
c420: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
c430: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
c440: 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  TF8;..          
c450: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
c460: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
c470: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36  codingEnum.UTF16
c480: 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  LE:..          c
c490: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
c4a0: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
c4b0: 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
c4c0: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
c4d0: 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
c4e0: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
c4f0: 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20  TF16BE:..       
c500: 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
c510: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
c520: 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69  ing.BigEndianUni
c530: 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
c540: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d   break;..      }
c550: 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63  ....      b1 = c
c560: 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
c570: 73 28 63 31 29 3b 0d 0a 20 20 20 20 20 20 62 32  s(c1);..      b2
c580: 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74   = converter.Get
c590: 42 79 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20  Bytes(c2);....  
c5a0: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
c5b0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c5c0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63  qlite3_context_c
c5d0: 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72  ollcompare_inter
c5e0: 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20  op(context, b1, 
c5f0: 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62  b1.Length, b2, b
c600: 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73  2.Length);..#els
c610: 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
c620: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
c630: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
c640: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
c650: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
c660: 72 72 69 64 65 20 43 6f 6c 6c 61 74 69 6f 6e 53  rride CollationS
c670: 65 71 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c 61  equence GetColla
c680: 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 53 51 4c  tionSequence(SQL
c690: 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63  iteFunction func
c6a0: 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  , IntPtr context
c6b0: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
c6c0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
c6d0: 20 20 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e 53        CollationS
c6e0: 65 71 75 65 6e 63 65 20 73 65 71 20 3d 20 6e 65  equence seq = ne
c6f0: 77 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65  w CollationSeque
c700: 6e 63 65 28 29 3b 0d 0a 20 20 20 20 20 20 69 6e  nce();..      in
c710: 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e  t len;..      in
c720: 74 20 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 69  t type;..      i
c730: 6e 74 20 65 6e 63 3b 0d 0a 20 20 20 20 20 20 49  nt enc;..      I
c740: 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65  ntPtr p = Unsafe
c750: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c760: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f  lite3_context_co
c770: 6c 6c 73 65 71 5f 69 6e 74 65 72 6f 70 28 63 6f  llseq_interop(co
c780: 6e 74 65 78 74 2c 20 6f 75 74 20 74 79 70 65 2c  ntext, out type,
c790: 20 6f 75 74 20 65 6e 63 2c 20 6f 75 74 20 6c 65   out enc, out le
c7a0: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  n);....      if 
c7b0: 28 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e  (p != null) seq.
c7c0: 4e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72  Name = UTF8ToStr
c7d0: 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20  ing(p, len);..  
c7e0: 20 20 20 20 73 65 71 2e 54 79 70 65 20 3d 20 28      seq.Type = (
c7f0: 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75  CollationTypeEnu
c800: 6d 29 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 73  m)type;..      s
c810: 65 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b  eq._func = func;
c820: 0d 0a 20 20 20 20 20 20 73 65 71 2e 45 6e 63 6f  ..      seq.Enco
c830: 64 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f  ding = (Collatio
c840: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e  nEncodingEnum)en
c850: 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  c;....      retu
c860: 72 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a  rn seq;..#else..
c870: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
c880: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
c890: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
c8a0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
c8b0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c8c0: 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d  de long GetParam
c8d0: 56 61 6c 75 65 42 79 74 65 73 28 49 6e 74 50 74  ValueBytes(IntPt
c8e0: 72 20 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66  r p, int nDataOf
c8f0: 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65  fset, byte[] bDe
c900: 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20  st, int nStart, 
c910: 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20  int nLength)..  
c920: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
c930: 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  len = UnsafeNati
c940: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
c950: 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 29  3_value_bytes(p)
c960: 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66  ;....      // If
c970: 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20   no destination 
c980: 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74  buffer, return t
c990: 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d  he size needed..
c9a0: 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74  .      if (bDest
c9b0: 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
c9c0: 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20   nlen;....      
c9d0: 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c  int nCopied = nL
c9e0: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
c9f0: 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53  if (nCopied + nS
ca00: 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e  tart > bDest.Len
ca10: 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62  gth) nCopied = b
ca20: 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53  Dest.Length - nS
ca30: 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20  tart;..      if 
ca40: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61  (nCopied + nData
ca50: 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e  Offset > nlen) n
ca60: 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20  Copied = nlen - 
ca70: 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a  nDataOffset;....
ca80: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
ca90: 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d  d > 0)..      {.
caa0: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
cab0: 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ptr = UnsafeNati
cac0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
cad0: 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b  3_value_blob(p);
cae0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73  ....        Mars
caf0: 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72  hal.Copy((IntPtr
cb00: 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20  )(ptr.ToInt64() 
cb10: 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20  + nDataOffset), 
cb20: 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e  bDest, nStart, n
cb30: 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20  Copied);..      
cb40: 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  }..      else.. 
cb50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cb60: 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20  nCopied = 0;..  
cb70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
cb80: 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a  eturn nCopied;..
cb90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
cba0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64  ernal override d
cbb0: 6f 75 62 6c 65 20 47 65 74 50 61 72 61 6d 56 61  ouble GetParamVa
cbc0: 6c 75 65 44 6f 75 62 6c 65 28 49 6e 74 50 74 72  lueDouble(IntPtr
cbd0: 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   ptr)..    {..  
cbe0: 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65      double value
cbf0: 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ;..#if !PLATFORM
cc00: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
cc10: 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d  K..      value =
cc20: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
cc30: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
cc40: 75 65 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d  ue_double(ptr);.
cc50: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
cc60: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55  TANDARD..      U
cc70: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
cc80: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
cc90: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
cca0: 70 74 72 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b  ptr, out value);
ccb0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
ccc0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
ccd0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
cce0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
ccf0: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b     return value;
cd00: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
cd10: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
cd20: 20 69 6e 74 20 47 65 74 50 61 72 61 6d 56 61 6c   int GetParamVal
cd30: 75 65 49 6e 74 33 32 28 49 6e 74 50 74 72 20 70  ueInt32(IntPtr p
cd40: 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  tr)..    {..    
cd50: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
cd60: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
cd70: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 70  ite3_value_int(p
cd80: 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
cd90: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
cda0: 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72  ride long GetPar
cdb0: 61 6d 56 61 6c 75 65 49 6e 74 36 34 28 49 6e 74  amValueInt64(Int
cdc0: 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
cdd0: 0a 20 20 20 20 20 20 49 6e 74 36 34 20 76 61 6c  .      Int64 val
cde0: 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ue;..#if !PLATFO
cdf0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
ce00: 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65  ORK..      value
ce10: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
ce20: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
ce30: 61 6c 75 65 5f 69 6e 74 36 34 28 70 74 72 29 3b  alue_int64(ptr);
ce40: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
ce50: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
ce60: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
ce70: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
ce80: 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  e_int64_interop(
ce90: 70 74 72 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b  ptr, out value);
cea0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
ceb0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
cec0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
ced0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
cee0: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b     return value;
cef0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
cf00: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
cf10: 20 73 74 72 69 6e 67 20 47 65 74 50 61 72 61 6d   string GetParam
cf20: 56 61 6c 75 65 54 65 78 74 28 49 6e 74 50 74 72  ValueText(IntPtr
cf30: 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69   ptr)..    {..#i
cf40: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
cf50: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
cf60: 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n;..      return
cf70: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
cf80: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
cf90: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
cfa0: 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 70 74 72  text_interop(ptr
cfb0: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
cfc0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
cfd0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
cfe0: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
cff0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
d000: 76 61 6c 75 65 5f 74 65 78 74 28 70 74 72 29 2c  value_text(ptr),
d010: 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65  ..        Unsafe
d020: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d030: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65  lite3_value_byte
d040: 73 28 70 74 72 29 29 3b 0d 0a 23 65 6e 64 69 66  s(ptr));..#endif
d050: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
d060: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
d070: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 47 65   TypeAffinity Ge
d080: 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28  tParamValueType(
d090: 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20  IntPtr ptr)..   
d0a0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
d0b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d0c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
d0d0: 75 65 5f 74 79 70 65 28 70 74 72 29 3b 0d 0a 20  ue_type(ptr);.. 
d0e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d0f0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
d100: 69 64 20 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e  id ReturnBlob(In
d110: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 62 79  tPtr context, by
d120: 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20  te[] value)..   
d130: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
d140: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d150: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f  lite3_result_blo
d160: 62 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  b(context, value
d170: 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20  , value.Length, 
d180: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
d190: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d1a0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
d1b0: 6f 69 64 20 52 65 74 75 72 6e 44 6f 75 62 6c 65  oid ReturnDouble
d1c0: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
d1d0: 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a   double value)..
d1e0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
d1f0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
d200: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73  EWORK..      Uns
d210: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d220: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
d230: 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20  double(context, 
d240: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
d250: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
d260: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
d270: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d280: 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65  e3_result_double
d290: 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
d2a0: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
d2b0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
d2c0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
d2d0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
d2e0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
d2f0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
d300: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
d310: 74 75 72 6e 45 72 72 6f 72 28 49 6e 74 50 74 72  turnError(IntPtr
d320: 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67   context, string
d330: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
d340: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
d350: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d360: 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63  3_result_error(c
d370: 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76  ontext, ToUTF8(v
d380: 61 6c 75 65 29 2c 20 76 61 6c 75 65 2e 4c 65 6e  alue), value.Len
d390: 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  gth);..    }....
d3a0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d3b0: 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
d3c0: 6e 49 6e 74 33 32 28 49 6e 74 50 74 72 20 63 6f  nInt32(IntPtr co
d3d0: 6e 74 65 78 74 2c 20 69 6e 74 20 76 61 6c 75 65  ntext, int value
d3e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
d3f0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d400: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
d410: 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20  lt_int(context, 
d420: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  value);..    }..
d430: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
d440: 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
d450: 75 72 6e 49 6e 74 36 34 28 49 6e 74 50 74 72 20  urnInt64(IntPtr 
d460: 63 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67 20 76 61  context, long va
d470: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  lue)..    {..#if
d480: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
d490: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
d4a0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
d4b0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
d4c0: 65 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74  esult_int64(cont
d4d0: 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  ext, value);..#e
d4e0: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
d4f0: 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61  DARD..      Unsa
d500: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
d510: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
d520: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  nt64_interop(con
d530: 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29  text, ref value)
d540: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
d550: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
d560: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
d570: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
d580: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
d590: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
d5a0: 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28 49 6e 74  d ReturnNull(Int
d5b0: 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20  Ptr context)..  
d5c0: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
d5d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
d5e0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75  qlite3_result_nu
d5f0: 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  ll(context);..  
d600: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
d610: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
d620: 64 20 52 65 74 75 72 6e 54 65 78 74 28 49 6e 74  d ReturnText(Int
d630: 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72  Ptr context, str
d640: 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ing value)..    
d650: 7b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  {..      byte[] 
d660: 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65  b = ToUTF8(value
d670: 29 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  );..      Unsafe
d680: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d690: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
d6a0: 74 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46  t(context, ToUTF
d6b0: 38 28 76 61 6c 75 65 29 2c 20 62 2e 4c 65 6e 67  8(value), b.Leng
d6c0: 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29  th - 1, (IntPtr)
d6d0: 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  (-1));..    }...
d6e0: 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52  .#if INTEROP_VIR
d6f0: 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20  TUAL_TABLE..    
d700: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
d710: 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65     /// Calls the
d720: 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63   native SQLite c
d730: 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f  ore library in o
d740: 72 64 65 72 20 74 6f 20 63 72 65 61 74 65 20 61  rder to create a
d750: 20 64 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20   disposable..   
d760: 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20 63 6f 6e 74   /// module cont
d770: 61 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65  aining the imple
d780: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76  mentation of a v
d790: 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
d7a0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
d7b0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
d7c0: 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e  m name="module">
d7d0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f  ..    /// The mo
d7e0: 64 75 6c 65 20 6f 62 6a 65 63 74 20 74 6f 20 62  dule object to b
d7f0: 65 20 75 73 65 64 20 77 68 65 6e 20 63 72 65 61  e used when crea
d800: 74 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20  ting the native 
d810: 64 69 73 70 6f 73 61 62 6c 65 20 6d 6f 64 75 6c  disposable modul
d820: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
d830: 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
d840: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
d850: 20 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 53 51   CreateModule(SQ
d860: 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
d870: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
d880: 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
d890: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
d8a0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
d8b0: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
d8c0: 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a  ion("module");..
d8d0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73  ..        if (_s
d8e0: 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql == null)..   
d8f0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
d900: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
d910: 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  on("connection h
d920: 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
d930: 6e 64 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndle");....     
d940: 20 20 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73     SetLoadExtens
d950: 69 6f 6e 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ion(true);..    
d960: 20 20 20 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f      LoadExtensio
d970: 6e 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n(UnsafeNativeMe
d980: 74 68 6f 64 73 2e 53 51 4c 49 54 45 5f 44 4c 4c  thods.SQLITE_DLL
d990: 2c 20 22 73 71 6c 69 74 65 33 5f 76 74 73 68 69  , "sqlite3_vtshi
d9a0: 6d 5f 69 6e 69 74 22 29 3b 0d 0a 0d 0a 20 20 20  m_init");....   
d9b0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 4e 61 6d       IntPtr pNam
d9c0: 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  e = IntPtr.Zero;
d9d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
d9e0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
d9f0: 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d 20          pName = 
da00: 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66  SQLiteString.Utf
da10: 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e  8IntPtrFromStrin
da20: 67 28 6d 6f 64 75 6c 65 2e 4e 61 6d 65 29 3b 0d  g(module.Name);.
da30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  ...            U
da40: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
da50: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ds.sqlite3_modul
da60: 65 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 20 3d  e nativeModule =
da70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
da80: 20 20 6d 6f 64 75 6c 65 2e 43 72 65 61 74 65 4e    module.CreateN
da90: 61 74 69 76 65 4d 6f 64 75 6c 65 28 29 3b 0d 0a  ativeModule();..
daa0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
dab0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
dac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
dad0: 20 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65   (UnsafeNativeMe
dae0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
daf0: 65 61 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f  eate_disposable_
db00: 6d 6f 64 75 6c 65 28 0d 0a 20 20 20 20 20 20 20  module(..       
db10: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71               _sq
db20: 6c 2c 20 70 4e 61 6d 65 2c 20 72 65 66 20 6e 61  l, pName, ref na
db30: 74 69 76 65 4d 6f 64 75 6c 65 2c 20 49 6e 74 50  tiveModule, IntP
db40: 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20 20 20 20  tr.Zero,..      
db50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75                nu
db60: 6c 6c 29 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  ll) != IntPtr.Ze
db70: 72 6f 29 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  ro)..#elif !SQLI
db80: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
db90: 20 20 20 20 20 20 20 20 20 69 66 20 28 55 6e 73           if (Uns
dba0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
dbb0: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
dbc0: 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c  disposable_modul
dbd0: 65 5f 69 6e 74 65 72 6f 70 28 0d 0a 20 20 20 20  e_interop(..    
dbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbf0: 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c 20 6d 6f 64  _sql, pName, mod
dc00: 75 6c 65 2e 43 72 65 61 74 65 4e 61 74 69 76 65  ule.CreateNative
dc10: 4d 6f 64 75 6c 65 49 6e 74 65 72 6f 70 28 29 2c  ModuleInterop(),
dc20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dc30: 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
dc40: 6c 65 2e 69 56 65 72 73 69 6f 6e 2c 20 6e 61 74  le.iVersion, nat
dc50: 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
dc60: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
dc70: 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
dc80: 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 2c 20 6e  dule.xConnect, n
dc90: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73  ativeModule.xBes
dca0: 74 49 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20  tIndex,..       
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
dcc0: 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f  iveModule.xDisco
dcd0: 6e 6e 65 63 74 2c 20 6e 61 74 69 76 65 4d 6f 64  nnect, nativeMod
dce0: 75 6c 65 2e 78 44 65 73 74 72 6f 79 2c 0d 0a 20  ule.xDestroy,.. 
dcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd00: 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
dd10: 78 4f 70 65 6e 2c 20 6e 61 74 69 76 65 4d 6f 64  xOpen, nativeMod
dd20: 75 6c 65 2e 78 43 6c 6f 73 65 2c 0d 0a 20 20 20  ule.xClose,..   
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd40: 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46   nativeModule.xF
dd50: 69 6c 74 65 72 2c 20 6e 61 74 69 76 65 4d 6f 64  ilter, nativeMod
dd60: 75 6c 65 2e 78 4e 65 78 74 2c 0d 0a 20 20 20 20  ule.xNext,..    
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd80: 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f  nativeModule.xEo
dd90: 66 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  f, nativeModule.
dda0: 78 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20 20 20 20  xColumn,..      
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
ddc0: 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49  tiveModule.xRowI
ddd0: 64 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  d, nativeModule.
dde0: 78 55 70 64 61 74 65 2c 0d 0a 20 20 20 20 20 20  xUpdate,..      
ddf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
de00: 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69  tiveModule.xBegi
de10: 6e 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  n, nativeModule.
de20: 78 53 79 6e 63 2c 0d 0a 20 20 20 20 20 20 20 20  xSync,..        
de30: 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
de40: 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74  veModule.xCommit
de50: 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  , nativeModule.x
de60: 52 6f 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Rollback,..     
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
de80: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e  ativeModule.xFin
de90: 64 46 75 6e 63 74 69 6f 6e 2c 20 6e 61 74 69 76  dFunction, nativ
dea0: 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 2c  eModule.xRename,
deb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dec0: 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
ded0: 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 2c 20 6e  le.xSavepoint, n
dee0: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c  ativeModule.xRel
def0: 65 61 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ease,..         
df00: 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
df10: 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63  eModule.xRollbac
df20: 6b 54 6f 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  kTo, IntPtr.Zero
df30: 2c 20 6e 75 6c 6c 29 20 21 3d 20 49 6e 74 50 74  , null) != IntPt
df40: 72 2e 5a 65 72 6f 29 0d 0a 23 65 6c 73 65 0d 0a  r.Zero)..#else..
df50: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
df60: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
df70: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
df80: 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 20 21 50  ..#endif..#if !P
df90: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
dfa0: 52 41 4d 45 57 4f 52 4b 20 7c 7c 20 21 53 51 4c  RAMEWORK || !SQL
dfb0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
dfc0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
dfe0: 28 5f 6d 6f 64 75 6c 65 73 20 3d 3d 20 6e 75 6c  (_modules == nul
dff0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
e000: 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73          _modules
e010: 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72   = new Dictionar
e020: 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65  y<string, SQLite
e030: 4d 6f 64 75 6c 65 3e 28 29 3b 0d 0a 0d 0a 20 20  Module>();....  
e040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d                _m
e050: 6f 64 75 6c 65 73 2e 41 64 64 28 6d 6f 64 75 6c  odules.Add(modul
e060: 65 2e 4e 61 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b  e.Name, module);
e070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
e090: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
e0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e0b0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
e0c0: 74 65 45 78 63 65 70 74 69 6f 6e 28 47 65 74 4c  teException(GetL
e0d0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
e0e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
e0f0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
e100: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
e110: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e120: 20 20 20 20 20 20 20 20 69 66 20 28 70 4e 61 6d          if (pNam
e130: 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  e != IntPtr.Zero
e140: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e160: 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46    SQLiteMemory.F
e170: 72 65 65 28 70 4e 61 6d 65 29 3b 0d 0a 20 20 20  ree(pName);..   
e180: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4e 61               pNa
e190: 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  me = IntPtr.Zero
e1a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
e1b0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
e1c0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
e1d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
e1e0: 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76   Calls the nativ
e1f0: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
e200: 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74  brary in order t
e210: 6f 20 63 6c 65 61 6e 75 70 20 74 68 65 20 72 65  o cleanup the re
e220: 73 6f 75 72 63 65 73 0d 0a 20 20 20 20 2f 2f 2f  sources..    ///
e230: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
e240: 20 61 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69   a module contai
e250: 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65  ning the impleme
e260: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72  ntation of a vir
e270: 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
e280: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
e290: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
e2a0: 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
e2b0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75      /// The modu
e2c0: 6c 65 20 6f 62 6a 65 63 74 20 70 72 65 76 69 6f  le object previo
e2d0: 75 73 6c 79 20 70 61 73 73 65 64 20 74 6f 20 74  usly passed to t
e2e0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43 72  he <see cref="Cr
e2f0: 65 61 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a  eateModule" />..
e300: 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d      /// method..
e310: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
e320: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
e330: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 44 69  override void Di
e340: 73 70 6f 73 65 4d 6f 64 75 6c 65 28 53 51 4c 69  sposeModule(SQLi
e350: 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 29  teModule module)
e360: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
e370: 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
e380: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
e390: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
e3a0: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
e3b0: 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a  n("module");....
e3c0: 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44          module.D
e3d0: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 7d  ispose();..    }
e3e0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
e3f0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
e400: 65 20 49 6e 74 50 74 72 20 41 67 67 72 65 67 61  e IntPtr Aggrega
e410: 74 65 43 6f 6e 74 65 78 74 28 49 6e 74 50 74 72  teContext(IntPtr
e420: 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b   context)..    {
e430: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
e440: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
e450: 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65  ds.sqlite3_aggre
e460: 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e  gate_context(con
e470: 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20 20 7d  text, 1);..    }
e480: 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f  ....#if INTEROP_
e490: 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20  VIRTUAL_TABLE.. 
e4a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
e4b0: 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20  ..    /// Calls 
e4c0: 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74  the native SQLit
e4d0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69  e core library i
e4e0: 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61  n order to decla
e4f0: 72 65 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  re a virtual tab
e500: 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20 72  le..    /// in r
e510: 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c  esponse to a cal
e520: 6c 20 69 6e 74 6f 20 74 68 65 20 78 43 72 65 61  l into the xCrea
e530: 74 65 20 6f 72 20 78 43 6f 6e 6e 65 63 74 20 76  te or xConnect v
e540: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74  irtual table met
e550: 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  hods...    /// <
e560: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
e570: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
e580: 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f  module">..    //
e590: 2f 20 54 68 65 20 76 69 72 74 75 61 6c 20 74 61  / The virtual ta
e5a0: 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61 74 20  ble module that 
e5b0: 69 73 20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73  is to be respons
e5c0: 69 62 6c 65 20 66 6f 72 20 74 68 65 20 76 69 72  ible for the vir
e5d0: 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20  tual table..    
e5e0: 2f 2f 2f 20 62 65 69 6e 67 20 64 65 63 6c 61 72  /// being declar
e5f0: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
e600: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
e610: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 53  param name="strS
e620: 71 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ql">..    /// Th
e630: 65 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  e string contain
e640: 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
e650: 65 6d 65 6e 74 20 64 65 73 63 72 69 62 69 6e 67  ement describing
e660: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
e670: 6c 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62  le to..    /// b
e680: 65 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20  e declared...   
e690: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
e6a0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
e6b0: 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20  me="error">..   
e6c0: 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73   /// Upon succes
e6d0: 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  s, the contents 
e6e0: 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  of this paramete
e6f0: 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e  r are undefined.
e700: 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d    Upon failure,.
e710: 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75  .    /// it shou
e720: 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70  ld contain an ap
e730: 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20  propriate error 
e740: 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f  message...    //
e750: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
e760: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
e770: 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
e780: 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
e790: 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  code...    /// <
e7a0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
e7b0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
e7c0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
e7d0: 20 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c 54   DeclareVirtualT
e7e0: 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 53  able(..        S
e7f0: 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
e800: 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  le,..        str
e810: 69 6e 67 20 73 74 72 53 71 6c 2c 0d 0a 20 20 20  ing strSql,..   
e820: 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
e830: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29  error..        )
e840: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
e850: 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c   if (_sql == nul
e860: 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
e870: 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
e880: 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68   = "connection h
e890: 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
e8a0: 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  ndle";..        
e8b0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
e8c0: 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
e8d0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
e8e0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
e8f0: 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  Sql = IntPtr.Zer
e900: 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  o;....        tr
e910: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
e920: 20 20 20 20 20 20 20 20 20 20 70 53 71 6c 20 3d            pSql =
e930: 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74   SQLiteString.Ut
e940: 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
e950: 6e 67 28 73 74 72 53 71 6c 29 3b 0d 0a 0d 0a 20  ng(strSql);.... 
e960: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
e970: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
e980: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
e990: 64 73 2e 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  ds.sqlite3_decla
e9a0: 72 65 5f 76 74 61 62 28 0d 0a 20 20 20 20 20 20  re_vtab(..      
e9b0: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20            _sql, 
e9c0: 70 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  pSql);....      
e9d0: 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20        if ((n == 
e9e0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
e9f0: 4f 6b 29 20 26 26 20 28 6d 6f 64 75 6c 65 20 21  Ok) && (module !
ea00: 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
ea10: 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
ea20: 2e 44 65 63 6c 61 72 65 64 20 3d 20 74 72 75 65  .Declared = true
ea30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ea40: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
ea50: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72  ErrorCode.Ok) er
ea60: 72 6f 72 20 3d 20 47 65 74 4c 61 73 74 45 72 72  ror = GetLastErr
ea70: 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  or();....       
ea80: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a       return n;..
ea90: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
eaa0: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
eab0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
eac0: 20 20 20 69 66 20 28 70 53 71 6c 20 21 3d 20 49     if (pSql != I
ead0: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
eae0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
eaf0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
eb00: 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 53  teMemory.Free(pS
eb10: 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ql);..          
eb20: 20 20 20 20 20 20 70 53 71 6c 20 3d 20 49 6e 74        pSql = Int
eb30: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
eb40: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
eb50: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64    }..    }..#end
eb60: 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  if....    /// <s
eb70: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
eb80: 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61   Enables or disa
eb90: 62 6c 65 64 20 65 78 74 65 6e 73 69 6f 6e 20 6c  bled extension l
eba0: 6f 61 64 69 6e 67 20 62 79 20 53 51 4c 69 74 65  oading by SQLite
ebb0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
ebc0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
ebd0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f  param name="bOnO
ebe0: 66 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72  ff">..    /// Tr
ebf0: 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61  ue to enable loa
ec00: 64 69 6e 67 20 6f 66 20 65 78 74 65 6e 73 69 6f  ding of extensio
ec10: 6e 73 2c 20 66 61 6c 73 65 20 74 6f 20 64 69 73  ns, false to dis
ec20: 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  able...    /// <
ec30: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
ec40: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
ec50: 6f 69 64 20 53 65 74 4c 6f 61 64 45 78 74 65 6e  oid SetLoadExten
ec60: 73 69 6f 6e 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66  sion(bool bOnOff
ec70: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
ec80: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
ec90: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
eca0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
ecb0: 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78  3_enable_load_ex
ecc0: 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  tension(..      
ecd0: 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e        _sql, (bOn
ece0: 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d  Off ? -1 : 0));.
ecf0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
ed00: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
ed10: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
ed20: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
ed30: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
ed40: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
ed50: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
ed60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73  >..    /// Loads
ed70: 20 61 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73   a SQLite extens
ed80: 69 6f 6e 20 6c 69 62 72 61 72 79 20 66 72 6f 6d  ion library from
ed90: 20 74 68 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e   the named file.
eda0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
edb0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
edc0: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e  aram name="fileN
edd0: 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ame">..    /// T
ede0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
edf0: 79 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72  ynamic link libr
ee00: 61 72 79 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  ary file contain
ee10: 69 6e 67 20 74 68 65 20 65 78 74 65 6e 73 69 6f  ing the extensio
ee20: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  n...    /// </pa
ee30: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
ee40: 61 72 61 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e  aram name="procN
ee50: 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ame">..    /// T
ee60: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 65  he name of the e
ee70: 78 70 6f 72 74 65 64 20 66 75 6e 63 74 69 6f 6e  xported function
ee80: 20 75 73 65 64 20 74 6f 20 69 6e 69 74 69 61 6c   used to initial
ee90: 69 7a 65 20 74 68 65 20 65 78 74 65 6e 73 69 6f  ize the extensio
eea0: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e  n...    /// If n
eeb0: 75 6c 6c 2c 20 74 68 65 20 64 65 66 61 75 6c 74  ull, the default
eec0: 20 22 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73   "sqlite3_extens
eed0: 69 6f 6e 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62  ion_init" will b
eee0: 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  e used...    ///
eef0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
ef00: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
ef10: 20 76 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e 73   void LoadExtens
ef20: 69 6f 6e 28 73 74 72 69 6e 67 20 66 69 6c 65 4e  ion(string fileN
ef30: 61 6d 65 2c 20 73 74 72 69 6e 67 20 70 72 6f 63  ame, string proc
ef40: 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Name)..    {..  
ef50: 20 20 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61        if (fileNa
ef60: 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
ef70: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
ef80: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
ef90: 78 63 65 70 74 69 6f 6e 28 22 66 69 6c 65 4e 61  xception("fileNa
efa0: 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me");....       
efb0: 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 20 3d   IntPtr pError =
efc0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
efd0: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
efe0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
eff0: 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38       byte[] utf8
f000: 46 69 6c 65 4e 61 6d 65 20 3d 20 55 54 46 38 45  FileName = UTF8E
f010: 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74  ncoding.UTF8.Get
f020: 42 79 74 65 73 28 66 69 6c 65 4e 61 6d 65 20 2b  Bytes(fileName +
f030: 20 27 5c 30 27 29 3b 0d 0a 20 20 20 20 20 20 20   '\0');..       
f040: 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38       byte[] utf8
f050: 50 72 6f 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b  ProcName = null;
f060: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f070: 69 66 20 28 70 72 6f 63 4e 61 6d 65 20 21 3d 20  if (procName != 
f080: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
f090: 20 20 20 20 20 20 20 75 74 66 38 50 72 6f 63 4e         utf8ProcN
f0a0: 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69  ame = UTF8Encodi
f0b0: 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73  ng.UTF8.GetBytes
f0c0: 28 70 72 6f 63 4e 61 6d 65 20 2b 20 27 5c 30 27  (procName + '\0'
f0d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f0e0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
f0f0: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
f100: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
f110: 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  3_load_extension
f120: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
f130: 20 20 20 5f 73 71 6c 2c 20 75 74 66 38 46 69 6c     _sql, utf8Fil
f140: 65 4e 61 6d 65 2c 20 75 74 66 38 50 72 6f 63 4e  eName, utf8ProcN
f150: 61 6d 65 2c 20 72 65 66 20 70 45 72 72 6f 72 29  ame, ref pError)
f160: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f170: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
f180: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
f190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f1a0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
f1b0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 55 54 46 38  xception(n, UTF8
f1c0: 54 6f 53 74 72 69 6e 67 28 70 45 72 72 6f 72 2c  ToString(pError,
f1d0: 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20   -1));..        
f1e0: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
f1f0: 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ly..        {.. 
f200: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
f210: 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e  Error != IntPtr.
f220: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
f230: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
f240: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
f250: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
f260: 33 5f 66 72 65 65 28 70 45 72 72 6f 72 29 3b 0d  3_free(pError);.
f270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f280: 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72   pError = IntPtr
f290: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
f2a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
f2b0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
f2c0: 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69  // Enables or di
f2d0: 73 61 62 6c 65 64 20 65 78 74 65 6e 64 65 64 20  sabled extended 
f2e0: 72 65 73 75 6c 74 20 63 6f 64 65 73 20 72 65 74  result codes ret
f2f0: 75 72 6e 65 64 20 62 79 20 53 51 4c 69 74 65 0d  urned by SQLite.
f300: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
f310: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 45  erride void SetE
f320: 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64  xtendedResultCod
f330: 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d  es(bool bOnOff).
f340: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
f350: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
f360: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
f370: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78  thods.sqlite3_ex
f380: 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f  tended_result_co
f390: 64 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  des(..          
f3a0: 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20  _sql, (bOnOff ? 
f3b0: 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20  -1 : 0));....   
f3c0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
f3d0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
f3e0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
f3f0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
f400: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
f410: 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65     }..    /// Ge
f420: 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69  ts the last SQLi
f430: 74 65 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20  te error code.. 
f440: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
f450: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
f460: 43 6f 64 65 20 52 65 73 75 6c 74 43 6f 64 65 28  Code ResultCode(
f470: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
f480: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
f490: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
f4a0: 65 33 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29  e3_errcode(_sql)
f4b0: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f  ;..    }..    //
f4c0: 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20  / Gets the last 
f4d0: 53 51 4c 69 74 65 20 65 78 74 65 6e 64 65 64 20  SQLite extended 
f4e0: 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20  error code..    
f4f0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
f500: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
f510: 65 20 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74  e ExtendedResult
f520: 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Code()..    {.. 
f530: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
f540: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f550: 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64  sqlite3_extended
f560: 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d  _errcode(_sql);.
f570: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
f580: 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73  / Add a log mess
f590: 61 67 65 20 76 69 61 20 74 68 65 20 53 51 4c 69  age via the SQLi
f5a0: 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69  te sqlite3_log i
f5b0: 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69  nterface...    i
f5c0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
f5d0: 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67 65   void LogMessage
f5e0: 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  (SQLiteErrorCode
f5f0: 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e   iErrCode, strin
f600: 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20  g zMessage)..   
f610: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
f620: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f630: 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f  lite3_log(iErrCo
f640: 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65 73 73  de, ToUTF8(zMess
f650: 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  age));..    }...
f660: 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44  .#if INTEROP_COD
f670: 45 43 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  EC..    internal
f680: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
f690: 65 74 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b  etPassword(byte[
f6a0: 5d 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 29  ] passwordBytes)
f6b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
f6c0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
f6d0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
f6e0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6b  ethods.sqlite3_k
f6f0: 65 79 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f 72  ey(_sql, passwor
f700: 64 42 79 74 65 73 2c 20 70 61 73 73 77 6f 72 64  dBytes, password
f710: 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a  Bytes.Length);..
f720: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
f730: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
f740: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
f750: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
f760: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
f770: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
f780: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
f790: 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73 73   void ChangePass
f7a0: 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77 50  word(byte[] newP
f7b0: 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20  asswordBytes).. 
f7c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
f7d0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
f7e0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f7f0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 6b 65  ods.sqlite3_reke
f800: 79 28 5f 73 71 6c 2c 20 6e 65 77 50 61 73 73 77  y(_sql, newPassw
f810: 6f 72 64 42 79 74 65 73 2c 20 28 6e 65 77 50 61  ordBytes, (newPa
f820: 73 73 77 6f 72 64 42 79 74 65 73 20 3d 3d 20 6e  sswordBytes == n
f830: 75 6c 6c 29 20 3f 20 30 20 3a 20 6e 65 77 50 61  ull) ? 0 : newPa
f840: 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67  sswordBytes.Leng
f850: 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  th);..      if (
f860: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
f870: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
f880: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
f890: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
f8a0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23  or());..    }..#
f8b0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74  endif....    int
f8c0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
f8d0: 6f 69 64 20 53 65 74 55 70 64 61 74 65 48 6f 6f  oid SetUpdateHoo
f8e0: 6b 28 53 51 4c 69 74 65 55 70 64 61 74 65 43 61  k(SQLiteUpdateCa
f8f0: 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
f900: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
f910: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
f920: 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f  qlite3_update_ho
f930: 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49  ok(_sql, func, I
f940: 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
f950: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
f960: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
f970: 64 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28  d SetCommitHook(
f980: 53 51 4c 69 74 65 43 6f 6d 6d 69 74 43 61 6c 6c  SQLiteCommitCall
f990: 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
f9a0: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
f9b0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
f9c0: 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b  ite3_commit_hook
f9d0: 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
f9e0: 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
f9f0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
fa00: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
fa10: 53 65 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b  SetTraceCallback
fa20: 28 53 51 4c 69 74 65 54 72 61 63 65 43 61 6c 6c  (SQLiteTraceCall
fa30: 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
fa40: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
fa50: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
fa60: 69 74 65 33 5f 74 72 61 63 65 28 5f 73 71 6c 2c  ite3_trace(_sql,
fa70: 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
fa80: 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
fa90: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
faa0: 72 69 64 65 20 76 6f 69 64 20 53 65 74 52 6f 6c  ride void SetRol
fab0: 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65  lbackHook(SQLite
fac0: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
fad0: 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
fae0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
faf0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
fb00: 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f  _rollback_hook(_
fb10: 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
fb20: 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
fb30: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
fb40: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c  ary>..    /// Al
fb50: 6c 6f 77 73 20 74 68 65 20 73 65 74 74 69 6e 67  lows the setting
fb60: 20 6f 66 20 61 20 6c 6f 67 67 69 6e 67 20 63 61   of a logging ca
fb70: 6c 6c 62 61 63 6b 20 69 6e 76 6f 6b 65 64 20 62  llback invoked b
fb80: 79 20 53 51 4c 69 74 65 20 77 68 65 6e 20 61 0d  y SQLite when a.
fb90: 0a 20 20 20 20 2f 2f 2f 20 6c 6f 67 20 65 76 65  .    /// log eve
fba0: 6e 74 20 6f 63 63 75 72 73 2e 20 20 4f 6e 6c 79  nt occurs.  Only
fbb0: 20 6f 6e 65 20 63 61 6c 6c 62 61 63 6b 20 6d 61   one callback ma
fbc0: 79 20 62 65 20 73 65 74 2e 20 20 49 66 20 4e 55  y be set.  If NU
fbd0: 4c 4c 20 69 73 20 70 61 73 73 65 64 2c 0d 0a 20  LL is passed,.. 
fbe0: 20 20 20 2f 2f 2f 20 74 68 65 20 6c 6f 67 67 69     /// the loggi
fbf0: 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 75  ng callback is u
fc00: 6e 72 65 67 69 73 74 65 72 65 64 2e 0d 0a 20 20  nregistered...  
fc10: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
fc20: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
fc30: 20 6e 61 6d 65 3d 22 66 75 6e 63 22 3e 54 68 65   name="func">The
fc40: 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69   callback functi
fc50: 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70  on to invoke.</p
fc60: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
fc70: 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20  returns>Returns 
fc80: 61 20 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72  a result code</r
fc90: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
fca0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
fcb0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
fcc0: 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 53 51  etLogCallback(SQ
fcd0: 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 20  LiteLogCallback 
fce0: 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
fcf0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
fd00: 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
fd10: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
fd20: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f  qlite3_config_lo
fd30: 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g(..            
fd40: 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
fd50: 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
fd60: 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20 49 6e 74  G_LOG, func, Int
fd70: 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20  Ptr.Zero);....  
fd80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b        return rc;
fd90: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
fda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
fe00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
fe10: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65  ry>..    /// Cre
fe20: 61 74 65 73 20 61 20 6e 65 77 20 53 51 4c 69 74  ates a new SQLit
fe30: 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
fe40: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 70 72 6f  based on the pro
fe50: 76 69 64 65 64 20 64 65 73 74 69 6e 61 74 69 6f  vided destinatio
fe60: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62  n..    /// datab
fe70: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
fe80: 20 54 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   The source data
fe90: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
fea0: 69 73 20 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20  is the one..    
feb0: 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77  /// associated w
fec0: 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74 2e  ith this object.
fed0: 20 20 54 68 65 20 73 6f 75 72 63 65 20 61 6e 64    The source and
fee0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
fef0: 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63  abase..    /// c
ff00: 6f 6e 6e 65 63 74 69 6f 6e 73 20 63 61 6e 6e 6f  onnections canno
ff10: 74 20 62 65 20 74 68 65 20 73 61 6d 65 2e 0d 0a  t be the same...
ff20: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
ff30: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
ff40: 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 43 6e 6e  am name="destCnn
ff50: 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f  ">The destinatio
ff60: 6e 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  n database conne
ff70: 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  ction.</param>..
ff80: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
ff90: 61 6d 65 3d 22 64 65 73 74 4e 61 6d 65 22 3e 54  ame="destName">T
ffa0: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  he destination d
ffb0: 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70  atabase name.</p
ffc0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
ffd0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72  param name="sour
ffe0: 63 65 4e 61 6d 65 22 3e 54 68 65 20 73 6f 75 72  ceName">The sour
fff0: 63 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  ce database name
10000 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
10010 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
10020 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20 62 61  newly created ba
10030 63 6b 75 70 20 6f 62 6a 65 63 74 2e 3c 2f 72 65  ckup object.</re
10040 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
10050 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
10060 4c 69 74 65 42 61 63 6b 75 70 20 49 6e 69 74 69  LiteBackup Initi
10070 61 6c 69 7a 65 42 61 63 6b 75 70 28 0d 0a 20 20  alizeBackup(..  
10080 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
10090 65 63 74 69 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d  ection destCnn,.
100a0 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
100b0 64 65 73 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  destName,..     
100c0 20 20 20 73 74 72 69 6e 67 20 73 6f 75 72 63 65     string source
100d0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 29 0d  Name..        ).
100e0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
100f0 69 66 20 28 64 65 73 74 43 6e 6e 20 3d 3d 20 6e  if (destCnn == n
10100 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
10110 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
10120 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
10130 6e 28 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d  n("destCnn");...
10140 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73  .        if (des
10150 74 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  tName == null)..
10160 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
10170 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
10180 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73  llException("des
10190 74 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  tName");....    
101a0 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 4e 61      if (sourceNa
101b0 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
101c0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
101d0 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
101e0 78 63 65 70 74 69 6f 6e 28 22 73 6f 75 72 63 65  xception("source
101f0 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name");....     
10200 20 20 20 53 51 4c 69 74 65 33 20 64 65 73 74 53     SQLite3 destS
10210 71 6c 69 74 65 33 20 3d 20 64 65 73 74 43 6e 6e  qlite3 = destCnn
10220 2e 5f 73 71 6c 20 61 73 20 53 51 4c 69 74 65 33  ._sql as SQLite3
10230 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
10240 28 64 65 73 74 53 71 6c 69 74 65 33 20 3d 3d 20  (destSqlite3 == 
10250 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
10260 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
10270 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d  umentException(.
10280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10290 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f   "Destination co
102a0 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 6e 6f 20  nnection has no 
102b0 77 72 61 70 70 65 72 2e 22 2c 0d 0a 20 20 20 20  wrapper.",..    
102c0 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65 73              "des
102d0 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tCnn");....     
102e0 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
102f0 69 6f 6e 48 61 6e 64 6c 65 20 64 65 73 74 48 61  ionHandle destHa
10300 6e 64 6c 65 20 3d 20 64 65 73 74 53 71 6c 69 74  ndle = destSqlit
10310 65 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20  e3._sql;....    
10320 20 20 20 20 69 66 20 28 64 65 73 74 48 61 6e 64      if (destHand
10330 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
10340 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
10350 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70  ew ArgumentExcep
10360 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
10370 20 20 20 20 20 20 20 22 44 65 73 74 69 6e 61 74         "Destinat
10380 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ion connection h
10390 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
103a0 6e 64 6c 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20  ndle.",..       
103b0 20 20 20 20 20 20 20 20 20 22 64 65 73 74 43 6e           "destCn
103c0 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n");....        
103d0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
103e0 48 61 6e 64 6c 65 20 73 6f 75 72 63 65 48 61 6e  Handle sourceHan
103f0 64 6c 65 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20  dle = _sql;.... 
10400 20 20 20 20 20 20 20 69 66 20 28 73 6f 75 72 63         if (sourc
10410 65 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29  eHandle == null)
10420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
10430 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
10440 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
10450 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
10460 20 20 20 20 22 53 6f 75 72 63 65 20 63 6f 6e 6e      "Source conn
10470 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e  ection has an in
10480 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b  valid handle.");
10490 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65  ....        byte
104a0 5b 5d 20 7a 44 65 73 74 4e 61 6d 65 20 3d 20 54  [] zDestName = T
104b0 6f 55 54 46 38 28 64 65 73 74 4e 61 6d 65 29 3b  oUTF8(destName);
104c0 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d  ..        byte[]
104d0 20 7a 53 6f 75 72 63 65 4e 61 6d 65 20 3d 20 54   zSourceName = T
104e0 6f 55 54 46 38 28 73 6f 75 72 63 65 4e 61 6d 65  oUTF8(sourceName
104f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
10500 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
10510 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20   backupHandle = 
10520 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
10530 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
10540 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
10550 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
10560 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
10570 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a  finally /* NOTE:
10580 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20   Thread.Abort() 
10590 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a  protection. */..
105a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
105b0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 62 61         IntPtr ba
105c0 63 6b 75 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  ckup = UnsafeNat
105d0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
105e0 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74 28 0d  e3_backup_init(.
105f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10600 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65   destHandle, zDe
10610 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61  stName, sourceHa
10620 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65 4e 61 6d  ndle, zSourceNam
10630 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
10640 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
10650 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
10660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10670 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
10680 78 63 65 70 74 69 6f 6e 28 52 65 73 75 6c 74 43  xception(ResultC
10690 6f 64 65 28 29 2c 20 47 65 74 4c 61 73 74 45 72  ode(), GetLastEr
106a0 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
106b0 20 20 20 20 20 20 20 62 61 63 6b 75 70 48 61 6e         backupHan
106c0 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  dle = new SQLite
106d0 42 61 63 6b 75 70 48 61 6e 64 6c 65 28 64 65 73  BackupHandle(des
106e0 74 48 61 6e 64 6c 65 2c 20 62 61 63 6b 75 70 29  tHandle, backup)
106f0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
10700 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
10710 65 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70 28  ew SQLiteBackup(
10720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
10730 69 73 2c 20 62 61 63 6b 75 70 48 61 6e 64 6c 65  is, backupHandle
10740 2c 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44  , destHandle, zD
10750 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48  estName, sourceH
10760 61 6e 64 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  andle,..        
10770 20 20 20 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29      zSourceName)
10780 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
10790 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
107a0 20 20 20 2f 2f 2f 20 43 6f 70 69 65 73 20 75 70     /// Copies up
107b0 20 74 6f 20 4e 20 70 61 67 65 73 20 66 72 6f 6d   to N pages from
107c0 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   the source data
107d0 62 61 73 65 20 74 6f 20 74 68 65 20 64 65 73 74  base to the dest
107e0 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f  ination..    ///
107f0 20 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69   database associ
10800 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70  ated with the sp
10810 65 63 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f  ecified backup o
10820 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bject...    /// 
10830 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
10840 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
10850 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63  "backup">The bac
10860 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 75 73  kup object to us
10870 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  e.</param>..    
10880 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
10890 22 6e 50 61 67 65 22 3e 0d 0a 20 20 20 20 2f 2f  "nPage">..    //
108a0 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
108b0 70 61 67 65 73 20 74 6f 20 63 6f 70 79 2c 20 6e  pages to copy, n
108c0 65 67 61 74 69 76 65 20 74 6f 20 63 6f 70 79 20  egative to copy 
108d0 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 70 61  all remaining pa
108e0 67 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ges...    /// </
108f0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
10900 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74  <param name="ret
10910 72 79 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65  ry">..    /// Se
10920 74 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65  t to true if the
10930 20 6f 70 65 72 61 74 69 6f 6e 20 6e 65 65 64 73   operation needs
10940 20 74 6f 20 62 65 20 72 65 74 72 69 65 64 20 64   to be retried d
10950 75 65 20 74 6f 20 64 61 74 61 62 61 73 65 0d 0a  ue to database..
10960 20 20 20 20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20      /// locking 
10970 69 73 73 75 65 73 3b 20 6f 74 68 65 72 77 69 73  issues; otherwis
10980 65 2c 20 73 65 74 20 74 6f 20 66 61 6c 73 65 2e  e, set to false.
10990 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
109a0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
109b0 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  urns>..    /// T
109c0 72 75 65 20 69 66 20 74 68 65 72 65 20 61 72 65  rue if there are
109d0 20 6d 6f 72 65 20 70 61 67 65 73 20 74 6f 20 62   more pages to b
109e0 65 20 63 6f 70 69 65 64 2c 20 66 61 6c 73 65 20  e copied, false 
109f0 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20  otherwise...    
10a00 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
10a10 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10a20 72 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 42  rride bool StepB
10a30 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
10a40 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63  SQLiteBackup bac
10a50 6b 75 70 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e  kup,..        in
10a60 74 20 6e 50 61 67 65 2c 0d 0a 20 20 20 20 20 20  t nPage,..      
10a70 20 20 6f 75 74 20 62 6f 6f 6c 20 72 65 74 72 79    out bool retry
10a80 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
10a90 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 72   {..        retr
10aa0 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  y = false;....  
10ab0 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70        if (backup
10ac0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
10ad0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
10ae0 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
10af0 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29  eption("backup")
10b00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
10b10 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20  iteBackupHandle 
10b20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e  handle = backup.
10b30 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d  _sqlite_backup;.
10b40 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
10b50 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
10b60 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
10b70 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
10b80 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
10b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10ba0 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
10bb0 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
10bc0 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20  handle.");....  
10bd0 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
10be0 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  dlePtr = handle;
10bf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
10c00 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74  handlePtr == Int
10c10 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
10c20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
10c30 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
10c40 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
10c50 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
10c60 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
10c70 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
10c80 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d  e pointer.");...
10c90 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
10ca0 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
10cb0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10cc0 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  .sqlite3_backup_
10cd0 73 74 65 70 28 68 61 6e 64 6c 65 50 74 72 2c 20  step(handlePtr, 
10ce0 6e 50 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20  nPage);..       
10cf0 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73   backup._stepRes
10d00 75 6c 74 20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45  ult = n; /* NOTE
10d10 3a 20 53 61 76 65 20 66 6f 72 20 75 73 65 20 62  : Save for use b
10d20 79 20 46 69 6e 69 73 68 42 61 63 6b 75 70 2e 20  y FinishBackup. 
10d30 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  */....        if
10d40 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
10d50 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
10d60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10d70 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
10d80 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
10d90 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d      else if (n =
10da0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
10db0 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20  e.Busy)..       
10dc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10dd0 72 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20  retry = true;.. 
10de0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10df0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
10e00 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
10e10 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
10e20 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64  ErrorCode.Locked
10e30 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
10e40 20 20 20 20 20 20 20 20 20 20 72 65 74 72 79 20            retry 
10e50 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
10e60 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
10e70 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
10e80 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
10e90 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
10ea0 6f 64 65 2e 44 6f 6e 65 29 0d 0a 20 20 20 20 20  ode.Done)..     
10eb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10ec0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
10ed0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
10ee0 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
10ef0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10f00 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
10f10 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
10f20 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
10f30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
10f40 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
10f50 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
10f60 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
10f70 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69  r of pages remai
10f80 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65  ning to be copie
10f90 64 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63  d from the sourc
10fa0 65 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62  e..    /// datab
10fb0 61 73 65 20 74 6f 20 74 68 65 20 64 65 73 74 69  ase to the desti
10fc0 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20  nation database 
10fd0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
10fe0 74 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20  the specified.. 
10ff0 20 20 20 2f 2f 2f 20 62 61 63 6b 75 70 20 6f 62     /// backup ob
11000 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
11010 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
11020 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
11030 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b  backup">The back
11040 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65  up object to che
11050 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ck.</param>..   
11060 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
11070 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
11080 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62  s remaining to b
11090 65 20 63 6f 70 69 65 64 2e 3c 2f 72 65 74 75 72  e copied.</retur
110a0 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
110b0 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52  l override int R
110c0 65 6d 61 69 6e 69 6e 67 42 61 63 6b 75 70 28 0d  emainingBackup(.
110d0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
110e0 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20  ackup backup..  
110f0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
11100 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b          if (back
11110 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  up == null)..   
11120 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
11130 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
11140 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70  xception("backup
11150 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
11160 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c  QLiteBackupHandl
11170 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75  e handle = backu
11180 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70  p._sqlite_backup
11190 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
111a0 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (handle == null)
111b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
111c0 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
111d0 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
111e0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
111f0 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
11200 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
11210 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a  d handle.");....
11220 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
11230 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c  andlePtr = handl
11240 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
11250 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49   (handlePtr == I
11260 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
11270 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
11280 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
11290 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
112b0 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
112c0 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
112d0 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d  dle pointer.");.
112e0 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
112f0 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
11300 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
11310 63 6b 75 70 5f 72 65 6d 61 69 6e 69 6e 67 28 68  ckup_remaining(h
11320 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20  andlePtr);..    
11330 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
11340 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
11350 52 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61  Returns the tota
11360 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  l number of page
11370 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  s in the source 
11380 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
11390 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74  ted..    /// wit
113a0 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  h the specified 
113b0 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a  backup object...
113c0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
113d0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
113e0 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22  am name="backup"
113f0 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65  >The backup obje
11400 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61  ct to check.</pa
11410 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
11420 65 74 75 72 6e 73 3e 54 68 65 20 74 6f 74 61 6c  eturns>The total
11430 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
11440 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64   in the source d
11450 61 74 61 62 61 73 65 2e 3c 2f 72 65 74 75 72 6e  atabase.</return
11460 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
11470 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 50 61   override int Pa
11480 67 65 43 6f 75 6e 74 42 61 63 6b 75 70 28 0d 0a  geCountBackup(..
11490 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
114a0 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20  ckup backup..   
114b0 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
114c0 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75         if (backu
114d0 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  p == null)..    
114e0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
114f0 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
11500 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22  ception("backup"
11510 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
11520 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
11530 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70   handle = backup
11540 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b  ._sqlite_backup;
11550 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
11560 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  handle == null).
11570 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
11580 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
11590 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
115a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
115b0 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
115c0 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
115d0 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
115e0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
115f0 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65  ndlePtr = handle
11600 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
11610 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e  (handlePtr == In
11620 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
11630 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
11640 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
11650 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
11660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
11670 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
11680 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
11690 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a  le pointer.");..
116a0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
116b0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
116c0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
116d0 6b 75 70 5f 70 61 67 65 63 6f 75 6e 74 28 68 61  kup_pagecount(ha
116e0 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d  ndlePtr);..    }
116f0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
11700 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44  mary>..    /// D
11710 65 73 74 72 6f 79 73 20 74 68 65 20 62 61 63 6b  estroys the back
11720 75 70 20 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69  up object, rolli
11730 6e 67 20 62 61 63 6b 20 61 6e 79 20 62 61 63 6b  ng back any back
11740 75 70 20 74 68 61 74 20 6d 61 79 20 62 65 20 69  up that may be i
11750 6e 0d 0a 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65  n..    /// proge
11760 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ss...    /// </s
11770 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
11780 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61   <param name="ba
11790 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70  ckup">The backup
117a0 20 6f 62 6a 65 63 74 20 74 6f 20 64 65 73 74 72   object to destr
117b0 6f 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  oy.</param>..   
117c0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
117d0 64 65 20 76 6f 69 64 20 46 69 6e 69 73 68 42 61  de void FinishBa
117e0 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53  ckup(..        S
117f0 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b  QLiteBackup back
11800 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  up..        ).. 
11810 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
11820 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c   (backup == null
11830 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
11840 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
11850 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
11860 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20  backup");....   
11870 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
11880 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  pHandle handle =
11890 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f   backup._sqlite_
118a0 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20  backup;....     
118b0 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d     if (handle ==
118c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
118d0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
118e0 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
118f0 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
11900 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
11910 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
11920 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
11930 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
11940 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d  tPtr handlePtr =
11950 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
11960 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74      if (handlePt
11970 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r == IntPtr.Zero
11980 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
11990 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
119a0 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
119b0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
119c0 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
119d0 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
119e0 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65  id handle pointe
119f0 72 2e 22 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  r.");....#if !SQ
11a00 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
11a10 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
11a20 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
11a30 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
11a40 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69  qlite3_backup_fi
11a50 6e 69 73 68 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nish_interop(han
11a60 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6c 73 65 0d  dlePtr);..#else.
11a70 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
11a80 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
11a90 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
11aa0 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  .sqlite3_backup_
11ab0 66 69 6e 69 73 68 28 68 61 6e 64 6c 65 50 74 72  finish(handlePtr
11ac0 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
11ad0 20 20 20 20 68 61 6e 64 6c 65 2e 53 65 74 48 61      handle.SetHa
11ae0 6e 64 6c 65 41 73 49 6e 76 61 6c 69 64 28 29 3b  ndleAsInvalid();
11af0 0d 0a 0d 0a 23 69 66 20 43 4f 55 4e 54 5f 48 41  ....#if COUNT_HA
11b00 4e 44 4c 45 0d 0a 20 20 20 20 20 20 20 20 69 66  NDLE..        if
11b10 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72   ((n == SQLiteEr
11b20 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28  rorCode.Ok) || (
11b30 6e 20 3d 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65  n == backup._ste
11b40 70 52 65 73 75 6c 74 29 29 20 68 61 6e 64 6c 65  pResult)) handle
11b50 2e 57 61 73 52 65 6c 65 61 73 65 64 4f 6b 28 29  .WasReleasedOk()
11b60 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
11b70 20 20 20 20 20 69 66 20 28 28 6e 20 21 3d 20 53       if ((n != S
11b80 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
11b90 6b 29 20 26 26 20 28 6e 20 21 3d 20 62 61 63 6b  k) && (n != back
11ba0 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29  up._stepResult))
11bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
11bc0 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
11bd0 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
11be0 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
11bf0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
11c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
11c60 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
11c70 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e      /// Determin
11c80 65 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  es if the SQLite
11c90 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
11ca0 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  s been initializ
11cb0 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  ed for the..    
11cc0 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63  /// current proc
11cd0 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
11ce0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
11cf0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
11d00 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69   /// A boolean i
11d10 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
11d20 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c  r or not the SQL
11d30 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
11d40 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f   has been..    /
11d50 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  // initialized f
11d60 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  or the current p
11d70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
11d80 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
11d90 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
11da0 64 65 20 62 6f 6f 6c 20 49 73 49 6e 69 74 69 61  de bool IsInitia
11db0 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a  lized()..    {..
11dc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
11dd0 74 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69 7a  taticIsInitializ
11de0 65 64 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ed();..    }....
11df0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
11e00 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72  >..    /// Deter
11e10 6d 69 6e 65 73 20 69 66 20 74 68 65 20 53 51 4c  mines if the SQL
11e20 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
11e30 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61   has been initia
11e40 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a 20  lized for the.. 
11e50 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70     /// current p
11e60 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
11e70 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
11e80 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
11e90 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61      /// A boolea
11ea0 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  n indicating whe
11eb0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
11ec0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
11ed0 61 72 79 20 68 61 73 20 62 65 65 6e 0d 0a 20 20  ary has been..  
11ee0 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65    /// initialize
11ef0 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
11f00 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
11f10 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
11f20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
11f30 74 69 63 20 62 6f 6f 6c 20 53 74 61 74 69 63 49  tic bool StaticI
11f40 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a  sInitialized()..
11f50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f      {..        /
11f60 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 42 55  /..        // BU
11f70 47 46 49 58 3a 20 50 72 65 76 65 6e 74 20 72 61  GFIX: Prevent ra
11f80 63 65 73 20 77 69 74 68 20 6f 74 68 65 72 20 74  ces with other t
11f90 68 72 65 61 64 73 20 66 6f 72 20 74 68 69 73 20  hreads for this 
11fa0 65 6e 74 69 72 65 20 62 6c 6f 63 6b 2c 20 64 75  entire block, du
11fb0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  e..        //   
11fc0 20 20 20 20 20 20 74 6f 20 74 68 65 20 74 72 79        to the try
11fd0 2f 66 69 6e 61 6c 6c 79 20 73 65 6d 61 6e 74 69  /finally semanti
11fe0 63 73 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20  cs.  See ticket 
11ff0 5b 37 32 39 30 35 63 39 61 37 37 5d 2e 0d 0a 20  [72905c9a77]... 
12000 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
12010 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f     lock (syncRoo
12020 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  t)..        {.. 
12030 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
12040 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
12050 54 45 3a 20 53 61 76 65 20 74 68 65 20 73 74 61  TE: Save the sta
12060 74 65 20 6f 66 20 74 68 65 20 6c 6f 67 67 69 6e  te of the loggin
12070 67 20 63 6c 61 73 73 20 61 6e 64 20 74 68 65 6e  g class and then
12080 20 72 65 73 74 6f 72 65 20 69 74 0d 0a 20 20 20   restore it..   
12090 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
120a0 20 20 61 66 74 65 72 20 77 65 20 61 72 65 20 64    after we are d
120b0 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20 6c 6f 67  one to avoid log
120c0 67 69 6e 67 20 74 6f 6f 20 6d 61 6e 79 20 66 61  ging too many fa
120d0 6c 73 65 20 65 72 72 6f 72 73 2e 0d 0a 20 20 20  lse errors...   
120e0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
120f0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61           bool sa
12100 76 65 64 45 6e 61 62 6c 65 64 20 3d 20 53 51 4c  vedEnabled = SQL
12110 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d  iteLog.Enabled;.
12120 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
12130 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d  iteLog.Enabled =
12140 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
12150 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
12160 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12170 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
12180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12190 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6d 65 74  / NOTE: This met
121a0 68 6f 64 20 5b 61 62 5d 75 73 65 73 20 74 68 65  hod [ab]uses the
121b0 20 66 61 63 74 20 74 68 61 74 20 53 51 4c 69 74   fact that SQLit
121c0 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 0d 0a 20  e will always.. 
121d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
121e0 2f 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  /       return S
121f0 51 4c 49 54 45 5f 45 52 52 4f 52 20 66 6f 72 20  QLITE_ERROR for 
12200 61 6e 79 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66  any unknown conf
12210 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  iguration option
12220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12230 20 20 2f 2f 20 20 20 20 20 20 20 2a 75 6e 6c 65    //       *unle
12240 73 73 2a 20 74 68 65 20 53 51 4c 69 74 65 20 6c  ss* the SQLite l
12250 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 65 61  ibrary has alrea
12260 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  dy been initiali
12270 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  zed...          
12280 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49        //       I
12290 6e 20 74 68 61 74 20 63 61 73 65 20 69 74 20 77  n that case it w
122a0 69 6c 6c 20 61 6c 77 61 79 73 20 72 65 74 75 72  ill always retur
122b0 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2e  n SQLITE_MISUSE.
122c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
122d0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
122e0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
122f0 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
12300 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12310 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f  qlite3_config_no
12320 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
12330 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
12340 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c  onfigOpsEnum.SQL
12350 49 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29  ITE_CONFIG_NONE)
12360 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12370 20 20 20 20 20 72 65 74 75 72 6e 20 28 72 63 20       return (rc 
12380 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
12390 64 65 2e 4d 69 73 75 73 65 29 3b 0d 0a 20 20 20  de.Misuse);..   
123a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
123b0 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
123c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
123d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123e0 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65  SQLiteLog.Enable
123f0 64 20 3d 20 73 61 76 65 64 45 6e 61 62 6c 65 64  d = savedEnabled
12400 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
12410 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
12420 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
12430 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
12440 20 48 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e   Helper function
12450 20 74 6f 20 72 65 74 72 69 65 76 65 20 61 20 63   to retrieve a c
12460 6f 6c 75 6d 6e 20 6f 66 20 64 61 74 61 20 66 72  olumn of data fr
12470 6f 6d 20 61 6e 20 61 63 74 69 76 65 20 73 74 61  om an active sta
12480 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f  tement...    ///
12490 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
124a0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
124b0 3d 22 73 74 6d 74 22 3e 54 68 65 20 73 74 61 74  ="stmt">The stat
124c0 65 6d 65 6e 74 20 62 65 69 6e 67 20 73 74 65 70  ement being step
124d0 28 29 27 64 20 74 68 72 6f 75 67 68 3c 2f 70 61  ()'d through</pa
124e0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
124f0 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73  aram name="flags
12500 22 3e 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f  ">The flags asso
12510 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
12520 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72  connection.</par
12530 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
12540 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22  ram name="index"
12550 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  >The column inde
12560 78 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  x to retrieve</p
12570 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
12580 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22  param name="typ"
12590 3e 54 68 65 20 74 79 70 65 20 6f 66 20 64 61 74  >The type of dat
125a0 61 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  a contained in t
125b0 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 55  he column.  If U
125c0 6e 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68  ninitialized, th
125d0 69 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c  is function will
125e0 20 72 65 74 72 69 65 76 65 20 74 68 65 20 64 61   retrieve the da
125f0 74 61 74 79 70 65 20 69 6e 66 6f 72 6d 61 74 69  tatype informati
12600 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  on.</param>..   
12610 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
12620 74 75 72 6e 73 20 74 68 65 20 64 61 74 61 20 69  turns the data i
12630 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65  n the column</re
12640 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
12650 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 62  rnal override ob
12660 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 53 51  ject GetValue(SQ
12670 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
12680 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
12690 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
126a0 20 69 6e 74 20 69 6e 64 65 78 2c 20 53 51 4c 69   int index, SQLi
126b0 74 65 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20  teType typ)..   
126c0 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 49 73   {..      if (Is
126d0 4e 75 6c 6c 28 73 74 6d 74 2c 20 69 6e 64 65 78  Null(stmt, index
126e0 29 29 20 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c  )) return DBNull
126f0 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 54  .Value;..      T
12700 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66 20  ypeAffinity aff 
12710 3d 20 74 79 70 2e 41 66 66 69 6e 69 74 79 3b 0d  = typ.Affinity;.
12720 0a 20 20 20 20 20 20 54 79 70 65 20 74 20 3d 20  .      Type t = 
12730 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  null;....      i
12740 66 20 28 74 79 70 2e 54 79 70 65 20 21 3d 20 44  f (typ.Type != D
12750 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20  bType.Object).. 
12760 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12770 74 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72  t = SQLiteConver
12780 74 2e 53 51 4c 69 74 65 54 79 70 65 54 6f 54 79  t.SQLiteTypeToTy
12790 70 65 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20  pe(typ);..      
127a0 20 20 61 66 66 20 3d 20 54 79 70 65 54 6f 41 66    aff = TypeToAf
127b0 66 69 6e 69 74 79 28 74 29 3b 0d 0a 20 20 20 20  finity(t);..    
127c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if 
127d0 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
127e0 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
127f0 47 65 74 41 6c 6c 41 73 54 65 78 74 29 20 3d 3d  GetAllAsText) ==
12800 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
12810 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73 54  nFlags.GetAllAsT
12820 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ext)..          
12830 72 65 74 75 72 6e 20 47 65 74 54 65 78 74 28 73  return GetText(s
12840 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a  tmt, index);....
12850 20 20 20 20 20 20 73 77 69 74 63 68 20 28 61 66        switch (af
12860 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  f)..      {..   
12870 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
12880 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20  finity.Blob:..  
12890 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 2e          if (typ.
128a0 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47  Type == DbType.G
128b0 75 69 64 20 26 26 20 74 79 70 2e 41 66 66 69 6e  uid && typ.Affin
128c0 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e  ity == TypeAffin
128d0 69 74 79 2e 54 65 78 74 29 0d 0a 20 20 20 20 20  ity.Text)..     
128e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
128f0 77 20 47 75 69 64 28 47 65 74 54 65 78 74 28 73  w Guid(GetText(s
12900 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 0d  tmt, index));...
12910 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e  .          int n
12920 20 3d 20 28 69 6e 74 29 47 65 74 42 79 74 65 73   = (int)GetBytes
12930 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c  (stmt, index, 0,
12940 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20   null, 0, 0);.. 
12950 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
12960 62 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e 5d 3b  b = new byte[n];
12970 0d 0a 20 20 20 20 20 20 20 20 20 20 47 65 74 42  ..          GetB
12980 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78  ytes(stmt, index
12990 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d 0a  , 0, b, 0, n);..
129a0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
129b0 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79  typ.Type == DbTy
129c0 70 65 2e 47 75 69 64 20 26 26 20 6e 20 3d 3d 20  pe.Guid && n == 
129d0 31 36 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  16)..           
129e0 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64   return new Guid
129f0 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  (b);....        
12a00 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a 20 20 20    return b;..   
12a10 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
12a20 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65 3a  finity.DateTime:
12a30 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
12a40 72 6e 20 47 65 74 44 61 74 65 54 69 6d 65 28 73  rn GetDateTime(s
12a50 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
12a60 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
12a70 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d  ffinity.Double:.
12a80 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
12a90 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
12aa0 20 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c   GetDouble(stmt,
12ab0 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
12ac0 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65      return Conve
12ad0 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65  rt.ChangeType(Ge
12ae0 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e  tDouble(stmt, in
12af0 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d  dex), t, null);.
12b00 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
12b10 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
12b20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  :..          if 
12b30 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75  (t == null) retu
12b40 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74 6d 74  rn GetInt64(stmt
12b50 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
12b60 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
12b70 70 65 6f 66 28 53 42 79 74 65 29 29 20 72 65 74  peof(SByte)) ret
12b80 75 72 6e 20 47 65 74 53 42 79 74 65 28 73 74 6d  urn GetSByte(stm
12b90 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
12ba0 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
12bb0 79 70 65 6f 66 28 42 79 74 65 29 29 20 72 65 74  ypeof(Byte)) ret
12bc0 75 72 6e 20 47 65 74 42 79 74 65 28 73 74 6d 74  urn GetByte(stmt
12bd0 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
12be0 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
12bf0 70 65 6f 66 28 49 6e 74 31 36 29 29 20 72 65 74  peof(Int16)) ret
12c00 75 72 6e 20 47 65 74 49 6e 74 31 36 28 73 74 6d  urn GetInt16(stm
12c10 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
12c20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
12c30 79 70 65 6f 66 28 55 49 6e 74 31 36 29 29 20 72  ypeof(UInt16)) r
12c40 65 74 75 72 6e 20 47 65 74 55 49 6e 74 31 36 28  eturn GetUInt16(
12c50 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
12c60 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
12c70 3d 20 74 79 70 65 6f 66 28 49 6e 74 33 32 29 29  = typeof(Int32))
12c80 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 33 32   return GetInt32
12c90 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
12ca0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
12cb0 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 33 32  == typeof(UInt32
12cc0 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e  )) return GetUIn
12cd0 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
12ce0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
12cf0 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e  (t == typeof(UIn
12d00 74 36 34 29 29 20 72 65 74 75 72 6e 20 47 65 74  t64)) return Get
12d10 55 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  UInt64(stmt, ind
12d20 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
12d30 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43  return Convert.C
12d40 68 61 6e 67 65 54 79 70 65 28 47 65 74 49 6e 74  hangeType(GetInt
12d50 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  64(stmt, index),
12d60 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20   t, null);..    
12d70 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20      default:..  
12d80 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
12d90 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64  etText(stmt, ind
12da0 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ex);..      }.. 
12db0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
12dc0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
12dd0 74 20 47 65 74 43 75 72 73 6f 72 46 6f 72 54 61  t GetCursorForTa
12de0 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
12df0 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 64 62  ent stmt, int db
12e00 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67 65 29 0d  , int rootPage).
12e10 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
12e20 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
12e30 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
12e40 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12e50 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 75 72  qlite3_table_cur
12e60 73 6f 72 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  sor_interop(stmt
12e70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 64  ._sqlite_stmt, d
12e80 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a 23  b, rootPage);..#
12e90 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
12ea0 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a  rn -1;..#endif..
12eb0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
12ec0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
12ed0 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 6f 72 43  ong GetRowIdForC
12ee0 75 72 73 6f 72 28 53 51 4c 69 74 65 53 74 61 74  ursor(SQLiteStat
12ef0 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
12f00 63 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a  cursor)..    {..
12f10 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
12f20 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67  DARD..      long
12f30 20 72 6f 77 69 64 3b 0d 0a 20 20 20 20 20 20 53   rowid;..      S
12f40 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
12f50 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
12f60 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
12f70 63 75 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74  cursor_rowid_int
12f80 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
12f90 65 5f 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20  e_stmt, cursor, 
12fa0 6f 75 74 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20  out rowid);..   
12fb0 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c     if (rc == SQL
12fc0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
12fd0 20 72 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a   return rowid;..
12fe0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30  ..      return 0
12ff0 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
13000 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69  return 0;..#endi
13010 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
13020 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
13030 65 20 76 6f 69 64 20 47 65 74 49 6e 64 65 78 43  e void GetIndexC
13040 6f 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66  olumnExtendedInf
13050 6f 28 73 74 72 69 6e 67 20 64 61 74 61 62 61 73  o(string databas
13060 65 2c 20 73 74 72 69 6e 67 20 69 6e 64 65 78 2c  e, string index,
13070 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20   string column, 
13080 6f 75 74 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65  out int sortMode
13090 2c 20 6f 75 74 20 69 6e 74 20 6f 6e 45 72 72 6f  , out int onErro
130a0 72 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f  r, out string co
130b0 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 29  llationSequence)
130c0 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
130d0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
130e0 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c       IntPtr coll
130f0 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 6f 6c  ;..      int col
13100 6c 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 53 51 4c  llen;..      SQL
13110 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 3b  iteErrorCode rc;
13120 0d 0a 0d 0a 20 20 20 20 20 20 72 63 20 3d 20 55  ....      rc = U
13130 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
13140 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ds.sqlite3_index
13150 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74  _column_info_int
13160 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46  erop(_sql, ToUTF
13170 38 28 64 61 74 61 62 61 73 65 29 2c 20 54 6f 55  8(database), ToU
13180 54 46 38 28 69 6e 64 65 78 29 2c 20 54 6f 55 54  TF8(index), ToUT
13190 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20  F8(column), out 
131a0 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74 20 6f 6e  sortMode, out on
131b0 45 72 72 6f 72 2c 20 6f 75 74 20 63 6f 6c 6c 2c  Error, out coll,
131c0 20 6f 75 74 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a   out colllen);..
131d0 20 20 20 20 20 20 69 66 20 28 72 63 20 21 3d 20        if (rc != 
131e0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
131f0 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
13200 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63  LiteException(rc
13210 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20  , null);....    
13220 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65    collationSeque
13230 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  nce = UTF8ToStri
13240 6e 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e  ng(coll, colllen
13250 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
13260 20 73 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a   sortMode = 0;..
13270 20 20 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20        onError = 
13280 32 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74  2;..      collat
13290 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 22 42  ionSequence = "B
132a0 49 4e 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d  INARY";..#endif.
132b0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
132c0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
132d0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
132e0 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72 69  FileControl(stri
132f0 6e 67 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74 20  ng zDbName, int 
13300 6f 70 2c 20 49 6e 74 50 74 72 20 70 41 72 67 29  op, IntPtr pArg)
13310 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
13320 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
13330 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
13340 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 5f  3_file_control(_
13350 73 71 6c 2c 20 28 7a 44 62 4e 61 6d 65 20 21 3d  sql, (zDbName !=
13360 20 6e 75 6c 6c 29 20 3f 20 54 6f 55 54 46 38 28   null) ? ToUTF8(
13370 7a 44 62 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c 2c  zDbName) : null,
13380 20 6f 70 2c 20 70 41 72 67 29 3b 0d 0a 20 20 20   op, pArg);..   
13390 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a               }..  }..}..