System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact a11025f622f4de87a7b3b355a41febeef061b798:


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 39 30 2e 30  sion = "1.0.90.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 4c 69 73 74 3c 53 51 4c 69 74 65 46 75 6e  d List<SQLiteFun
0b00: 63 74 69 6f 6e 3e 20 5f 66 75 6e 63 74 69 6f 6e  ction> _function
0b10: 73 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f  s;....#if INTERO
0b20: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
0b30: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0b40: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
0b50: 6d 6f 64 75 6c 65 73 20 63 72 65 61 74 65 64 20  modules created 
0b60: 75 73 69 6e 67 20 74 68 69 73 20 63 6f 6e 6e 65  using this conne
0b70: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
0b80: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0b90: 70 72 6f 74 65 63 74 65 64 20 44 69 63 74 69 6f  protected Dictio
0ba0: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c  nary<string, SQL
0bb0: 69 74 65 4d 6f 64 75 6c 65 3e 20 5f 6d 6f 64 75  iteModule> _modu
0bc0: 6c 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  les;..#endif....
0bd0: 20 20 20 20 2f 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 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
0c40: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0c50: 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 74 68 65  / Constructs the
0c60: 20 6f 62 6a 65 63 74 20 75 73 65 64 20 74 6f 20   object used to 
0c70: 69 6e 74 65 72 61 63 74 20 77 69 74 68 20 74 68  interact with th
0c80: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
0c90: 62 72 61 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 75  brary..    /// u
0ca0: 73 69 6e 67 20 74 68 65 20 55 54 46 2d 38 20 74  sing the UTF-8 t
0cb0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 0d 0a 20  ext encoding... 
0cc0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0cd0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0ce0: 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e 0d 0a 20  m name="fmt">.. 
0cf0: 20 20 20 2f 2f 2f 20 54 68 65 20 44 61 74 65 54     /// The DateT
0d00: 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20 62 65  ime format to be
0d10: 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6e 76 65   used when conve
0d20: 72 74 69 6e 67 20 73 74 72 69 6e 67 20 76 61 6c  rting string val
0d30: 75 65 73 20 74 6f 20 61 0d 0a 20 20 20 20 2f 2f  ues to a..    //
0d40: 2f 20 44 61 74 65 54 69 6d 65 20 61 6e 64 20 62  / DateTime and b
0d50: 69 6e 64 69 6e 67 20 44 61 74 65 54 69 6d 65 20  inding DateTime 
0d60: 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20 20  parameters...   
0d70: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
0d80: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0d90: 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20 20 20 20  me="kind">..    
0da0: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
0db0: 66 3d 22 44 61 74 65 54 69 6d 65 4b 69 6e 64 22  f="DateTimeKind"
0dc0: 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64 20 77   /> to be used w
0dd0: 68 65 6e 20 63 72 65 61 74 69 6e 67 20 44 61 74  hen creating Dat
0de0: 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76  eTime..    /// v
0df0: 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alues...    /// 
0e00: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0e10: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
0e20: 6d 74 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20 20  mtString">..    
0e30: 2f 2f 2f 20 54 68 65 20 66 6f 72 6d 61 74 20 73  /// The format s
0e40: 74 72 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64  tring to be used
0e50: 20 77 68 65 6e 20 70 61 72 73 69 6e 67 20 61 6e   when parsing an
0e60: 64 20 66 6f 72 6d 61 74 74 69 6e 67 20 44 61 74  d formatting Dat
0e70: 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76  eTime..    /// v
0e80: 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alues...    /// 
0e90: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0ea0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
0eb0: 62 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  b">..    /// The
0ec0: 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 74   native handle t
0ed0: 6f 20 62 65 20 61 73 73 6f 63 69 61 74 65 64 20  o be associated 
0ee0: 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73  with the databas
0ef0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
0f00: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
0f10: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
0f20: 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e  name="fileName">
0f30: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 75  ..    /// The fu
0f40: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69  lly qualified fi
0f50: 6c 65 20 6e 61 6d 65 20 61 73 73 6f 63 69 61 74  le name associat
0f60: 65 64 20 77 69 74 68 20 3c 70 61 72 61 6d 72 65  ed with <paramre
0f70: 66 20 6e 61 6d 65 3d 22 64 62 20 22 2f 3e 2e 0d  f name="db "/>..
0f80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
0f90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0fa0: 6d 20 6e 61 6d 65 3d 22 6f 77 6e 48 61 6e 64 6c  m name="ownHandl
0fb0: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  e">..    /// Non
0fc0: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 65 77  -zero if the new
0fd0: 6c 79 20 63 72 65 61 74 65 64 20 6f 62 6a 65 63  ly created objec
0fe0: 74 20 69 6e 73 74 61 6e 63 65 20 77 69 6c 6c 20  t instance will 
0ff0: 6e 65 65 64 20 74 6f 20 64 69 73 70 6f 73 65 0d  need to dispose.
1000: 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 3c 70 61 72  .    /// of <par
1010: 61 6d 72 65 66 20 6e 61 6d 65 3d 22 64 62 22 20  amref name="db" 
1020: 2f 3e 20 77 68 65 6e 20 69 74 20 69 73 20 6e 6f  /> when it is no
1030: 20 6c 6f 6e 67 65 72 20 6e 65 65 64 65 64 2e 0d   longer needed..
1040: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
1050: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
1060: 53 51 4c 69 74 65 33 28 0d 0a 20 20 20 20 20 20  SQLite3(..      
1070: 20 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d    SQLiteDateForm
1080: 61 74 73 20 66 6d 74 2c 0d 0a 20 20 20 20 20 20  ats fmt,..      
1090: 20 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 6b    DateTimeKind k
10a0: 69 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ind,..        st
10b0: 72 69 6e 67 20 66 6d 74 53 74 72 69 6e 67 2c 0d  ring fmtString,.
10c0: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
10d0: 64 62 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  db,..        str
10e0: 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  ing fileName,.. 
10f0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f 77 6e 48         bool ownH
1100: 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 29  andle..        )
1110: 0d 0a 20 20 20 20 20 20 3a 20 62 61 73 65 28 66  ..      : base(f
1120: 6d 74 2c 20 6b 69 6e 64 2c 20 66 6d 74 53 74 72  mt, kind, fmtStr
1130: 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ing)..    {..   
1140: 20 20 20 20 20 69 66 20 28 64 62 20 21 3d 20 49       if (db != I
1150: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
1160: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1170: 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53      _sql = new S
1180: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
1190: 61 6e 64 6c 65 28 64 62 2c 20 6f 77 6e 48 61 6e  andle(db, ownHan
11a0: 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dle);..         
11b0: 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 66     _fileName = f
11c0: 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
11d0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
11e0: 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67  nnection.OnChang
11f0: 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e  ed(null, new Con
1200: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73  nectionEventArgs
1210: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1220: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
1230: 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77  ionEventType.New
1240: 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20  CriticalHandle, 
1250: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20  null, null,..   
1260: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
1270: 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 66  l, null, _sql, f
1280: 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a  ileName, new obj
1290: 65 63 74 5b 5d 20 7b 20 66 6d 74 2c 20 6b 69 6e  ect[] { fmt, kin
12a0: 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
12b0: 20 20 20 20 66 6d 74 53 74 72 69 6e 67 2c 20 64      fmtString, d
12c0: 62 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 6f 77 6e  b, fileName, own
12d0: 48 61 6e 64 6c 65 20 7d 29 29 3b 0d 0a 20 20 20  Handle }));..   
12e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
12f0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1350: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
1360: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
1370: 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72  "Pattern" Member
1380: 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  s..    private b
1390: 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20  ool disposed;.. 
13a0: 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20     private void 
13b0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20  CheckDisposed() 
13c0: 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
13d0: 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e   {..#if THROW_ON
13e0: 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20  _DISPOSED..     
13f0: 20 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29     if (disposed)
1400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
1410: 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69  row new ObjectDi
1420: 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28  sposedException(
1430: 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2e  typeof(SQLite3).
1440: 4e 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  Name);..#endif..
1450: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
1460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 2f 2f  ////////////////
14a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
14c0: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76      protected ov
14d0: 65 72 72 69 64 65 20 76 6f 69 64 20 44 69 73 70  erride void Disp
14e0: 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69  ose(bool disposi
14f0: 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ng)..    {..    
1500: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
1510: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1520: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
1530: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1550: 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d  /if (disposing).
1560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1570: 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20   //{..          
1580: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f        //    ////
1590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15c0: 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f    //    // dispo
15d0: 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75  se managed resou
15e0: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
15f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1600: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1620: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
1630: 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d            //}...
1640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1650: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
1680: 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65           // rele
1690: 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65  ase unmanaged re
16a0: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
16b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
16d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49  ///////....#if I
16f0: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
1700: 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 20 20  ABLE..          
1710: 20 20 20 20 20 20 44 69 73 70 6f 73 65 4d 6f 64        DisposeMod
1720: 75 6c 65 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  ules();..#endif.
1730: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1740: 20 20 20 43 6c 6f 73 65 28 66 61 6c 73 65 29 3b     Close(false);
1750: 20 2f 2a 20 44 69 73 70 6f 73 69 6e 67 2c 20 63   /* Disposing, c
1760: 61 6e 6e 6f 74 20 74 68 72 6f 77 2e 20 2a 2f 0d  annot throw. */.
1770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1780: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1790: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
17a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17b0: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
17c0: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20  disposing);.... 
17d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
17e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
17f0: 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73  TE: Everything s
1800: 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64  hould be fully d
1810: 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73 20  isposed at this 
1820: 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  point...        
1830: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1840: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
1850: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1860: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
1870: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
1880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
18e0: 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52  .#if INTEROP_VIR
18f0: 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20  TUAL_TABLE..    
1900: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1910: 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
1920: 6f 64 20 61 74 74 65 6d 70 74 73 20 74 6f 20 64  od attempts to d
1930: 69 73 70 6f 73 65 20 6f 66 20 61 6c 6c 20 74 68  ispose of all th
1940: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
1950: 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 64 65  iteModule" /> de
1960: 72 69 76 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6f  rived..    /// o
1970: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 20  bject instances 
1980: 63 75 72 72 65 6e 74 6c 79 20 61 73 73 6f 63 69  currently associ
1990: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 61  ated with the na
19a0: 74 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f  tive database co
19b0: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
19c0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
19d0: 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20     private void 
19e0: 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 73 28 29  DisposeModules()
19f0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
1a00: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
1a10: 4e 4f 54 45 3a 20 49 66 20 61 6e 79 20 6d 6f 64  NOTE: If any mod
1a20: 75 6c 65 73 20 77 65 72 65 20 63 72 65 61 74 65  ules were create
1a30: 64 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 64 69  d, attempt to di
1a40: 73 70 6f 73 65 20 6f 66 0d 0a 20 20 20 20 20 20  spose of..      
1a50: 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 6d 20    //       them 
1a60: 6e 6f 77 2e 20 20 54 68 69 73 20 63 6f 64 65 20  now.  This code 
1a70: 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 61  is designed to a
1a80: 76 6f 69 64 20 74 68 72 6f 77 69 6e 67 0d 0a 20  void throwing.. 
1a90: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1aa0: 65 78 63 65 70 74 69 6f 6e 73 20 75 6e 6c 65 73  exceptions unles
1ab0: 73 20 74 68 65 20 44 69 73 70 6f 73 65 20 6d 65  s the Dispose me
1ac0: 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
1ad0: 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  le..        //  
1ae0: 20 20 20 20 20 69 74 73 65 6c 66 20 74 68 72 6f       itself thro
1af0: 77 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 2e  ws an exception.
1b00: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
1b10: 20 20 20 20 20 20 69 66 20 28 5f 6d 6f 64 75 6c        if (_modul
1b20: 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es != null)..   
1b30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b40: 20 20 20 20 66 6f 72 65 61 63 68 20 28 4b 65 79      foreach (Key
1b50: 56 61 6c 75 65 50 61 69 72 3c 73 74 72 69 6e 67  ValuePair<string
1b60: 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 20  , SQLiteModule> 
1b70: 70 61 69 72 20 69 6e 20 5f 6d 6f 64 75 6c 65 73  pair in _modules
1b80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ba0: 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d    SQLiteModule m
1bb0: 6f 64 75 6c 65 20 3d 20 70 61 69 72 2e 56 61 6c  odule = pair.Val
1bc0: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
1bd0: 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
1be0: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c00: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
1c20: 75 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a  ule.Dispose();..
1c30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f  .            _mo
1c50: 64 75 6c 65 73 2e 43 6c 65 61 72 28 29 3b 0d 0a  dules.Clear();..
1c60: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
1c70: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
1c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1ce0: 0a 0d 0a 20 20 20 20 2f 2f 20 49 74 20 69 73 6e  ...    // It isn
1cf0: 27 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20  't necessary to 
1d00: 63 6c 65 61 6e 75 70 20 61 6e 79 20 66 75 6e 63  cleanup any func
1d10: 74 69 6f 6e 73 20 77 65 27 76 65 20 72 65 67 69  tions we've regi
1d20: 73 74 65 72 65 64 2e 20 20 49 66 20 74 68 65 20  stered.  If the 
1d30: 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20  connection..    
1d40: 2f 2f 20 67 6f 65 73 20 74 6f 20 74 68 65 20 70  // goes to the p
1d50: 6f 6f 6c 20 61 6e 64 20 69 73 20 72 65 73 75 72  ool and is resur
1d60: 72 65 63 74 65 64 20 6c 61 74 65 72 2c 20 72 65  rected later, re
1d70: 2d 72 65 67 69 73 74 65 72 65 64 20 66 75 6e 63  -registered func
1d80: 74 69 6f 6e 73 20 77 69 6c 6c 20 6f 76 65 72 77  tions will overw
1d90: 72 69 74 65 20 74 68 65 0d 0a 20 20 20 20 2f 2f  rite the..    //
1da0: 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69   previous functi
1db0: 6f 6e 73 2e 20 20 54 68 65 20 53 51 4c 69 74 65  ons.  The SQLite
1dc0: 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69 65 48 61  FunctionCookieHa
1dd0: 6e 64 6c 65 20 77 69 6c 6c 20 74 61 6b 65 20 63  ndle will take c
1de0: 61 72 65 20 6f 66 20 66 72 65 65 69 6e 67 20 75  are of freeing u
1df0: 6e 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 2f 2f  nmanaged..    //
1e00: 20 72 65 73 6f 75 72 63 65 73 20 62 65 6c 6f 6e   resources belon
1e10: 67 69 6e 67 20 74 6f 20 74 68 65 20 70 72 65 76  ging to the prev
1e20: 69 6f 75 73 6c 79 2d 72 65 67 69 73 74 65 72 65  iously-registere
1e30: 64 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20  d functions...  
1e40: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
1e50: 69 64 65 20 76 6f 69 64 20 43 6c 6f 73 65 28 62  ide void Close(b
1e60: 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20  ool canThrow).. 
1e70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
1e80: 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql != null).. 
1e90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ea0: 20 20 69 66 20 28 21 5f 73 71 6c 2e 4f 77 6e 48    if (!_sql.OwnH
1eb0: 61 6e 64 6c 65 29 0d 0a 20 20 20 20 20 20 20 20  andle)..        
1ec0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1ed0: 20 20 20 5f 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d     _sql = null;.
1ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
1ef0: 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20  eturn;..        
1f00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f10: 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a   if (_usePool)..
1f20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f30: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
1f40: 51 4c 69 74 65 42 61 73 65 2e 52 65 73 65 74 43  QLiteBase.ResetC
1f50: 6f 6e 6e 65 63 74 69 6f 6e 28 5f 73 71 6c 2c 20  onnection(_sql, 
1f60: 5f 73 71 6c 2c 20 63 61 6e 54 68 72 6f 77 29 29  _sql, canThrow))
1f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f80: 7b 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56  {..#if INTEROP_V
1f90: 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20  IRTUAL_TABLE..  
1fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb0: 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 73 28 29  DisposeModules()
1fc0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
1fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1fe0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50  QLiteConnectionP
1ff0: 6f 6f 6c 2e 41 64 64 28 5f 66 69 6c 65 4e 61 6d  ool.Add(_fileNam
2000: 65 2c 20 5f 73 71 6c 2c 20 5f 70 6f 6f 6c 56 65  e, _sql, _poolVe
2010: 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 23 69 66 20 21  rsion);....#if !
2020: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
2030: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
2040: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
2050: 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
2060: 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72  eLine(String.For
2070: 6d 61 74 28 22 43 6c 6f 73 65 20 28 50 6f 6f 6c  mat("Close (Pool
2080: 29 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c  ) Success: {0}",
2090: 20 5f 73 71 6c 29 29 3b 0d 0a 23 65 6e 64 69 66   _sql));..#endif
20a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20b0: 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  }..#if !NET_COMP
20c0: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
20d0: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
20e0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
20f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2110: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
2120: 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ne(String.Format
2130: 28 22 43 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 46  ("Close (Pool) F
2140: 61 69 6c 75 72 65 3a 20 7b 30 7d 22 2c 20 5f 73  ailure: {0}", _s
2150: 71 6c 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ql));..         
2160: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
2170: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2180: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
2190: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21a0: 20 20 20 20 20 20 20 20 5f 73 71 6c 2e 44 69 73          _sql.Dis
21b0: 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  pose();..       
21c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
21d0: 5f 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  _sql = null;..  
21e0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
21f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2250: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
2260: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2270: 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 69 6e  / Attempts to in
2280: 74 65 72 72 75 70 74 20 74 68 65 20 71 75 65 72  terrupt the quer
2290: 79 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63  y currently exec
22a0: 75 74 69 6e 67 20 6f 6e 20 74 68 65 20 61 73 73  uting on the ass
22b0: 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f  ociated..    ///
22c0: 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73 65   native database
22d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
22e0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
22f0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
2300: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 61 6e  verride void Can
2310: 63 65 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  cel()..    {..  
2320: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
2330: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2340: 69 6e 74 65 72 72 75 70 74 28 5f 73 71 6c 29 3b  interrupt(_sql);
2350: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
2360: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2370: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
2380: 69 6f 6e 20 62 69 6e 64 73 20 61 20 75 73 65 72  ion binds a user
2390: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
23a0: 6e 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74  n to the connect
23b0: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
23c0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
23d0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
23e0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
23f0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
2400: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
2410: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
2420: 74 65 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  te"/> object ins
2430: 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67  tance containing
2440: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65  ..    /// the me
2450: 74 61 64 61 74 61 20 66 6f 72 20 74 68 65 20 66  tadata for the f
2460: 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f  unction to be bo
2470: 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  und...    /// </
2480: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
2490: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e  <param name="fun
24a0: 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f  ction">..    ///
24b0: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
24c0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22 2f  SQLiteFunction"/
24d0: 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
24e0: 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  e that implement
24f0: 73 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 66  s the..    /// f
2500: 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f  unction to be bo
2510: 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  und...    /// </
2520: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
2530: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61  <param name="fla
2540: 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  gs">..    /// Th
2550: 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74  e flags associat
2560: 65 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65  ed with the pare
2570: 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  nt connection ob
2580: 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
2590: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
25a0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
25b0: 6f 69 64 20 42 69 6e 64 46 75 6e 63 74 69 6f 6e  oid BindFunction
25c0: 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
25d0: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
25e0: 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  te functionAttri
25f0: 62 75 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 53  bute,..        S
2600: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75  QLiteFunction fu
2610: 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  nction,..       
2620: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
2630: 6e 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a 20 20  nFlags flags..  
2640: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
2650: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
2660: 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74  nction.BindFunct
2670: 69 6f 6e 28 74 68 69 73 2c 20 66 75 6e 63 74 69  ion(this, functi
2680: 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 66 75 6e  onAttribute, fun
2690: 63 74 69 6f 6e 2c 20 66 6c 61 67 73 29 3b 0d 0a  ction, flags);..
26a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 66  ..        if (_f
26b0: 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  unctions == null
26c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  )..            _
26d0: 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77 20  functions = new 
26e0: 4c 69 73 74 3c 53 51 4c 69 74 65 46 75 6e 63 74  List<SQLiteFunct
26f0: 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ion>();....     
2700: 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 2e 41 64     _functions.Ad
2710: 64 28 66 75 6e 63 74 69 6f 6e 29 3b 0d 0a 20 20  d(function);..  
2720: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
2730: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
2740: 69 6e 67 20 56 65 72 73 69 6f 6e 0d 0a 20 20 20  ing Version..   
2750: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
2760: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2770: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 33 2e 53  return SQLite3.S
2780: 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d 0a 20  QLiteVersion;.. 
2790: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
27a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
27b0: 65 72 72 69 64 65 20 69 6e 74 20 56 65 72 73 69  erride int Versi
27c0: 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d  onNumber..    {.
27d0: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
27e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
27f0: 75 72 6e 20 53 51 4c 69 74 65 33 2e 53 51 4c 69  urn SQLite3.SQLi
2800: 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b  teVersionNumber;
2810: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2820: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2830: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
2840: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a  efineConstants..
2850: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
2860: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
2870: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
2880: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
2890: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
28a0: 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  der();..        
28b0: 20 20 20 20 49 4c 69 73 74 3c 73 74 72 69 6e 67      IList<string
28c0: 3e 20 6c 69 73 74 20 3d 20 53 51 4c 69 74 65 44  > list = SQLiteD
28d0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 2e 4f  efineConstants.O
28e0: 70 74 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20  ptionList;....  
28f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 69            if (li
2900: 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st != null)..   
2910: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2920: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
2930: 61 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d  ach (string elem
2940: 65 6e 74 20 69 6e 20 6c 69 73 74 29 0d 0a 20 20  ent in list)..  
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2970: 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74       if (element
2980: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a0: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
29b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c0: 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c      if (result.L
29d0: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
2a00: 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  d(' ');....     
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a20: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 65 6c 65  esult.Append(ele
2a30: 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  ment);..        
2a40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2a50: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2a60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
2a70: 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29  esult.ToString()
2a80: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
2a90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
2aa0: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
2ab0: 67 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d  g SQLiteVersion.
2ac0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
2ad0: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2ae0: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
2af0: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
2b00: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
2b10: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29  te3_libversion()
2b20: 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  , -1);..      }.
2b30: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
2b40: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 69 6e  ternal static in
2b50: 74 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e  t SQLiteVersionN
2b60: 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  umber..    {..  
2b70: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
2b80: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2b90: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2ba0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62  hods.sqlite3_lib
2bb0: 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29  version_number()
2bc0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
2bd0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
2be0: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  l static string 
2bf0: 53 51 4c 69 74 65 53 6f 75 72 63 65 49 64 0d 0a  SQLiteSourceId..
2c00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
2c10: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
2c20: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
2c30: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
2c40: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2c50: 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d  e3_sourceid(), -
2c60: 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  1);..      }..  
2c70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
2c80: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
2c90: 67 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f 6e  g InteropVersion
2ca0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
2cb0: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
2cc0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
2cd0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
2ce0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
2cf0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
2d00: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2d10: 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 69 6e  e3_libversion_in
2d20: 74 65 72 6f 70 28 29 2c 20 2d 31 29 3b 0d 0a 23  terop(), -1);..#
2d30: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2d40: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
2d50: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
2d60: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
2d70: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
2d80: 73 74 72 69 6e 67 20 49 6e 74 65 72 6f 70 53 6f  string InteropSo
2d90: 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a 20  urceId..    {.. 
2da0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
2db0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
2dc0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
2dd0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2de0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
2df0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2e00: 2e 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69  .sqlite3_sourcei
2e10: 64 5f 69 6e 74 65 72 6f 70 28 29 2c 20 2d 31 29  d_interop(), -1)
2e20: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
2e30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
2e40: 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  l;..#endif..    
2e50: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
2e60: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
2e70: 72 72 69 64 65 20 62 6f 6f 6c 20 41 75 74 6f 43  rride bool AutoC
2e80: 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d 0a 20 20  ommit..    {..  
2e90: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
2ea0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2eb0: 20 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28 5f 73   IsAutocommit(_s
2ec0: 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ql, _sql);..    
2ed0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
2ee0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
2ef0: 69 64 65 20 6c 6f 6e 67 20 4c 61 73 74 49 6e 73  ide long LastIns
2f00: 65 72 74 52 6f 77 49 64 0d 0a 20 20 20 20 7b 0d  ertRowId..    {.
2f10: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
2f20: 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
2f30: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
2f40: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ORK..        ret
2f50: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
2f60: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2f70: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
2f80: 64 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 69 66 20  d(_sql);..#elif 
2f90: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
2fa0: 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 72  ..        long r
2fb0: 6f 77 49 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  owId = 0;..     
2fc0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
2fd0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c  ethods.sqlite3_l
2fe0: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
2ff0: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 72  _interop(_sql, r
3000: 65 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20  ef rowId);..    
3010: 20 20 20 20 72 65 74 75 72 6e 20 72 6f 77 49 64      return rowId
3020: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
3030: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
3040: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
3050: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
3060: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
3070: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
3080: 76 65 72 72 69 64 65 20 69 6e 74 20 43 68 61 6e  verride int Chan
3090: 67 65 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ges..    {..    
30a0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
30b0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
30c0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 72 65  DARD..        re
30d0: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
30e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
30f0: 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70  _changes_interop
3100: 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a  (_sql);..#else..
3110: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
3120: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
3130: 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  ds.sqlite3_chang
3140: 65 73 28 5f 73 71 6c 29 3b 0d 0a 23 65 6e 64 69  es(_sql);..#endi
3150: 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  f..      }..    
3160: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
3170: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
3180: 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20 20  MemoryUsed..    
3190: 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a  {..        get..
31a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
31c0: 61 74 69 63 4d 65 6d 6f 72 79 55 73 65 64 3b 0d  aticMemoryUsed;.
31d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
31e0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
31f0: 6c 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 53 74  l static long St
3200: 61 74 69 63 4d 65 6d 6f 72 79 55 73 65 64 0d 0a  aticMemoryUsed..
3210: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
3220: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  et..        {..#
3230: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
3240: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
3250: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3260: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
3270: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65  thods.sqlite3_me
3280: 6d 6f 72 79 5f 75 73 65 64 28 29 3b 0d 0a 23 65  mory_used();..#e
3290: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
32a0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
32b0: 20 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20 30    long bytes = 0
32c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  ;..            U
32d0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
32e0: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  ds.sqlite3_memor
32f0: 79 5f 75 73 65 64 5f 69 6e 74 65 72 6f 70 28 72  y_used_interop(r
3300: 65 66 20 62 79 74 65 73 29 3b 0d 0a 20 20 20 20  ef bytes);..    
3310: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62          return b
3320: 79 74 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ytes;..#else..  
3330: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
3340: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
3350: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
3360: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
3370: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
3380: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
3390: 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 48 69 67  e long MemoryHig
33a0: 68 77 61 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20  hwater..    {.. 
33b0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
33c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33d0: 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63     return Static
33e0: 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72 3b  MemoryHighwater;
33f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
3400: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3410: 61 6c 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 53  al static long S
3420: 74 61 74 69 63 4d 65 6d 6f 72 79 48 69 67 68 77  taticMemoryHighw
3430: 61 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ater..    {..   
3440: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
3450: 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
3460: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
3470: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
3480: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
3490: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
34a0: 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77  te3_memory_highw
34b0: 61 74 65 72 28 30 29 3b 0d 0a 23 65 6c 69 66 20  ater(0);..#elif 
34c0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
34d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f  ..            lo
34e0: 6e 67 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20  ng bytes = 0;.. 
34f0: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
3500: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
3510: 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69  qlite3_memory_hi
3520: 67 68 77 61 74 65 72 5f 69 6e 74 65 72 6f 70 28  ghwater_interop(
3530: 30 2c 20 72 65 66 20 62 79 74 65 73 29 3b 0d 0a  0, ref bytes);..
3540: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3550: 72 6e 20 62 79 74 65 73 3b 0d 0a 23 65 6c 73 65  rn bytes;..#else
3560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
3570: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
3580: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
3590: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
35a0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
35b0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
35c0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
35d0: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  ns non-zero if t
35e0: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6e 61  he underlying na
35f0: 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tive connection 
3600: 68 61 6e 64 6c 65 20 69 73 20 6f 77 6e 65 64 0d  handle is owned.
3610: 0a 20 20 20 20 2f 2f 2f 20 62 79 20 74 68 69 73  .    /// by this
3620: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
3630: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
3640: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3650: 72 72 69 64 65 20 62 6f 6f 6c 20 4f 77 6e 48 61  rride bool OwnHa
3660: 6e 64 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ndle..    {..   
3670: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
3680: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3690: 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c   if (_sql == nul
36a0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
36b0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
36c0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6e  LiteException("n
36d0: 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  o connection han
36e0: 64 6c 65 20 61 76 61 69 6c 61 62 6c 65 22 29 3b  dle available");
36f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3700: 72 65 74 75 72 6e 20 5f 73 71 6c 2e 4f 77 6e 48  return _sql.OwnH
3710: 61 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  andle;..        
3720: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
3730: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
3740: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
3750: 65 20 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75  e SetMemoryStatu
3760: 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20  s(bool value).. 
3770: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
3780: 74 75 72 6e 20 53 74 61 74 69 63 53 65 74 4d 65  turn StaticSetMe
3790: 6d 6f 72 79 53 74 61 74 75 73 28 76 61 6c 75 65  moryStatus(value
37a0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
37b0: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
37c0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
37d0: 20 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79   StaticSetMemory
37e0: 53 74 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75  Status(bool valu
37f0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
3800: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
3810: 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
3820: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3830: 74 65 33 5f 63 6f 6e 66 69 67 5f 69 6e 74 28 0d  te3_config_int(.
3840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
3850: 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d  iteConfigOpsEnum
3860: 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d  .SQLITE_CONFIG_M
3870: 45 4d 53 54 41 54 55 53 2c 20 76 61 6c 75 65 20  EMSTATUS, value 
3880: 3f 20 31 20 3a 20 30 29 3b 0d 0a 0d 0a 20 20 20  ? 1 : 0);....   
3890: 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d       return rc;.
38a0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
38b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
38c0: 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f   /// Attempts to
38d0: 20 66 72 65 65 20 61 73 20 6d 75 63 68 20 68 65   free as much he
38e0: 61 70 20 6d 65 6d 6f 72 79 20 61 73 20 70 6f 73  ap memory as pos
38f0: 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 64 61  sible for the da
3900: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
3910: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
3920: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3930: 3c 72 65 74 75 72 6e 73 3e 41 20 73 74 61 6e 64  <returns>A stand
3940: 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
3950: 6e 20 63 6f 64 65 20 28 69 2e 65 2e 20 7a 65 72  n code (i.e. zer
3960: 6f 20 66 6f 72 20 73 75 63 63 65 73 73 20 61 6e  o for success an
3970: 64 20 6e 6f 6e 2d 7a 65 72 6f 20 66 6f 72 20 66  d non-zero for f
3980: 61 69 6c 75 72 65 29 2e 3c 2f 72 65 74 75 72 6e  ailure).</return
3990: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
39a0: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
39b0: 45 72 72 6f 72 43 6f 64 65 20 52 65 6c 65 61 73  ErrorCode Releas
39c0: 65 4d 65 6d 6f 72 79 28 29 0d 0a 20 20 20 20 7b  eMemory()..    {
39d0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
39e0: 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55  ErrorCode rc = U
39f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
3a00: 64 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f 72 65  ds.sqlite3_db_re
3a10: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 5f 73 71  lease_memory(_sq
3a20: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  l);..        ret
3a30: 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a  urn rc;..    }..
3a40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
3a50: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74  ry>..    /// Att
3a60: 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20 4e 20  empts to free N 
3a70: 62 79 74 65 73 20 6f 66 20 68 65 61 70 20 6d 65  bytes of heap me
3a80: 6d 6f 72 79 20 62 79 20 64 65 61 6c 6c 6f 63 61  mory by dealloca
3a90: 74 69 6e 67 20 6e 6f 6e 2d 65 73 73 65 6e 74 69  ting non-essenti
3aa0: 61 6c 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 2f  al memory..    /
3ab0: 2f 2f 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 68  // allocations h
3ac0: 65 6c 64 20 62 79 20 74 68 65 20 64 61 74 61 62  eld by the datab
3ad0: 61 73 65 20 6c 69 62 72 61 72 79 2e 20 4d 65 6d  ase library. Mem
3ae0: 6f 72 79 20 75 73 65 64 20 74 6f 20 63 61 63 68  ory used to cach
3af0: 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 73  e database pages
3b00: 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 69 6d 70  ..    /// to imp
3b10: 72 6f 76 65 20 70 65 72 66 6f 72 6d 61 6e 63 65  rove performance
3b20: 20 69 73 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f   is an example o
3b30: 66 20 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c 20  f non-essential 
3b40: 6d 65 6d 6f 72 79 2e 20 20 54 68 69 73 20 69 73  memory.  This is
3b50: 20 61 20 6e 6f 2d 6f 70 0d 0a 20 20 20 20 2f 2f   a no-op..    //
3b60: 2f 20 72 65 74 75 72 6e 69 6e 67 20 7a 65 72 6f  / returning zero
3b70: 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63   if the SQLite c
3b80: 6f 72 65 20 6c 69 62 72 61 72 79 20 77 61 73 20  ore library was 
3b90: 6e 6f 74 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  not compiled wit
3ba0: 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  h the compile-ti
3bb0: 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 6f 70 74 69  me..    /// opti
3bc0: 6f 6e 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  on SQLITE_ENABLE
3bd0: 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
3be0: 4e 54 2e 20 20 4f 70 74 69 6f 6e 61 6c 6c 79 2c  NT.  Optionally,
3bf0: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 72 65 73   attempts to res
3c00: 65 74 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 2f  et and/or..    /
3c10: 2f 2f 20 63 6f 6d 70 61 63 74 20 74 68 65 20 57  // compact the W
3c20: 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70  in32 native heap
3c30: 2c 20 69 66 20 61 70 70 6c 69 63 61 62 6c 65 2e  , if applicable.
3c40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
3c50: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
3c60: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 42 79 74 65  aram name="nByte
3c70: 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  s">..    /// The
3c80: 20 72 65 71 75 65 73 74 65 64 20 6e 75 6d 62 65   requested numbe
3c90: 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20 66 72  r of bytes to fr
3ca0: 65 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ee...    /// </p
3cb0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
3cc0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73 65  param name="rese
3cd0: 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  t">..    /// Non
3ce0: 2d 7a 65 72 6f 20 74 6f 20 61 74 74 65 6d 70 74  -zero to attempt
3cf0: 20 61 20 68 65 61 70 20 72 65 73 65 74 2e 0d 0a   a heap reset...
3d00: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
3d10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
3d20: 20 6e 61 6d 65 3d 22 63 6f 6d 70 61 63 74 22 3e   name="compact">
3d30: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
3d40: 72 6f 20 74 6f 20 61 74 74 65 6d 70 74 20 68 65  ro to attempt he
3d50: 61 70 20 63 6f 6d 70 61 63 74 69 6f 6e 2e 0d 0a  ap compaction...
3d60: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
3d70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
3d80: 20 6e 61 6d 65 3d 22 6e 46 72 65 65 22 3e 0d 0a   name="nFree">..
3d90: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
3da0: 65 72 20 6f 66 20 62 79 74 65 73 20 61 63 74 75  er of bytes actu
3db0: 61 6c 6c 79 20 66 72 65 65 64 2e 20 20 54 68 69  ally freed.  Thi
3dc0: 73 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 7a  s value may be z
3dd0: 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ero...    /// </
3de0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
3df0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73  <param name="res
3e00: 65 74 4f 6b 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  etOk">..    /// 
3e10: 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20  This value will 
3e20: 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  be non-zero if t
3e30: 68 65 20 68 65 61 70 20 72 65 73 65 74 20 77 61  he heap reset wa
3e40: 73 20 73 75 63 63 65 73 73 66 75 6c 2e 0d 0a 20  s successful... 
3e50: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
3e60: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
3e70: 6e 61 6d 65 3d 22 6e 4c 61 72 67 65 73 74 22 3e  name="nLargest">
3e80: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 69  ..    /// The si
3e90: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
3ea0: 74 20 63 6f 6d 6d 69 74 74 65 64 20 66 72 65 65  t committed free
3eb0: 20 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20 68 65   block in the he
3ec0: 61 70 2c 20 69 6e 20 62 79 74 65 73 2e 0d 0a 20  ap, in bytes... 
3ed0: 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75     /// This valu
3ee0: 65 20 77 69 6c 6c 20 62 65 20 7a 65 72 6f 20 75  e will be zero u
3ef0: 6e 6c 65 73 73 20 68 65 61 70 20 63 6f 6d 70 61  nless heap compa
3f00: 63 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64  ction is enabled
3f10: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
3f20: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
3f30: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
3f40: 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
3f50: 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 28 69  e return code (i
3f60: 2e 65 2e 20 7a 65 72 6f 20 66 6f 72 20 73 75 63  .e. zero for suc
3f70: 63 65 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  cess and non-zer
3f80: 6f 0d 0a 20 20 20 20 2f 2f 2f 20 66 6f 72 20 66  o..    /// for f
3f90: 61 69 6c 75 72 65 29 2e 0d 0a 20 20 20 20 2f 2f  ailure)...    //
3fa0: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
3fb0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
3fc0: 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
3fd0: 65 20 53 74 61 74 69 63 52 65 6c 65 61 73 65 4d  e StaticReleaseM
3fe0: 65 6d 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  emory(..        
3ff0: 69 6e 74 20 6e 42 79 74 65 73 2c 0d 0a 20 20 20  int nBytes,..   
4000: 20 20 20 20 20 62 6f 6f 6c 20 72 65 73 65 74 2c       bool reset,
4010: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63  ..        bool c
4020: 6f 6d 70 61 63 74 2c 0d 0a 20 20 20 20 20 20 20  ompact,..       
4030: 20 72 65 66 20 69 6e 74 20 6e 46 72 65 65 2c 0d   ref int nFree,.
4040: 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f  .        ref boo
4050: 6c 20 72 65 73 65 74 4f 6b 2c 0d 0a 20 20 20 20  l resetOk,..    
4060: 20 20 20 20 72 65 66 20 75 69 6e 74 20 6e 4c 61      ref uint nLa
4070: 72 67 65 73 74 0d 0a 20 20 20 20 20 20 20 20 29  rgest..        )
4080: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4090: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
40a0: 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f   rc = SQLiteErro
40b0: 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20  rCode.Ok;....   
40c0: 20 20 20 20 20 69 6e 74 20 6e 46 72 65 65 4c 6f       int nFreeLo
40d0: 63 61 6c 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  cal = UnsafeNati
40e0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
40f0: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
4100: 28 6e 42 79 74 65 73 29 3b 0d 0a 20 20 20 20 20  (nBytes);..     
4110: 20 20 20 75 69 6e 74 20 6e 4c 61 72 67 65 73 74     uint nLargest
4120: 4c 6f 63 61 6c 20 3d 20 30 3b 0d 0a 20 20 20 20  Local = 0;..    
4130: 20 20 20 20 62 6f 6f 6c 20 72 65 73 65 74 4f 6b      bool resetOk
4140: 4c 6f 63 61 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a  Local = false;..
4150: 0d 0a 23 69 66 20 21 44 45 42 55 47 20 26 26 20  ..#if !DEBUG && 
4160: 57 49 4e 44 4f 57 53 20 2f 2f 20 4e 4f 54 45 3a  WINDOWS // NOTE:
4170: 20 53 68 6f 75 6c 64 20 62 65 20 22 57 49 4e 33   Should be "WIN3
4180: 32 48 45 41 50 20 26 26 20 21 4d 45 4d 44 45 42  2HEAP && !MEMDEB
4190: 55 47 20 26 26 20 57 49 4e 44 4f 57 53 22 0d 0a  UG && WINDOWS"..
41a0: 20 20 20 20 20 20 20 20 69 66 20 28 28 72 63 20          if ((rc 
41b0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
41c0: 64 65 2e 4f 6b 29 20 26 26 20 72 65 73 65 74 29  de.Ok) && reset)
41d0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
41e0: 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e           rc = Un
41f0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4200: 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  s.sqlite3_win32_
4210: 72 65 73 65 74 5f 68 65 61 70 28 29 3b 0d 0a 0d  reset_heap();...
4220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4230: 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  (rc == SQLiteErr
4240: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
4250: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 65              rese
4260: 74 4f 6b 4c 6f 63 61 6c 20 3d 20 74 72 75 65 3b  tOkLocal = true;
4270: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
4280: 20 20 20 20 20 20 20 69 66 20 28 28 72 63 20 3d         if ((rc =
4290: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
42a0: 65 2e 4f 6b 29 20 26 26 20 63 6f 6d 70 61 63 74  e.Ok) && compact
42b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
42c0: 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
42d0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
42e0: 77 69 6e 33 32 5f 63 6f 6d 70 61 63 74 5f 68 65  win32_compact_he
42f0: 61 70 28 72 65 66 20 6e 4c 61 72 67 65 73 74 4c  ap(ref nLargestL
4300: 6f 63 61 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  ocal);..#else.. 
4310: 20 20 20 20 20 20 20 69 66 20 28 72 65 73 65 74         if (reset
4320: 20 7c 7c 20 63 6f 6d 70 61 63 74 29 0d 0a 20 20   || compact)..  
4330: 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
4340: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e  QLiteErrorCode.N
4350: 6f 74 46 6f 75 6e 64 3b 0d 0a 23 65 6e 64 69 66  otFound;..#endif
4360: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6e 46 72 65  ....        nFre
4370: 65 20 3d 20 6e 46 72 65 65 4c 6f 63 61 6c 3b 0d  e = nFreeLocal;.
4380: 0a 20 20 20 20 20 20 20 20 6e 4c 61 72 67 65 73  .        nLarges
4390: 74 20 3d 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61  t = nLargestLoca
43a0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 65  l;..        rese
43b0: 74 4f 6b 20 3d 20 72 65 73 65 74 4f 6b 4c 6f 63  tOk = resetOkLoc
43c0: 61 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  al;....        r
43d0: 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d  eturn rc;..    }
43e0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
43f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53  mary>..    /// S
4400: 68 75 74 64 6f 77 6e 20 74 68 65 20 53 51 4c 69  hutdown the SQLi
4410: 74 65 20 65 6e 67 69 6e 65 20 73 6f 20 74 68 61  te engine so tha
4420: 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
4430: 61 72 74 65 64 20 77 69 74 68 20 64 69 66 66 65  arted with diffe
4440: 72 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f  rent..    /// co
4450: 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69  nfiguration opti
4460: 6f 6e 73 2e 20 20 57 65 20 64 65 70 65 6e 64 20  ons.  We depend 
4470: 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69 61 6c 69  on auto initiali
4480: 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76 65  zation to recove
4490: 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  r...    /// </su
44a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
44b0: 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73  <returns>Returns
44c0: 20 61 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   a standard SQLi
44d0: 74 65 20 72 65 73 75 6c 74 20 63 6f 64 65 2e 3c  te result code.<
44e0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
44f0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
4500: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
4510: 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a 20 20 20   Shutdown()..   
4520: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
4530: 72 6e 20 53 74 61 74 69 63 53 68 75 74 64 6f 77  rn StaticShutdow
4540: 6e 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d  n(false);..    }
4550: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
4560: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53  mary>..    /// S
4570: 68 75 74 64 6f 77 6e 20 74 68 65 20 53 51 4c 69  hutdown the SQLi
4580: 74 65 20 65 6e 67 69 6e 65 20 73 6f 20 74 68 61  te engine so tha
4590: 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
45a0: 61 72 74 65 64 20 77 69 74 68 20 64 69 66 66 65  arted with diffe
45b0: 72 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f  rent..    /// co
45c0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69  nfiguration opti
45d0: 6f 6e 73 2e 20 20 57 65 20 64 65 70 65 6e 64 20  ons.  We depend 
45e0: 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69 61 6c 69  on auto initiali
45f0: 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76 65  zation to recove
4600: 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  r...    /// </su
4610: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
4620: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69 72  <param name="dir
4630: 65 63 74 6f 72 69 65 73 22 3e 0d 0a 20 20 20 20  ectories">..    
4640: 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20  /// Non-zero to 
4650: 72 65 73 65 74 20 74 68 65 20 64 61 74 61 62 61  reset the databa
4660: 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79  se and temporary
4670: 20 64 69 72 65 63 74 6f 72 69 65 73 20 74 6f 20   directories to 
4680: 74 68 65 69 72 0d 0a 20 20 20 20 2f 2f 2f 20 64  their..    /// d
4690: 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77  efault values, w
46a0: 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e  hich should be n
46b0: 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 20 20 54  ull for both.  T
46c0: 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 68 61  his parameter ha
46d0: 73 20 6e 6f 0d 0a 20 20 20 20 2f 2f 2f 20 65 66  s no..    /// ef
46e0: 66 65 63 74 20 6f 6e 20 6e 6f 6e 2d 57 69 6e 64  fect on non-Wind
46f0: 6f 77 73 20 6f 70 65 72 61 74 69 6e 67 20 73 79  ows operating sy
4700: 73 74 65 6d 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  stems...    /// 
4710: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
4720: 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72  / <returns>Retur
4730: 6e 73 20 61 20 73 74 61 6e 64 61 72 64 20 53 51  ns a standard SQ
4740: 4c 69 74 65 20 72 65 73 75 6c 74 20 63 6f 64 65  Lite result code
4750: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
4760: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
4770: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
4780: 20 53 74 61 74 69 63 53 68 75 74 64 6f 77 6e 28   StaticShutdown(
4790: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64  ..        bool d
47a0: 69 72 65 63 74 6f 72 69 65 73 0d 0a 20 20 20 20  irectories..    
47b0: 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
47c0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
47d0: 72 43 6f 64 65 20 72 63 20 3d 20 53 51 4c 69 74  rCode rc = SQLit
47e0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a  eErrorCode.Ok;..
47f0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 69  ..        if (di
4800: 72 65 63 74 6f 72 69 65 73 29 0d 0a 20 20 20 20  rectories)..    
4810: 20 20 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44 4f      {..#if WINDO
4820: 57 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  WS..            
4830: 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  if (rc == SQLite
4840: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
4850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4860: 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
4870: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
4880: 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
4890: 6f 72 79 28 31 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d  ory(1, null);...
48a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
48b0: 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  (rc == SQLiteErr
48c0: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
48e0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
48f0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e  hods.sqlite3_win
4900: 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79  32_set_directory
4910: 28 32 2c 20 6e 75 6c 6c 29 3b 0d 0a 23 65 6c 73  (2, null);..#els
4920: 65 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  e..#if !NET_COMP
4930: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
4940: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
4950: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
4960: 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20 20  iteLine(..      
4970: 20 20 20 20 20 20 20 20 20 20 22 53 68 75 74 64            "Shutd
4980: 6f 77 6e 3a 20 43 61 6e 6e 6f 74 20 72 65 73 65  own: Cannot rese
4990: 74 20 64 69 72 65 63 74 6f 72 69 65 73 20 6f 6e  t directories on
49a0: 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 2e 22   this platform."
49b0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 23 65 6e 64  );..#endif..#end
49c0: 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  if..        }...
49d0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20  .        if (rc 
49e0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
49f0: 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
4a00: 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e      rc = UnsafeN
4a10: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
4a20: 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 3b  ite3_shutdown();
4a30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
4a40: 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  rn rc;..    }...
4a50: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
4a60: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65  y>..    /// Dete
4a70: 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20 61 73  rmines if the as
4a80: 73 6f 63 69 61 74 65 64 20 6e 61 74 69 76 65 20  sociated native 
4a90: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
4aa0: 65 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20  e is open...    
4ab0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
4ac0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
4ad0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a  >..    /// Non-z
4ae0: 65 72 6f 20 69 66 20 74 68 65 20 61 73 73 6f 63  ero if the assoc
4af0: 69 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f 6e  iated native con
4b00: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69  nection handle i
4b10: 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  s open...    ///
4b20: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
4b30: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
4b40: 64 65 20 62 6f 6f 6c 20 49 73 4f 70 65 6e 28 29  de bool IsOpen()
4b50: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4b60: 20 72 65 74 75 72 6e 20 28 5f 73 71 6c 20 21 3d   return (_sql !=
4b70: 20 6e 75 6c 6c 29 20 26 26 20 21 5f 73 71 6c 2e   null) && !_sql.
4b80: 49 73 49 6e 76 61 6c 69 64 20 26 26 20 21 5f 73  IsInvalid && !_s
4b90: 71 6c 2e 49 73 43 6c 6f 73 65 64 3b 0d 0a 20 20  ql.IsClosed;..  
4ba0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
4bb0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
4bc0: 64 20 4f 70 65 6e 28 73 74 72 69 6e 67 20 73 74  d Open(string st
4bd0: 72 46 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 69 74  rFilename, SQLit
4be0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
4bf0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73   connectionFlags
4c00: 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67  , SQLiteOpenFlag
4c10: 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61 67 73 2c  sEnum openFlags,
4c20: 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53 69 7a 65   int maxPoolSize
4c30: 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29 0d  , bool usePool).
4c40: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f  .    {..      //
4c50: 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a  ..      // NOTE:
4c60: 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
4c70: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
4c80: 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 61  urrently open, a
4c90: 74 74 65 6d 70 74 20 74 6f 0d 0a 20 20 20 20 20  ttempt to..     
4ca0: 20 2f 2f 20 20 20 20 20 20 20 63 6c 6f 73 65 20   //       close 
4cb0: 69 74 20 6e 6f 77 2e 20 20 54 68 69 73 20 6d 75  it now.  This mu
4cc0: 73 74 20 62 65 20 64 6f 6e 65 20 62 65 63 61 75  st be done becau
4cd0: 73 65 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65  se the file name
4ce0: 20 6f 72 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20   or..      //   
4cf0: 20 20 20 20 6f 74 68 65 72 20 70 61 72 61 6d 65      other parame
4d00: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 69 6d  ters that may im
4d10: 70 61 63 74 20 74 68 65 20 75 6e 64 65 72 6c 79  pact the underly
4d20: 69 6e 67 20 64 61 74 61 62 61 73 65 0d 0a 20 20  ing database..  
4d30: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e      //       con
4d40: 6e 65 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65  nection may have
4d50: 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20   changed...     
4d60: 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f   //..      if (_
4d70: 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 43 6c 6f  sql != null) Clo
4d80: 73 65 28 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20  se(true);....   
4d90: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20     //..      // 
4da0: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6e  NOTE: If the con
4db0: 6e 65 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20  nection was not 
4dc0: 63 6c 6f 73 65 64 20 73 75 63 63 65 73 73 66 75  closed successfu
4dd0: 6c 6c 79 2c 20 74 68 72 6f 77 20 61 6e 0d 0a 20  lly, throw an.. 
4de0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78       //       ex
4df0: 63 65 70 74 69 6f 6e 20 6e 6f 77 2e 0d 0a 20 20  ception now...  
4e00: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66      //..      if
4e10: 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d   (_sql != null).
4e20: 0a 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77  .          throw
4e30: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
4e40: 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e  tion("connection
4e50: 20 68 61 6e 64 6c 65 20 69 73 20 73 74 69 6c 6c   handle is still
4e60: 20 61 63 74 69 76 65 22 29 3b 0d 0a 0d 0a 20 20   active");....  
4e70: 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 75      _usePool = u
4e80: 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 5f  sePool;..      _
4e90: 66 69 6c 65 4e 61 6d 65 20 3d 20 73 74 72 46 69  fileName = strFi
4ea0: 6c 65 6e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  lename;....     
4eb0: 20 69 66 20 28 75 73 65 50 6f 6f 6c 29 0d 0a 20   if (usePool).. 
4ec0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4ed0: 5f 73 71 6c 20 3d 20 53 51 4c 69 74 65 43 6f 6e  _sql = SQLiteCon
4ee0: 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f  nectionPool.Remo
4ef0: 76 65 28 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20  ve(strFilename, 
4f00: 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74  maxPoolSize, out
4f10: 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d   _poolVersion);.
4f20: 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  ...#if !NET_COMP
4f30: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
4f40: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
4f50: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
4f60: 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ine(String.Forma
4f70: 74 28 22 4f 70 65 6e 20 28 50 6f 6f 6c 29 3a 20  t("Open (Pool): 
4f80: 7b 30 7d 22 2c 20 28 5f 73 71 6c 20 21 3d 20 6e  {0}", (_sql != n
4f90: 75 6c 6c 29 20 3f 20 5f 73 71 6c 2e 54 6f 53 74  ull) ? _sql.ToSt
4fa0: 72 69 6e 67 28 29 20 3a 20 22 3c 6e 75 6c 6c 3e  ring() : "<null>
4fb0: 22 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  "));..#endif..  
4fc0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
4fd0: 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29  f (_sql == null)
4fe0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
4ff0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
5000: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
5010: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
5020: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
5030: 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54    finally /* NOT
5040: 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28  E: Thread.Abort(
5050: 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f  ) protection. */
5060: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5070: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 64 62         IntPtr db
5080: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  ;..          SQL
5090: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d  iteErrorCode n;.
50a0: 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
50b0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
50c0: 20 20 20 69 66 20 28 28 63 6f 6e 6e 65 63 74 69     if ((connecti
50d0: 6f 6e 46 6c 61 67 73 20 26 20 53 51 4c 69 74 65  onFlags & SQLite
50e0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
50f0: 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74  NoExtensionFunct
5100: 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69 74 65 43  ions) != SQLiteC
5110: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e  onnectionFlags.N
5120: 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69  oExtensionFuncti
5130: 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ons)..          
5140: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  {..            n
5150: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
5160: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f  ethods.sqlite3_o
5170: 70 65 6e 5f 69 6e 74 65 72 6f 70 28 54 6f 55 54  pen_interop(ToUT
5180: 46 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c  F8(strFilename),
5190: 20 6f 70 65 6e 46 6c 61 67 73 2c 20 6f 75 74 20   openFlags, out 
51a0: 64 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  db);..          
51b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  }..          els
51c0: 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  e..#endif..     
51d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
51e0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
51f0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
5200: 74 65 33 5f 6f 70 65 6e 5f 76 32 28 54 6f 55 54  te3_open_v2(ToUT
5210: 46 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c  F8(strFilename),
5220: 20 6f 75 74 20 64 62 2c 20 6f 70 65 6e 46 6c 61   out db, openFla
5230: 67 73 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  gs, IntPtr.Zero)
5240: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
5250: 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
5260: 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
5270: 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
5280: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
5290: 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Line(String.Form
52a0: 61 74 28 22 4f 70 65 6e 3a 20 7b 30 7d 22 2c 20  at("Open: {0}", 
52b0: 64 62 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  db));..#endif...
52c0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e  .          if (n
52d0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
52e0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
52f0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
5300: 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  n(n, null);..   
5310: 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65         _sql = ne
5320: 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
5330: 6f 6e 48 61 6e 64 6c 65 28 64 62 2c 20 74 72 75  onHandle(db, tru
5340: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
5350: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f 73          lock (_s
5360: 71 6c 29 20 7b 20 2f 2a 20 48 41 43 4b 3a 20 46  ql) { /* HACK: F
5370: 6f 72 63 65 20 74 68 65 20 53 79 6e 63 42 6c 6f  orce the SyncBlo
5380: 63 6b 20 74 6f 20 62 65 20 22 63 72 65 61 74 65  ck to be "create
5390: 64 22 20 6e 6f 77 2e 20 2a 2f 20 7d 0d 0a 0d 0a  d" now. */ }....
53a0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
53b0: 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67  nnection.OnChang
53c0: 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e  ed(null, new Con
53d0: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73  nectionEventArgs
53e0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
53f0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45  QLiteConnectionE
5400: 76 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74  ventType.NewCrit
5410: 69 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c  icalHandle, null
5420: 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
5430: 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c       null, null,
5440: 20 5f 73 71 6c 2c 20 73 74 72 46 69 6c 65 6e 61   _sql, strFilena
5450: 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  me, new object[]
5460: 20 7b 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 0d   { strFilename,.
5470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
5480: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 6f 70  nectionFlags, op
5490: 65 6e 46 6c 61 67 73 2c 20 6d 61 78 50 6f 6f 6c  enFlags, maxPool
54a0: 53 69 7a 65 2c 20 75 73 65 50 6f 6f 6c 20 7d 29  Size, usePool })
54b0: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  );..      }.... 
54c0: 20 20 20 20 20 2f 2f 20 42 69 6e 64 20 66 75 6e       // Bind fun
54d0: 63 74 69 6f 6e 73 20 74 6f 20 74 68 69 73 20 63  ctions to this c
54e0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 61  onnection.  If a
54f0: 6e 79 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63  ny previous func
5500: 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 73 61 6d  tions of the sam
5510: 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 2f 2f  e name..      //
5520: 20 77 65 72 65 20 61 6c 72 65 61 64 79 20 62 6f   were already bo
5530: 75 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 65  und, then the ne
5540: 77 20 62 69 6e 64 69 6e 67 73 20 72 65 70 6c 61  w bindings repla
5550: 63 65 20 74 68 65 20 6f 6c 64 2e 0d 0a 20 20 20  ce the old...   
5560: 20 20 20 69 66 20 28 28 63 6f 6e 6e 65 63 74 69     if ((connecti
5570: 6f 6e 46 6c 61 67 73 20 26 20 53 51 4c 69 74 65  onFlags & SQLite
5580: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5590: 4e 6f 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29  NoBindFunctions)
55a0: 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   != SQLiteConnec
55b0: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64  tionFlags.NoBind
55c0: 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20  Functions)..    
55d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69    {..          i
55e0: 66 20 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d  f (_functions ==
55f0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
5600: 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73        _functions
5610: 20 3d 20 6e 65 77 20 4c 69 73 74 3c 53 51 4c 69   = new List<SQLi
5620: 74 65 46 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a  teFunction>();..
5630: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 66 75 6e  ..          _fun
5640: 63 74 69 6f 6e 73 2e 41 64 64 52 61 6e 67 65 28  ctions.AddRange(
5650: 6e 65 77 20 4c 69 73 74 3c 53 51 4c 69 74 65 46  new List<SQLiteF
5660: 75 6e 63 74 69 6f 6e 3e 28 53 51 4c 69 74 65 46  unction>(SQLiteF
5670: 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63  unction.BindFunc
5680: 74 69 6f 6e 73 28 74 68 69 73 2c 20 63 6f 6e 6e  tions(this, conn
5690: 65 63 74 69 6f 6e 46 6c 61 67 73 29 29 29 3b 0d  ectionFlags)));.
56a0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
56b0: 20 20 53 65 74 54 69 6d 65 6f 75 74 28 30 29 3b    SetTimeout(0);
56c0: 0d 0a 20 20 20 20 20 20 47 43 2e 4b 65 65 70 41  ..      GC.KeepA
56d0: 6c 69 76 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20  live(_sql);..   
56e0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
56f0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
5700: 20 43 6c 65 61 72 50 6f 6f 6c 28 29 0d 0a 20 20   ClearPool()..  
5710: 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
5720: 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e  eConnectionPool.
5730: 43 6c 65 61 72 50 6f 6f 6c 28 5f 66 69 6c 65 4e  ClearPool(_fileN
5740: 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ame);..    }....
5750: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
5760: 72 72 69 64 65 20 69 6e 74 20 43 6f 75 6e 74 50  rride int CountP
5770: 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ool()..    {..  
5780: 20 20 20 20 20 20 44 69 63 74 69 6f 6e 61 72 79        Dictionary
5790: 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e 20 63 6f  <string, int> co
57a0: 75 6e 74 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  unts = null;..  
57b0: 20 20 20 20 20 20 69 6e 74 20 6f 70 65 6e 43 6f        int openCo
57c0: 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  unt = 0;..      
57d0: 20 20 69 6e 74 20 63 6c 6f 73 65 43 6f 75 6e 74    int closeCount
57e0: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 69   = 0;..        i
57f0: 6e 74 20 74 6f 74 61 6c 43 6f 75 6e 74 20 3d 20  nt totalCount = 
5800: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  0;....        SQ
5810: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f  LiteConnectionPo
5820: 6f 6c 2e 47 65 74 43 6f 75 6e 74 73 28 5f 66 69  ol.GetCounts(_fi
5830: 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
5840: 20 20 20 20 20 72 65 66 20 63 6f 75 6e 74 73 2c       ref counts,
5850: 20 72 65 66 20 6f 70 65 6e 43 6f 75 6e 74 2c 20   ref openCount, 
5860: 72 65 66 20 63 6c 6f 73 65 43 6f 75 6e 74 2c 0d  ref closeCount,.
5870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
5880: 20 74 6f 74 61 6c 43 6f 75 6e 74 29 3b 0d 0a 0d   totalCount);...
5890: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
58a0: 74 6f 74 61 6c 43 6f 75 6e 74 3b 0d 0a 20 20 20  totalCount;..   
58b0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
58c0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
58d0: 20 53 65 74 54 69 6d 65 6f 75 74 28 69 6e 74 20   SetTimeout(int 
58e0: 6e 54 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20  nTimeoutMS)..   
58f0: 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72   {..      IntPtr
5900: 20 64 62 20 3d 20 5f 73 71 6c 3b 0d 0a 20 20 20   db = _sql;..   
5910: 20 20 20 69 66 20 28 64 62 20 3d 3d 20 49 6e 74     if (db == Int
5920: 50 74 72 2e 5a 65 72 6f 29 20 74 68 72 6f 77 20  Ptr.Zero) throw 
5930: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
5940: 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e 65 63 74 69  ion("no connecti
5950: 6f 6e 20 68 61 6e 64 6c 65 20 61 76 61 69 6c 61  on handle availa
5960: 62 6c 65 22 29 3b 0d 0a 20 20 20 20 20 20 53 51  ble");..      SQ
5970: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
5980: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
5990: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 75  thods.sqlite3_bu
59a0: 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 6e  sy_timeout(db, n
59b0: 54 69 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20 20 20  TimeoutMS);..   
59c0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
59d0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
59e0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
59f0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
5a00: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
5a10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
5a20: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
5a30: 6f 6c 20 53 74 65 70 28 53 51 4c 69 74 65 53 74  ol Step(SQLiteSt
5a40: 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20  atement stmt).. 
5a50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
5a60: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a  teErrorCode n;..
5a70: 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64        Random rnd
5a80: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
5a90: 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d  uint starttick =
5aa0: 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65   (uint)Environme
5ab0: 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 20  nt.TickCount;.. 
5ac0: 20 20 20 20 20 75 69 6e 74 20 74 69 6d 65 6f 75       uint timeou
5ad0: 74 20 3d 20 28 75 69 6e 74 29 28 73 74 6d 74 2e  t = (uint)(stmt.
5ae0: 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e  _command._comman
5af0: 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29  dTimeout * 1000)
5b00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c 65  ;....      while
5b10: 20 28 74 72 75 65 29 0d 0a 20 20 20 20 20 20 7b   (true)..      {
5b20: 0d 0a 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e  ..        n = Un
5b30: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5b40: 73 2e 73 71 6c 69 74 65 33 5f 73 74 65 70 28 73  s.sqlite3_step(s
5b50: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
5b60: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
5b70: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
5b80: 6f 72 43 6f 64 65 2e 52 6f 77 29 20 72 65 74 75  orCode.Row) retu
5b90: 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
5ba0: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
5bb0: 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29  eErrorCode.Done)
5bc0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
5bd0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
5be0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
5bf0: 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
5c00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  {..          SQL
5c10: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 3b 0d  iteErrorCode r;.
5c20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  ...          // 
5c30: 41 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  An error occurre
5c40: 64 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65  d, attempt to re
5c50: 73 65 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e  set the statemen
5c60: 74 2e 20 20 49 66 20 74 68 65 20 72 65 73 65 74  t.  If the reset
5c70: 20 77 6f 72 6b 65 64 20 62 65 63 61 75 73 65 20   worked because 
5c80: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 2f  the..          /
5c90: 2f 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61  / schema has cha
5ca0: 6e 67 65 64 2c 20 72 65 2d 74 72 79 20 74 68 65  nged, re-try the
5cb0: 20 73 74 65 70 20 61 67 61 69 6e 2e 20 20 49 66   step again.  If
5cc0: 20 69 74 20 65 72 72 6f 72 65 64 20 6f 75 72 20   it errored our 
5cd0: 62 65 63 61 75 73 65 20 74 68 65 20 64 61 74 61  because the data
5ce0: 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  base..          
5cf0: 2f 2f 20 69 73 20 6c 6f 63 6b 65 64 2c 20 74 68  // is locked, th
5d00: 65 6e 20 6b 65 65 70 20 72 65 74 72 79 69 6e 67  en keep retrying
5d10: 20 75 6e 74 69 6c 20 74 68 65 20 63 6f 6d 6d 61   until the comma
5d20: 6e 64 20 74 69 6d 65 6f 75 74 20 6f 63 63 75 72  nd timeout occur
5d30: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 72 20  s...          r 
5d40: 3d 20 52 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a  = Reset(stmt);..
5d50: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
5d60: 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  r == SQLiteError
5d70: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
5d80: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
5d90: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
5da0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
5db0: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
5dc0: 20 65 6c 73 65 20 69 66 20 28 28 72 20 3d 3d 20   else if ((r == 
5dd0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
5de0: 4c 6f 63 6b 65 64 20 7c 7c 20 72 20 3d 3d 20 53  Locked || r == S
5df0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42  QLiteErrorCode.B
5e00: 75 73 79 29 20 26 26 20 73 74 6d 74 2e 5f 63 6f  usy) && stmt._co
5e10: 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a  mmand != null)..
5e20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5e30: 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70           // Keep
5e40: 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20   trying..       
5e50: 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20       if (rnd == 
5e60: 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74  null) // First t
5e70: 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e  ime we've encoun
5e80: 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a  tered the lock..
5e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6e                rn
5ea0: 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29  d = new Random()
5eb0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5ec0: 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78 63   // If we've exc
5ed0: 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e  eeded the comman
5ee0: 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76  d's timeout, giv
5ef0: 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61  e up and throw a
5f00: 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  n error..       
5f10: 20 20 20 20 20 69 66 20 28 28 75 69 6e 74 29 45       if ((uint)E
5f20: 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43  nvironment.TickC
5f30: 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b  ount - starttick
5f40: 20 3e 20 74 69 6d 65 6f 75 74 29 0d 0a 20 20 20   > timeout)..   
5f50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5f60: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
5f70: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
5f80: 69 6f 6e 28 72 2c 20 47 65 74 4c 61 73 74 45 72  ion(r, GetLastEr
5f90: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
5fa0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5fb0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
5fc0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5fd0: 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72 77         // Otherw
5fe0: 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61 20  ise sleep for a 
5ff0: 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66  random amount of
6000: 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30 6d   time up to 150m
6010: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
6020: 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e   System.Threadin
6030: 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28 72  g.Thread.Sleep(r
6040: 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29 29  nd.Next(1, 150))
6050: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
6060: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
6070: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6080: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
6090: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
60a0: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
60b0: 65 20 52 65 73 65 74 28 53 51 4c 69 74 65 53 74  e Reset(SQLiteSt
60c0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20  atement stmt).. 
60d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
60e0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a  teErrorCode n;..
60f0: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
6100: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20  ANDARD..      n 
6110: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6120: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
6130: 73 65 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  set_interop(stmt
6140: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
6150: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20  .#else..      n 
6160: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6170: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
6180: 73 65 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  set(stmt._sqlite
6190: 5f 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d  _stmt);..#endif.
61a0: 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 74  ...      // If t
61b0: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
61c0: 64 2c 20 74 72 79 20 61 6e 64 20 72 65 2d 70 72  d, try and re-pr
61d0: 65 70 61 72 65 20 69 74 0d 0a 20 20 20 20 20 20  epare it..      
61e0: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
61f0: 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 29  rrorCode.Schema)
6200: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
6210: 20 20 20 2f 2f 20 52 65 63 72 65 61 74 65 20 61     // Recreate a
6220: 20 64 75 6d 6d 79 20 73 74 61 74 65 6d 65 6e 74   dummy statement
6230: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
6240: 20 73 74 72 3b 0d 0a 20 20 20 20 20 20 20 20 75   str;..        u
6250: 73 69 6e 67 20 28 53 51 4c 69 74 65 53 74 61 74  sing (SQLiteStat
6260: 65 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72 65 70  ement tmp = Prep
6270: 61 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f  are(null, stmt._
6280: 73 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e 75  sqlStatement, nu
6290: 6c 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d 74 2e  ll, (uint)(stmt.
62a0: 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e  _command._comman
62b0: 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29  dTimeout * 1000)
62c0: 2c 20 6f 75 74 20 73 74 72 29 29 0d 0a 20 20 20  , out str))..   
62d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
62e0: 20 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74 68    // Finalize th
62f0: 65 20 65 78 69 73 74 69 6e 67 20 73 74 61 74 65  e existing state
6300: 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20  ment..          
6310: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
6320: 74 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20  t.Dispose();..  
6330: 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61 73 73          // Reass
6340: 69 67 6e 20 61 20 6e 65 77 20 73 74 61 74 65 6d  ign a new statem
6350: 65 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ent pointer to t
6360: 68 65 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e 74  he old statement
6370: 20 61 6e 64 20 63 6c 65 61 72 20 74 68 65 20 74   and clear the t
6380: 65 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20 20  emporary one..  
6390: 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71          stmt._sq
63a0: 6c 69 74 65 5f 73 74 6d 74 20 3d 20 74 6d 70 2e  lite_stmt = tmp.
63b0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20  _sqlite_stmt;.. 
63c0: 20 20 20 20 20 20 20 20 20 74 6d 70 2e 5f 73 71           tmp._sq
63d0: 6c 69 74 65 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c  lite_stmt = null
63e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f  ;....          /
63f0: 2f 20 52 65 61 70 70 6c 79 20 70 61 72 61 6d 65  / Reapply parame
6400: 74 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ters..          
6410: 73 74 6d 74 2e 42 69 6e 64 50 61 72 61 6d 65 74  stmt.BindParamet
6420: 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ers();..        
6430: 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
6440: 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
6450: 65 2e 55 6e 6b 6e 6f 77 6e 3b 20 2f 2f 20 52 65  e.Unknown; // Re
6460: 73 65 74 20 77 61 73 20 4f 4b 2c 20 77 69 74 68  set was OK, with
6470: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 0d 0a   schema change..
6480: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65        }..      e
6490: 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  lse if (n == SQL
64a0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63  iteErrorCode.Loc
64b0: 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69  ked || n == SQLi
64c0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79  teErrorCode.Busy
64d0: 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  )..        retur
64e0: 6e 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  n n;....      if
64f0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
6500: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
6510: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
6520: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
6530: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
6540: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
6550: 6e 20 6e 3b 20 2f 2f 20 57 65 20 72 65 73 65 74  n n; // We reset
6560: 20 4f 4b 2c 20 6e 6f 20 73 63 68 65 6d 61 20 63   OK, no schema c
6570: 68 61 6e 67 65 73 0d 0a 20 20 20 20 7d 0d 0a 0d  hanges..    }...
6580: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6590: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65  erride string Ge
65a0: 74 4c 61 73 74 45 72 72 6f 72 28 29 0d 0a 20 20  tLastError()..  
65b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
65c0: 75 72 6e 20 47 65 74 4c 61 73 74 45 72 72 6f 72  urn GetLastError
65d0: 28 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a  (null);..    }..
65e0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
65f0: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
6600: 65 74 4c 61 73 74 45 72 72 6f 72 28 73 74 72 69  etLastError(stri
6610: 6e 67 20 64 65 66 56 61 6c 75 65 29 0d 0a 20 20  ng defValue)..  
6620: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 74 72    {..        str
6630: 69 6e 67 20 72 65 73 75 6c 74 20 3d 20 53 51 4c  ing result = SQL
6640: 69 74 65 42 61 73 65 2e 47 65 74 4c 61 73 74 45  iteBase.GetLastE
6650: 72 72 6f 72 28 5f 73 71 6c 2c 20 5f 73 71 6c 29  rror(_sql, _sql)
6660: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  ;..        if (S
6670: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
6680: 70 74 79 28 72 65 73 75 6c 74 29 29 20 72 65 73  pty(result)) res
6690: 75 6c 74 20 3d 20 64 65 66 56 61 6c 75 65 3b 0d  ult = defValue;.
66a0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
66b0: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a  result;..    }..
66c0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
66d0: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 53 74  verride SQLiteSt
66e0: 61 74 65 6d 65 6e 74 20 50 72 65 70 61 72 65 28  atement Prepare(
66f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6700: 20 63 6e 6e 2c 20 73 74 72 69 6e 67 20 73 74 72   cnn, string str
6710: 53 71 6c 2c 20 53 51 4c 69 74 65 53 74 61 74 65  Sql, SQLiteState
6720: 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 2c 20 75  ment previous, u
6730: 69 6e 74 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f  int timeoutMS, o
6740: 75 74 20 73 74 72 69 6e 67 20 73 74 72 52 65 6d  ut string strRem
6750: 61 69 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ain)..    {..   
6760: 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
6770: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72  sNullOrEmpty(str
6780: 53 71 6c 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  Sql))..      {..
6790: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
67a0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 51 4c      // NOTE: SQL
67b0: 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  ite does not sup
67c0: 70 6f 72 74 20 74 68 65 20 63 6f 6e 63 65 70 74  port the concept
67d0: 20 6f 66 20 73 65 70 61 72 61 74 65 20 73 63 68   of separate sch
67e0: 65 6d 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  emas..        //
67f0: 20 20 20 20 20 20 20 69 6e 20 6f 6e 65 20 64 61         in one da
6800: 74 61 62 61 73 65 3b 20 74 68 65 72 65 66 6f 72  tabase; therefor
6810: 65 2c 20 72 65 6d 6f 76 65 20 74 68 65 20 62 61  e, remove the ba
6820: 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 0d 0a  se schema name..
6830: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
6840: 20 75 73 65 64 20 74 6f 20 73 6d 6f 6f 74 68 20   used to smooth 
6850: 69 6e 74 65 67 72 61 74 69 6f 6e 20 77 69 74 68  integration with
6860: 20 74 68 65 20 62 61 73 65 20 2e 4e 45 54 20 46   the base .NET F
6870: 72 61 6d 65 77 6f 72 6b 0d 0a 20 20 20 20 20 20  ramework..      
6880: 20 20 2f 2f 20 20 20 20 20 20 20 64 61 74 61 20    //       data 
6890: 63 6c 61 73 73 65 73 2e 0d 0a 20 20 20 20 20 20  classes...      
68a0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 73 74    //..        st
68b0: 72 69 6e 67 20 62 61 73 65 53 63 68 65 6d 61 4e  ring baseSchemaN
68c0: 61 6d 65 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75  ame = (cnn != nu
68d0: 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 62 61 73 65 53  ll) ? cnn._baseS
68e0: 63 68 65 6d 61 4e 61 6d 65 20 3a 20 6e 75 6c 6c  chemaName : null
68f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
6900: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
6910: 72 45 6d 70 74 79 28 62 61 73 65 53 63 68 65 6d  rEmpty(baseSchem
6920: 61 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  aName))..       
6930: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74   {..          st
6940: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65  rSql = strSql.Re
6950: 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  place(..        
6960: 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
6970: 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
6980: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
6990: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
69a0: 20 22 5b 7b 30 7d 5d 2e 22 2c 20 62 61 73 65 53   "[{0}].", baseS
69b0: 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69  chemaName), Stri
69c0: 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20  ng.Empty);....  
69d0: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
69e0: 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28   strSql.Replace(
69f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6a00: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75  String.Format(Cu
6a10: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
6a20: 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  antCulture,..   
6a30: 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2e             "{0}.
6a40: 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  ", baseSchemaNam
6a50: 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  e), String.Empty
6a60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
6a70: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6a80: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6a90: 46 6c 61 67 73 20 66 6c 61 67 73 20 3d 0d 0a 20  Flags flags =.. 
6aa0: 20 20 20 20 20 20 20 20 20 28 63 6e 6e 20 21 3d           (cnn !=
6ab0: 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 46 6c 61   null) ? cnn.Fla
6ac0: 67 73 20 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs : SQLiteConne
6ad0: 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 66 61 75  ctionFlags.Defau
6ae0: 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  lt;....      if 
6af0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
6b00: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6b10: 4c 6f 67 50 72 65 70 61 72 65 29 20 3d 3d 20 53  LogPrepare) == S
6b20: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6b30: 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61 72 65 29  lags.LogPrepare)
6b40: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
6b50: 20 20 20 20 20 69 66 20 28 28 73 74 72 53 71 6c       if ((strSql
6b60: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 74   == null) || (st
6b70: 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3d 3d 20 30  rSql.Length == 0
6b80: 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 54 72 69  ) || (strSql.Tri
6b90: 6d 28 29 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29  m().Length == 0)
6ba0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6bb0: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
6bc0: 73 73 61 67 65 28 22 50 72 65 70 61 72 69 6e 67  ssage("Preparing
6bd0: 20 7b 3c 6e 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22   {<nothing>}..."
6be0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c  );..          el
6bf0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
6c00: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
6c10: 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f  essage(String.Fo
6c20: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
6c30: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
6c40: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
6c50: 75 72 65 2c 20 22 50 72 65 70 61 72 69 6e 67 20  ure, "Preparing 
6c60: 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72  {{{0}}}...", str
6c70: 53 71 6c 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  Sql));..      }.
6c80: 0a 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ...      IntPtr 
6c90: 73 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65  stmt = IntPtr.Ze
6ca0: 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ro;..      IntPt
6cb0: 72 20 70 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a  r ptr = IntPtr.Z
6cc0: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ero;..      int 
6cd0: 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  len = 0;..      
6ce0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
6cf0: 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  n = SQLiteErrorC
6d00: 6f 64 65 2e 53 63 68 65 6d 61 3b 0d 0a 20 20 20  ode.Schema;..   
6d10: 20 20 20 69 6e 74 20 72 65 74 72 69 65 73 20 3d     int retries =
6d20: 20 30 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b   0;..      byte[
6d30: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 73 74 72  ] b = ToUTF8(str
6d40: 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20 73 74 72  Sql);..      str
6d50: 69 6e 67 20 74 79 70 65 64 65 66 73 20 3d 20 6e  ing typedefs = n
6d60: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  ull;..      SQLi
6d70: 74 65 53 74 61 74 65 6d 65 6e 74 20 63 6d 64 20  teStatement cmd 
6d80: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 52  = null;..      R
6d90: 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c  andom rnd = null
6da0: 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74  ;..      uint st
6db0: 61 72 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29  arttick = (uint)
6dc0: 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b  Environment.Tick
6dd0: 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  Count;....      
6de0: 47 43 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  GCHandle handle 
6df0: 3d 20 47 43 48 61 6e 64 6c 65 2e 41 6c 6c 6f 63  = GCHandle.Alloc
6e00: 28 62 2c 20 47 43 48 61 6e 64 6c 65 54 79 70 65  (b, GCHandleType
6e10: 2e 50 69 6e 6e 65 64 29 3b 0d 0a 20 20 20 20 20  .Pinned);..     
6e20: 20 49 6e 74 50 74 72 20 70 73 71 6c 20 3d 20 68   IntPtr psql = h
6e30: 61 6e 64 6c 65 2e 41 64 64 72 4f 66 50 69 6e 6e  andle.AddrOfPinn
6e40: 65 64 4f 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20  edObject();..   
6e50: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
6e60: 6e 74 48 61 6e 64 6c 65 20 73 74 61 74 65 6d 65  ntHandle stateme
6e70: 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b  ntHandle = null;
6e80: 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20  ..      try..   
6e90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 77 68     {..        wh
6ea0: 69 6c 65 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74  ile ((n == SQLit
6eb0: 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d  eErrorCode.Schem
6ec0: 61 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65  a || n == SQLite
6ed0: 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64  ErrorCode.Locked
6ee0: 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45   || n == SQLiteE
6ef0: 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 26  rrorCode.Busy) &
6f00: 26 20 72 65 74 72 69 65 73 20 3c 20 33 29 0d 0a  & retries < 3)..
6f10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6f20: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
6f30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6f40: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
6f50: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ...          }..
6f60: 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
6f70: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
6f80: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
6f90: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
6fa0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
6fb0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
6fc0: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
6fd0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6fe0: 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  .sqlite3_prepare
6ff0: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 70  _interop(_sql, p
7000: 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  sql, b.Length - 
7010: 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75 74  1, out stmt, out
7020: 20 70 74 72 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d   ptr, out len);.
7030: 0a 23 65 6c 73 65 0d 0a 23 69 66 20 55 53 45 5f  .#else..#if USE_
7040: 50 52 45 50 41 52 45 5f 56 32 0d 0a 20 20 20 20  PREPARE_V2..    
7050: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
7060: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
7070: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
7080: 76 32 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62  v2(_sql, psql, b
7090: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74  .Length - 1, out
70a0: 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 29 3b   stmt, out ptr);
70b0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
70c0: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
70d0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
70e0: 69 74 65 33 5f 70 72 65 70 61 72 65 28 5f 73 71  ite3_prepare(_sq
70f0: 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74  l, psql, b.Lengt
7100: 68 20 2d 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c  h - 1, out stmt,
7110: 20 6f 75 74 20 70 74 72 29 3b 0d 0a 23 65 6e 64   out ptr);..#end
7120: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
7130: 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69  len = -1;..#endi
7140: 66 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  f....#if !NET_CO
7150: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
7160: 45 5f 53 54 41 54 45 4d 45 4e 54 0d 0a 20 20 20  E_STATEMENT..   
7170: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
7180: 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e  riteLine(String.
7190: 46 6f 72 6d 61 74 28 22 50 72 65 70 61 72 65 20  Format("Prepare 
71a0: 28 7b 30 7d 29 3a 20 7b 31 7d 22 2c 20 6e 2c 20  ({0}): {1}", n, 
71b0: 73 74 6d 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  stmt));..#endif.
71c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
71d0: 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  f ((n == SQLiteE
71e0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20  rrorCode.Ok) && 
71f0: 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e  (stmt != IntPtr.
7200: 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20  Zero))..        
7210: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7220: 20 20 20 20 20 69 66 20 28 73 74 61 74 65 6d 65       if (stateme
7230: 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c  ntHandle != null
7240: 29 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  ) statementHandl
7250: 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20  e.Dispose();..  
7260: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
7270: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 65  ementHandle = ne
7280: 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  w SQLiteStatemen
7290: 74 48 61 6e 64 6c 65 28 5f 73 71 6c 2c 20 73 74  tHandle(_sql, st
72a0: 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mt);..          
72b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
72c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
72d0: 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c   (statementHandl
72e0: 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
72f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7300: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
7310: 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28  ction.OnChanged(
7320: 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63  null, new Connec
7330: 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a  tionEventArgs(..
7340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
7350: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  LiteConnectionEv
7360: 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69  entType.NewCriti
7370: 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c  calHandle, null,
7380: 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
7390: 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c        null, null
73a0: 2c 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  , statementHandl
73b0: 65 2c 20 73 74 72 53 71 6c 2c 20 6e 65 77 20 6f  e, strSql, new o
73c0: 62 6a 65 63 74 5b 5d 20 7b 20 63 6e 6e 2c 0d 0a  bject[] { cnn,..
73d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
73e0: 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20  rSql, previous, 
73f0: 74 69 6d 65 6f 75 74 4d 53 20 7d 29 29 3b 0d 0a  timeoutMS }));..
7400: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7410: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d           if (n =
7420: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
7430: 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20  e.Schema)..     
7440: 20 20 20 20 20 20 20 72 65 74 72 69 65 73 2b 2b         retries++
7450: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  ;..          els
7460: 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
7470: 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
7480: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
7490: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
74a0: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47  String.Compare(G
74b0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 22  etLastError(), "
74c0: 6e 65 61 72 20 5c 22 54 59 50 45 53 5c 22 3a 20  near \"TYPES\": 
74d0: 73 79 6e 74 61 78 20 65 72 72 6f 72 22 2c 20 53  syntax error", S
74e0: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
74f0: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
7500: 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  e) == 0)..      
7510: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7520: 20 20 20 20 20 20 20 69 6e 74 20 70 6f 73 20 3d         int pos =
7530: 20 73 74 72 53 71 6c 2e 49 6e 64 65 78 4f 66 28   strSql.IndexOf(
7540: 27 3b 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ';');..         
7550: 20 20 20 20 20 69 66 20 28 70 6f 73 20 3d 3d 20       if (pos == 
7560: 2d 31 29 20 70 6f 73 20 3d 20 73 74 72 53 71 6c  -1) pos = strSql
7570: 2e 4c 65 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a  .Length - 1;....
7580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
7590: 70 65 64 65 66 73 20 3d 20 73 74 72 53 71 6c 2e  pedefs = strSql.
75a0: 53 75 62 73 74 72 69 6e 67 28 30 2c 20 70 6f 73  Substring(0, pos
75b0: 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20   + 1);..        
75c0: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
75d0: 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28  trSql.Substring(
75e0: 70 6f 73 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20  pos + 1);....   
75f0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52 65             strRe
7600: 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20  main = "";....  
7610: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
7620: 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26  e (cmd == null &
7630: 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  & strSql.Length 
7640: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
7650: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7660: 20 20 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65         cmd = Pre
7670: 70 61 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c  pare(cnn, strSql
7680: 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65  , previous, time
7690: 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74 72 52 65  outMS, out strRe
76a0: 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  main);..        
76b0: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
76c0: 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20   strRemain;..   
76d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
76e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
76f0: 20 28 63 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a   (cmd != null)..
7700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7710: 63 6d 64 2e 53 65 74 54 79 70 65 73 28 74 79 70  cmd.SetTypes(typ
7720: 65 64 65 66 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  edefs);....     
7730: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7740: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  cmd;..          
7750: 20 20 7d 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35    }..#if (NET_35
7760: 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45   || NET_40 || NE
7770: 54 5f 34 35 29 20 26 26 20 21 50 4c 41 54 46 4f  T_45) && !PLATFO
7780: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
7790: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
77a0: 20 65 6c 73 65 20 69 66 20 28 5f 62 75 69 6c 64   else if (_build
77b0: 69 6e 67 53 63 68 65 6d 61 20 3d 3d 20 66 61 6c  ingSchema == fal
77c0: 73 65 20 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d  se && String.Com
77d0: 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f  pare(GetLastErro
77e0: 72 28 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68  r(), 0, "no such
77f0: 20 74 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48   table: TEMP.SCH
7800: 45 4d 41 22 2c 20 30 2c 20 32 36 2c 20 53 74 72  EMA", 0, 26, Str
7810: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
7820: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
7830: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
7840: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7850: 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d       strRemain =
7860: 20 22 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   "";..          
7870: 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68      _buildingSch
7880: 65 6d 61 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ema = true;..   
7890: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
78b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
78c0: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
78d0: 74 65 6e 73 69 6f 6e 73 20 65 78 74 20 3d 20 28  tensions ext = (
78e0: 28 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65  (IServiceProvide
78f0: 72 29 53 51 4c 69 74 65 46 61 63 74 6f 72 79 2e  r)SQLiteFactory.
7900: 49 6e 73 74 61 6e 63 65 29 2e 47 65 74 53 65 72  Instance).GetSer
7910: 76 69 63 65 28 74 79 70 65 6f 66 28 49 53 51 4c  vice(typeof(ISQL
7920: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
7930: 6f 6e 73 29 29 20 61 73 20 49 53 51 4c 69 74 65  ons)) as ISQLite
7940: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
7950: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
7960: 20 20 20 20 20 69 66 20 28 65 78 74 20 21 3d 20       if (ext != 
7970: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
7980: 20 20 20 20 20 20 20 20 20 65 78 74 2e 42 75 69           ext.Bui
7990: 6c 64 54 65 6d 70 53 63 68 65 6d 61 28 63 6e 6e  ldTempSchema(cnn
79a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
79b0: 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64        while (cmd
79c0: 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53   == null && strS
79d0: 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  ql.Length > 0)..
79e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7a00: 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61       cmd = Prepa
7a10: 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20  re(cnn, strSql, 
7a20: 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75  previous, timeou
7a30: 74 4d 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61  tMS, out strRema
7a40: 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  in);..          
7a50: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
7a60: 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20   strRemain;..   
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
7a80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7a90: 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20    return cmd;.. 
7aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
7ac0: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
7ad0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7ae0: 20 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e          _buildin
7af0: 67 53 63 68 65 6d 61 20 3d 20 66 61 6c 73 65 3b  gSchema = false;
7b00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7b10: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
7b20: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
7b30: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
7b40: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
7b50: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c  QLiteErrorCode.L
7b60: 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51  ocked || n == SQ
7b70: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75  LiteErrorCode.Bu
7b80: 73 79 29 20 2f 2f 20 4c 6f 63 6b 65 64 20 2d 2d  sy) // Locked --
7b90: 20 64 65 6c 61 79 20 61 20 73 6d 61 6c 6c 20 61   delay a small a
7ba0: 6d 6f 75 6e 74 20 62 65 66 6f 72 65 20 72 65 74  mount before ret
7bb0: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
7bc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7bd0: 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a  // Keep trying..
7be0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7bf0: 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20  rnd == null) // 
7c00: 46 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65  First time we've
7c10: 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65   encountered the
7c20: 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20   lock..         
7c30: 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52       rnd = new R
7c40: 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20  andom();....    
7c50: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
7c60: 27 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65  've exceeded the
7c70: 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f   command's timeo
7c80: 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20  ut, give up and 
7c90: 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a  throw an error..
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7cb0: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
7cc0: 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74  t.TickCount - st
7cd0: 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75  arttick > timeou
7ce0: 74 4d 53 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tMS)..          
7cf0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7d00: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
7d10: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
7d20: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
7d30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
7d50: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
7d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7d70: 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65  // Otherwise sle
7d80: 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20  ep for a random 
7d90: 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75  amount of time u
7da0: 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20  p to 150ms..    
7db0: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
7dc0: 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61  .Threading.Threa
7dd0: 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74  d.Sleep(rnd.Next
7de0: 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20  (1, 150));..    
7df0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7e00: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7e10: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
7e20: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
7e30: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
7e40: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
7e50: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
7e60: 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
7e70: 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 55     strRemain = U
7e80: 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c  TF8ToString(ptr,
7e90: 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   len);....      
7ea0: 20 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48    if (statementH
7eb0: 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 63  andle != null) c
7ec0: 6d 64 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53  md = new SQLiteS
7ed0: 74 61 74 65 6d 65 6e 74 28 74 68 69 73 2c 20 66  tatement(this, f
7ee0: 6c 61 67 73 2c 20 73 74 61 74 65 6d 65 6e 74 48  lags, statementH
7ef0: 61 6e 64 6c 65 2c 20 73 74 72 53 71 6c 2e 53 75  andle, strSql.Su
7f00: 62 73 74 72 69 6e 67 28 30 2c 20 73 74 72 53 71  bstring(0, strSq
7f10: 6c 2e 4c 65 6e 67 74 68 20 2d 20 73 74 72 52 65  l.Length - strRe
7f20: 6d 61 69 6e 2e 4c 65 6e 67 74 68 29 2c 20 70 72  main.Length), pr
7f30: 65 76 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20 20 20  evious);....    
7f40: 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d      return cmd;.
7f50: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
7f60: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 7b  finally..      {
7f70: 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65  ..        handle
7f80: 2e 46 72 65 65 28 29 3b 0d 0a 20 20 20 20 20 20  .Free();..      
7f90: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
7fa0: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
7fb0: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
7fc0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
7fd0: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
7fe0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
7ff0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
8000: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
8010: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
8020: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
8030: 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  sage(String.Form
8040: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
8050: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
8060: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
8070: 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69            "Bindi
8080: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d  ng statement {0}
8090: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61   paramter #{1} a
80a0: 73 20 4e 55 4c 4c 2e 2e 2e 22 2c 0d 0a 20 20 20  s NULL...",..   
80b0: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
80c0: 6e 74 50 74 72 2c 20 69 6e 64 65 78 29 29 3b 0d  ntPtr, index));.
80d0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
80e0: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
80f0: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
8100: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
8110: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
8120: 64 65 78 2c 20 56 61 6c 75 65 54 79 70 65 20 76  dex, ValueType v
8130: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
8140: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
8150: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
8160: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  le;....        S
8170: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
8180: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
8190: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
81a0: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
81b0: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
81c0: 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d  #{1} as type {2}
81d0: 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33   with value {{{3
81e0: 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  }}}...",..      
81f0: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
8200: 74 72 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  tr, index, value
8210: 2e 47 65 74 54 79 70 65 28 29 2c 20 76 61 6c 75  .GetType(), valu
8220: 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  e));..    }.... 
8230: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
8240: 63 20 73 74 72 69 6e 67 20 46 6f 72 6d 61 74 44  c string FormatD
8250: 61 74 65 54 69 6d 65 28 44 61 74 65 54 69 6d 65  ateTime(DateTime
8260: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
8270: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75          StringBu
8280: 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e  ilder result = n
8290: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
82a0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ();....        r
82b0: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c  esult.Append(val
82c0: 75 65 2e 54 6f 53 74 72 69 6e 67 28 22 79 79 79  ue.ToString("yyy
82d0: 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73  y-MM-ddTHH:mm:ss
82e0: 2e 46 46 46 46 46 46 46 4b 22 29 29 3b 0d 0a 20  .FFFFFFFK"));.. 
82f0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
8300: 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20  pend(' ');..    
8310: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
8320: 64 28 76 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d 0a  d(value.Kind);..
8330: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
8340: 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20  ppend(' ');..   
8350: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
8360: 6e 64 28 76 61 6c 75 65 2e 54 69 63 6b 73 29 3b  nd(value.Ticks);
8370: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
8380: 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69  rn result.ToStri
8390: 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ng();..    }....
83a0: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74      protected st
83b0: 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e  atic void LogBin
83c0: 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  d(SQLiteStatemen
83d0: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20  tHandle handle, 
83e0: 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54  int index, DateT
83f0: 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ime value)..    
8400: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
8410: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
8420: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
8430: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
8440: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
8450: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
8460: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
8470: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
8480: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
8490: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
84a0: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
84b0: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
84c0: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
84d0: 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29  typeof(DateTime)
84e0: 2c 20 46 6f 72 6d 61 74 44 61 74 65 54 69 6d 65  , FormatDateTime
84f0: 28 76 61 6c 75 65 29 29 29 3b 0d 0a 20 20 20 20  (value)));..    
8500: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
8510: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
8520: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
8530: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
8540: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
8550: 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20  string value).. 
8560: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
8570: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
8580: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
8590: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
85a0: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
85b0: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
85c0: 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67          "Binding
85d0: 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70   statement {0} p
85e0: 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20  aramter #{1} as 
85f0: 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61  type {2} with va
8600: 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c  lue {{{3}}}...",
8610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61  ..            ha
8620: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65  ndleIntPtr, inde
8630: 78 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e 67  x, typeof(String
8640: 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c  ), (value != nul
8650: 6c 29 20 3f 20 76 61 6c 75 65 20 3a 20 22 3c 6e  l) ? value : "<n
8660: 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d  ull>"));..    }.
8670: 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  ...    private s
8680: 74 61 74 69 63 20 73 74 72 69 6e 67 20 54 6f 48  tatic string ToH
8690: 65 78 61 64 65 63 69 6d 61 6c 53 74 72 69 6e 67  exadecimalString
86a0: 28 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b  (..        byte[
86b0: 5d 20 61 72 72 61 79 0d 0a 20 20 20 20 20 20 20  ] array..       
86c0: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
86d0: 20 20 20 69 66 20 28 61 72 72 61 79 20 3d 3d 20     if (array == 
86e0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
86f0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
8700: 0a 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e  ...        Strin
8710: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
8720: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
8730: 64 65 72 28 61 72 72 61 79 2e 4c 65 6e 67 74 68  der(array.Length
8740: 20 2a 20 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   * 2);....      
8750: 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61    int length = a
8760: 72 72 61 79 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  rray.Length;....
8770: 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
8780: 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65   index = 0; inde
8790: 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65  x < length; inde
87a0: 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x++)..          
87b0: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
87c0: 61 72 72 61 79 5b 69 6e 64 65 78 5d 2e 54 6f 53  array[index].ToS
87d0: 74 72 69 6e 67 28 22 78 32 22 29 29 3b 0d 0a 0d  tring("x2"));...
87e0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
87f0: 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28  result.ToString(
8800: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
8810: 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69   protected stati
8820: 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53  c void LogBind(S
8830: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
8840: 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74  ndle handle, int
8850: 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 76   index, byte[] v
8860: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
8870: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
8880: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
8890: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  le;....        S
88a0: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
88b0: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
88c0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
88d0: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
88e0: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
88f0: 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d  #{1} as type {2}
8900: 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33   with value {{{3
8910: 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  }}}...",..      
8920: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
8930: 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f  tr, index, typeo
8940: 66 28 42 79 74 65 5b 5d 29 2c 20 28 76 61 6c 75  f(Byte[]), (valu
8950: 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 48  e != null) ? ToH
8960: 65 78 61 64 65 63 69 6d 61 6c 53 74 72 69 6e 67  exadecimalString
8970: 28 76 61 6c 75 65 29 20 3a 20 22 3c 6e 75 6c 6c  (value) : "<null
8980: 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  >"));..    }....
8990: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
89a0: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
89b0: 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61  Double(SQLiteSta
89c0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
89d0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
89e0: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
89f0: 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75  dex, double valu
8a00: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
8a10: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
8a20: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
8a30: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
8a40: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
8a50: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
8a60: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
8a70: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
8a80: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
8a90: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
8aa0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8ab0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
8ac0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
8ad0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
8ae0: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
8af0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
8b00: 4b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  K..        SQLit
8b10: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
8b20: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
8b30: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
8b40: 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69  double(handle, i
8b50: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
8b60: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
8b70: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53  NDARD..        S
8b80: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
8b90: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
8ba0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
8bb0: 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  ind_double_inter
8bc0: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
8bd0: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
8be0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
8bf0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
8c00: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
8c10: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
8c20: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
8c30: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
8c40: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
8c50: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
8c60: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
8c70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
8c80: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
8c90: 6f 69 64 20 42 69 6e 64 5f 49 6e 74 33 32 28 53  oid Bind_Int32(S
8ca0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
8cb0: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
8cc0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
8cd0: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74  , int index, int
8ce0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
8cf0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
8d00: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
8d10: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
8d20: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20  ite_stmt;....   
8d30: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
8d40: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
8d50: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
8d60: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
8d70: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
8d80: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
8d90: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
8da0: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
8db0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
8dc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8dd0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
8de0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
8df0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8e00: 62 69 6e 64 5f 69 6e 74 28 68 61 6e 64 6c 65 2c  bind_int(handle,
8e10: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
8e20: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
8e30: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
8e40: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
8e50: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
8e60: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
8e70: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
8e80: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
8e90: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49  ide void Bind_UI
8ea0: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
8eb0: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
8ec0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
8ed0: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
8ee0: 78 2c 20 75 69 6e 74 20 76 61 6c 75 65 29 0d 0a  x, uint value)..
8ef0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
8f00: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
8f10: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
8f20: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
8f30: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
8f40: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
8f50: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
8f60: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
8f70: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
8f80: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
8f90: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
8fa0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
8fb0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8fc0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
8fd0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
8fe0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
8ff0: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  dif....        S
9000: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
9010: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
9020: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
9030: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
9040: 42 69 6e 64 55 49 6e 74 33 32 41 73 49 6e 74 36  BindUInt32AsInt6
9050: 34 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  4) == SQLiteConn
9060: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64  ectionFlags.Bind
9070: 55 49 6e 74 33 32 41 73 49 6e 74 36 34 29 0d 0a  UInt32AsInt64)..
9080: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9090: 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75         long valu
90a0: 65 32 20 3d 20 76 61 6c 75 65 3b 0d 0a 0d 0a 23  e2 = value;....#
90b0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
90c0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
90d0: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
90e0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
90f0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
9100: 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e  int64(handle, in
9110: 64 65 78 2c 20 76 61 6c 75 65 32 29 3b 0d 0a 23  dex, value2);..#
9120: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
9130: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
9140: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
9150: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9160: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e  e3_bind_int64_in
9170: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
9180: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 32 29  dex, ref value2)
9190: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
91a0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
91b0: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
91c0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
91d0: 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  if..        }.. 
91e0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
91f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9200: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
9210: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9220: 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 28 68 61  te3_bind_uint(ha
9230: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
9240: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
9250: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
9260: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
9270: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
9280: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
9290: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
92a0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
92b0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
92c0: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e  ide void Bind_In
92d0: 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t64(SQLiteStatem
92e0: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
92f0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
9300: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
9310: 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20  , long value).. 
9320: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
9330: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
9340: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
9350: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
9360: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
9370: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
9380: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
9390: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
93a0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
93b0: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
93c0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
93d0: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
93e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
93f0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
9400: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
9410: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
9420: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
9430: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
9440: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9450: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
9460: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
9470: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
9480: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
9490: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
94a0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
94b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
94c0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
94d0: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
94e0: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
94f0: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
9500: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
9510: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
9520: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
9530: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20  dif..        if 
9540: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
9550: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
9560: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
9570: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
9580: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
9590: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
95a0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
95b0: 64 5f 55 49 6e 74 36 34 28 53 51 4c 69 74 65 53  d_UInt64(SQLiteS
95c0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
95d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
95e0: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
95f0: 69 6e 64 65 78 2c 20 75 6c 6f 6e 67 20 76 61 6c  index, ulong val
9600: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
9610: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
9620: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
9630: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
9640: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
9650: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
9660: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
9670: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
9680: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
9690: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
96a0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
96b0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
96c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
96d0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
96e0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
96f0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
9700: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
9710: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
9720: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9730: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
9740: 5f 75 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  _uint64(handle, 
9750: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
9760: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
9770: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
9780: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
9790: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
97a0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
97b0: 62 69 6e 64 5f 75 69 6e 74 36 34 5f 69 6e 74 65  bind_uint64_inte
97c0: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
97d0: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
97e0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74  #else..        t
97f0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
9800: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
9810: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
9820: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
9830: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
9840: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
9850: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
9860: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
9870: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
9880: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
9890: 76 6f 69 64 20 42 69 6e 64 5f 54 65 78 74 28 53  void Bind_Text(S
98a0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
98b0: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
98c0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
98d0: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72  , int index, str
98e0: 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ing value)..    
98f0: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
9900: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
9910: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
9920: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
9930: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
9940: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
9950: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
9960: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
9970: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
9980: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
9990: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
99a0: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
99b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
99c0: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
99d0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
99e0: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
99f0: 0a 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b  ...        byte[
9a00: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c  ] b = ToUTF8(val
9a10: 75 65 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  ue);....#if !PLA
9a20: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
9a30: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
9a40: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
9a50: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
9a60: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
9a70: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
9a80: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
9a90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9aa0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
9ab0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b  ndle, index, b);
9ac0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
9ad0: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  dif....        S
9ae0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
9af0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
9b00: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
9b10: 69 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c  ind_text(handle,
9b20: 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e   index, b, b.Len
9b30: 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72  gth - 1, (IntPtr
9b40: 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20  )(-1));..       
9b50: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
9b60: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
9b70: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
9b80: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
9b90: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
9ba0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
9bb0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
9bc0: 20 42 69 6e 64 5f 44 61 74 65 54 69 6d 65 28 53   Bind_DateTime(S
9bd0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
9be0: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
9bf0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
9c00: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74  , int index, Dat
9c10: 65 54 69 6d 65 20 64 74 29 0d 0a 20 20 20 20 7b  eTime dt)..    {
9c20: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
9c30: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
9c40: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
9c50: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23  qlite_stmt;....#
9c60: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
9c70: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
9c80: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
9c90: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
9ca0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
9cb0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
9cc0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
9cd0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
9ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
9cf0: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
9d00: 65 78 2c 20 64 74 29 3b 0d 0a 20 20 20 20 20 20  ex, dt);..      
9d10: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
9d20: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28 5f         switch (_
9d30: 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 29 0d  datetimeFormat).
9d40: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9d50: 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
9d60: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54  iteDateFormats.T
9d70: 69 63 6b 73 3a 0d 0a 20 20 20 20 20 20 20 20 20  icks:..         
9d80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
9da0: 6e 67 20 76 61 6c 75 65 20 3d 20 64 74 2e 54 69  ng value = dt.Ti
9db0: 63 6b 73 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  cks;....#if !PLA
9dc0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
9dd0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
9de0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9df0: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
9e00: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
9e10: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
9e20: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
9e30: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
9e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
9e50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9e60: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
9e70: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
9e80: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
9e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
9ea0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9eb0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
9ec0: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
9ed0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9ee0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
9ef0: 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  4(handle, index,
9f00: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20   value);..#elif 
9f10: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
9f20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9f30: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
9f40: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
9f50: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9f60: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
9f70: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
9f80: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
9f90: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
9fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fb0: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
9fc0: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
9fd0: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
9fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ff0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
a000: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
a010: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
a020: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
a030: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
a040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a050: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
a060: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
a070: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
a080: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
a090: 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a 20 20 20 20  JulianDay:..    
a0a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0c0: 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 20     double value 
a0d0: 3d 20 54 6f 4a 75 6c 69 61 6e 44 61 79 28 64 74  = ToJulianDay(dt
a0e0: 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  );....#if !PLATF
a0f0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
a100: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
a110: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66            if ((f
a120: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
a130: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
a140: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
a150: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
a160: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
a170: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
a180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a190: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
a1a0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
a1b0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
a1c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a1d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a1e0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
a1f0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
a200: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a210: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
a220: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
a230: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
a240: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
a250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a260: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
a270: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
a280: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a290: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
a2a0: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
a2b0: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
a2c0: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
a2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2e0: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
a2f0: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
a300: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
a310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a320: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
a330: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
a340: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
a350: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
a360: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
a370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a380: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
a390: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
a3a0: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
a3b0: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
a3c0: 55 6e 69 78 45 70 6f 63 68 3a 0d 0a 20 20 20 20  UnixEpoch:..    
a3d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3f0: 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20     long value = 
a400: 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 36 34 28  Convert.ToInt64(
a410: 64 74 2e 53 75 62 74 72 61 63 74 28 55 6e 69 78  dt.Subtract(Unix
a420: 45 70 6f 63 68 29 2e 54 6f 74 61 6c 53 65 63 6f  Epoch).TotalSeco
a430: 6e 64 73 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  nds);....#if !PL
a440: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
a450: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
a460: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a470: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
a480: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
a490: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
a4a0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
a4b0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
a4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a4e0: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
a4f0: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
a500: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
a510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
a520: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a530: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
a540: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
a550: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a560: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
a570: 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  64(handle, index
a580: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66  , value);..#elif
a590: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
a5a0: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  D..             
a5b0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
a5c0: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
a5d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a5e0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
a5f0: 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  4_interop(handle
a600: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
a610: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
a620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a630: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
a640: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
a650: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
a660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a670: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
a680: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
a690: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
a6a0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
a6b0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
a6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6d0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
a6e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
a6f0: 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
a700: 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t:..            
a710: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a720: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
a730: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 64 74 29  ] b = ToUTF8(dt)
a740: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
a750: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
a760: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
a770: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c           if ((fl
a780: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
a790: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
a7a0: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
a7b0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
a7c0: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
a7d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a7f0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
a800: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29  andle, index, b)
a810: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a820: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
a830: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a840: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
a850: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
a860: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a870: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
a880: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
a890: 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31   b, b.Length - 1
a8a0: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
a8b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a8c0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
a8d0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
a8e0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
a8f0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
a900: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
a910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a920: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
a930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
a940: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
a950: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
a960: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
a970: 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69 74 65  Bind_Blob(SQLite
a980: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
a990: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
a9a0: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
a9b0: 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 62   index, byte[] b
a9c0: 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d  lobData)..    {.
a9d0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
a9e0: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
a9f0: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
aa00: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69  lite_stmt;....#i
aa10: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
aa20: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
aa30: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
aa40: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
aa50: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
aa60: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
aa70: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
aa80: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
aa90: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
aaa0: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
aab0: 78 2c 20 62 6c 6f 62 44 61 74 61 29 3b 0d 0a 20  x, blobData);.. 
aac0: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
aad0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
aae0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
aaf0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
ab00: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
ab10: 5f 62 6c 6f 62 28 68 61 6e 64 6c 65 2c 20 69 6e  _blob(handle, in
ab20: 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20 62  dex, blobData, b
ab30: 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c 20  lobData.Length, 
ab40: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
ab50: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
ab60: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
ab70: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
ab80: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
ab90: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
aba0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
abb0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
abc0: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c  de void Bind_Nul
abd0: 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  l(SQLiteStatemen
abe0: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
abf0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
ac00: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  ags, int index).
ac10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
ac20: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
ac30: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
ac40: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
ac50: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
ac60: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
ac70: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
ac80: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
ac90: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
aca0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
acb0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
acc0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
acd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ace0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
acf0: 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  e, index);..    
ad00: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
ad10: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
ad20: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
ad30: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
ad40: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75  .sqlite3_bind_nu
ad50: 6c 6c 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  ll(handle, index
ad60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
ad70: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
ad80: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
ad90: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
ada0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
adb0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
adc0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
add0: 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f  erride int Bind_
ade0: 50 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c 69 74  ParamCount(SQLit
adf0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
ae00: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
ae10: 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20  nFlags flags).. 
ae20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
ae30: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
ae40: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
ae50: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
ae60: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 76 61 6c  .        int val
ae70: 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ue = UnsafeNativ
ae80: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ae90: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
aea0: 63 6f 75 6e 74 28 68 61 6e 64 6c 65 29 3b 0d 0a  count(handle);..
aeb0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
aec0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
aed0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
aee0: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
aef0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
af00: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
af10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
af20: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
af30: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
af40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
af50: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
af60: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
af70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
af80: 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
af90: 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
afa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
afb0: 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  Statement {0} pa
afc0: 72 61 6d 74 65 72 20 63 6f 75 6e 74 20 69 73 20  ramter count is 
afd0: 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  {1}.",..        
afe0: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
aff0: 74 50 74 72 2c 20 76 61 6c 75 65 29 29 3b 0d 0a  tPtr, value));..
b000: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b010: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
b020: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
b030: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b040: 64 65 20 73 74 72 69 6e 67 20 42 69 6e 64 5f 50  de string Bind_P
b050: 61 72 61 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53  aramName(SQLiteS
b060: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
b070: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
b080: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
b090: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
b0a0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
b0b0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
b0c0: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
b0d0: 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20  te_stmt;..      
b0e0: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 3b 0d 0a    string name;..
b0f0: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
b100: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
b110: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
b120: 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53    name = UTF8ToS
b130: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
b140: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
b150: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
b160: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 68 61  _name_interop(ha
b170: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 6f 75 74  ndle, index, out
b180: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
b190: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d  lse..        nam
b1a0: 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
b1b0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
b1c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
b1d0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
b1e0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 2c  (handle, index),
b1f0: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d   -1);..#endif...
b200: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
b210: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
b220: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
b230: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
b240: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
b250: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
b260: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  {..            I
b270: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
b280: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
b290: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
b2a0: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
b2b0: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
b2c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b2d0: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
b2e0: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
b2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
b300: 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72  tatement {0} par
b310: 61 6d 74 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20  amter #{1} name 
b320: 69 73 20 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20  is {{{2}}}.",.. 
b330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
b340: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
b350: 65 78 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20  ex, name));..   
b360: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b370: 20 20 72 65 74 75 72 6e 20 6e 61 6d 65 3b 0d 0a    return name;..
b380: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
b390: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
b3a0: 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64  nt Bind_ParamInd
b3b0: 65 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ex(SQLiteStateme
b3c0: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
b3d0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
b3e0: 6c 61 67 73 2c 20 73 74 72 69 6e 67 20 70 61 72  lags, string par
b3f0: 61 6d 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a  amName)..    {..
b400: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
b410: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
b420: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
b430: 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20  ite_stmt;..     
b440: 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 55     int index = U
b450: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b460: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
b470: 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28  parameter_index(
b480: 68 61 6e 64 6c 65 2c 20 54 6f 55 54 46 38 28 70  handle, ToUTF8(p
b490: 61 72 61 6d 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20  aramName));.... 
b4a0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
b4b0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
b4c0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
b4d0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
b4e0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
b4f0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
b500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
b510: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
b520: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
b530: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
b540: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
b550: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
b560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
b570: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
b580: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
b590: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61              "Sta
b5a0: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
b5b0: 74 65 72 20 69 6e 64 65 78 20 6f 66 20 6e 61 6d  ter index of nam
b5c0: 65 20 7b 7b 7b 31 7d 7d 7d 20 69 73 20 23 7b 32  e {{{1}}} is #{2
b5d0: 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
b5e0: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
b5f0: 74 72 2c 20 70 61 72 61 6d 4e 61 6d 65 2c 20 69  tr, paramName, i
b600: 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 20 20 20  ndex));..       
b610: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
b620: 74 75 72 6e 20 69 6e 64 65 78 3b 0d 0a 20 20 20  turn index;..   
b630: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
b640: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
b650: 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51 4c 69  ColumnCount(SQLi
b660: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
b670: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
b680: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
b690: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b6a0: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
b6b0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
b6c0: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
b6d0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
b6e0: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
b6f0: 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  nName(SQLiteStat
b700: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
b710: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
b720: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
b730: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
b740: 65 6e 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  en;..      IntPt
b750: 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  r p = UnsafeNati
b760: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
b770: 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e  3_column_name_in
b780: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
b790: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
b7a0: 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  out len);..#else
b7b0: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
b7c0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
b7d0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
b7e0: 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e  olumn_name(stmt.
b7f0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
b800: 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  dex);..#endif.. 
b810: 20 20 20 20 20 69 66 20 28 70 20 3d 3d 20 49 6e       if (p == In
b820: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
b830: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
b840: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 53 51  LiteException(SQ
b850: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f  LiteErrorCode.No
b860: 4d 65 6d 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  Mem, GetLastErro
b870: 72 28 29 29 3b 0d 0a 23 69 66 20 21 53 51 4c 49  r());..#if !SQLI
b880: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
b890: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
b8a0: 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d  String(p, len);.
b8b0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
b8c0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
b8d0: 67 28 70 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  g(p, -1);..#endi
b8e0: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
b8f0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
b900: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 43  e TypeAffinity C
b910: 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 53 51  olumnAffinity(SQ
b920: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
b930: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
b940: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
b950: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
b960: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b970: 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d 74  column_type(stmt
b980: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
b990: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ndex);..    }...
b9a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b9b0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f  erride string Co
b9c0: 6c 75 6d 6e 54 79 70 65 28 53 51 4c 69 74 65 53  lumnType(SQLiteS
b9d0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
b9e0: 6e 74 20 69 6e 64 65 78 2c 20 6f 75 74 20 54 79  nt index, out Ty
b9f0: 70 65 41 66 66 69 6e 69 74 79 20 6e 41 66 66 69  peAffinity nAffi
ba00: 6e 69 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nity)..    {..  
ba10: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69      int len;..#i
ba20: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
ba30: 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  RD..      IntPtr
ba40: 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   p = UnsafeNativ
ba50: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ba60: 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
ba70: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
ba80: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
ba90: 78 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23 65  x, out len);..#e
baa0: 6c 73 65 0d 0a 20 20 20 20 20 20 6c 65 6e 20 3d  lse..      len =
bab0: 20 2d 31 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50   -1;..      IntP
bac0: 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  tr p = UnsafeNat
bad0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
bae0: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
baf0: 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  pe(stmt._sqlite_
bb00: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23  stmt, index);..#
bb10: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 6e 41 66  endif..      nAf
bb20: 66 69 6e 69 74 79 20 3d 20 43 6f 6c 75 6d 6e 41  finity = ColumnA
bb30: 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e  ffinity(stmt, in
bb40: 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  dex);....      i
bb50: 66 20 28 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a  f (p != IntPtr.Z
bb60: 65 72 6f 29 20 72 65 74 75 72 6e 20 55 54 46 38  ero) return UTF8
bb70: 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29  ToString(p, len)
bb80: 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  ;..      else.. 
bb90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
bba0: 73 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74  string[] ar = st
bbb0: 6d 74 2e 54 79 70 65 44 65 66 69 6e 69 74 69 6f  mt.TypeDefinitio
bbc0: 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ns;..        if 
bbd0: 28 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  (ar != null)..  
bbe0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bbf0: 20 20 20 69 66 20 28 69 6e 64 65 78 20 3c 20 61     if (index < a
bc00: 72 2e 4c 65 6e 67 74 68 20 26 26 20 61 72 5b 69  r.Length && ar[i
bc10: 6e 64 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ndex] != null)..
bc20: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
bc30: 72 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20  rn ar[index];.. 
bc40: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
bc50: 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
bc60: 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  Empty;....      
bc70: 20 20 2f 2f 73 77 69 74 63 68 20 28 6e 41 66 66    //switch (nAff
bc80: 69 6e 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20  inity)..        
bc90: 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  //{..        // 
bca0: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
bcb0: 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20  ty.Int64:..     
bcc0: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
bcd0: 22 42 49 47 49 4e 54 22 3b 0d 0a 20 20 20 20 20  "BIGINT";..     
bce0: 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65     //  case Type
bcf0: 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a  Affinity.Double:
bd00: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
bd10: 72 65 74 75 72 6e 20 22 44 4f 55 42 4c 45 22 3b  return "DOUBLE";
bd20: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61  ..        //  ca
bd30: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
bd40: 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 2f  Blob:..        /
bd50: 2f 20 20 20 20 72 65 74 75 72 6e 20 22 42 4c 4f  /    return "BLO
bd60: 42 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  B";..        // 
bd70: 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
bd80: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
bd90: 22 54 45 58 54 22 3b 0d 0a 20 20 20 20 20 20 20  "TEXT";..       
bda0: 20 2f 2f 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20   //}..      }.. 
bdb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
bdc0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
bdd0: 74 20 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51  t ColumnIndex(SQ
bde0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
bdf0: 6d 74 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d  mt, string colum
be00: 6e 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  nName)..    {.. 
be10: 20 20 20 20 20 69 6e 74 20 78 20 3d 20 43 6f 6c       int x = Col
be20: 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d  umnCount(stmt);.
be30: 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e  ...      for (in
be40: 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20  t n = 0; n < x; 
be50: 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  n++)..      {.. 
be60: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
be70: 67 2e 43 6f 6d 70 61 72 65 28 63 6f 6c 75 6d 6e  g.Compare(column
be80: 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65  Name, ColumnName
be90: 28 73 74 6d 74 2c 20 6e 29 2c 20 53 74 72 69 6e  (stmt, n), Strin
bea0: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
beb0: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
bec0: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
bed0: 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20  return n;..     
bee0: 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   }..      return
bef0: 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   -1;..    }.... 
bf00: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
bf10: 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75  ride string Colu
bf20: 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53  mnOriginalName(S
bf30: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
bf40: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
bf50: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
bf60: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
bf70: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20      int len;..  
bf80: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
bf90: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
bfa0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
bfb0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69  te3_column_origi
bfc0: 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  n_name_interop(s
bfd0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
bfe0: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e  , index, out len
bff0: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
c000: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
c010: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
c020: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c030: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
c040: 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f  igin_name(stmt._
c050: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
c060: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
c070: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
c080: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
c090: 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 44  e string ColumnD
c0a0: 61 74 61 62 61 73 65 4e 61 6d 65 28 53 51 4c 69  atabaseName(SQLi
c0b0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
c0c0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
c0d0: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
c0e0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
c0f0: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
c100: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
c110: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
c120: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c130: 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
c140: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74  _name_interop(st
c150: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
c160: 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29   index, out len)
c170: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
c180: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
c190: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
c1a0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c1b0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
c1c0: 61 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74 2e  abase_name(stmt.
c1d0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
c1e0: 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
c1f0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
c200: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c210: 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
c220: 54 61 62 6c 65 4e 61 6d 65 28 53 51 4c 69 74 65  TableName(SQLite
c230: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
c240: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
c250: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
c260: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
c270: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72  nt len;..      r
c280: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
c290: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
c2a0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
c2b0: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
c2c0: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
c2d0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
c2e0: 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e  x, out len), len
c2f0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
c300: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
c310: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
c320: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c330: 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
c340: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
c350: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
c360: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
c370: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
c380: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
c390: 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 73  ColumnMetaData(s
c3a0: 74 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c 20  tring dataBase, 
c3b0: 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74  string table, st
c3c0: 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74  ring column, out
c3d0: 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70 65   string dataType
c3e0: 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c  , out string col
c3f0: 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20 6f 75  lateSequence, ou
c400: 74 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20  t bool notNull, 
c410: 6f 75 74 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79  out bool primary
c420: 4b 65 79 2c 20 6f 75 74 20 62 6f 6f 6c 20 61 75  Key, out bool au
c430: 74 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20 20  toIncrement)..  
c440: 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74    {..      IntPt
c450: 72 20 64 61 74 61 54 79 70 65 50 74 72 3b 0d 0a  r dataTypePtr;..
c460: 20 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c        IntPtr col
c470: 6c 53 65 71 50 74 72 3b 0d 0a 20 20 20 20 20 20  lSeqPtr;..      
c480: 69 6e 74 20 6e 6e 6f 74 4e 75 6c 6c 3b 0d 0a 20  int nnotNull;.. 
c490: 20 20 20 20 20 69 6e 74 20 6e 70 72 69 6d 61 72       int nprimar
c4a0: 79 4b 65 79 3b 0d 0a 20 20 20 20 20 20 69 6e 74  yKey;..      int
c4b0: 20 6e 61 75 74 6f 49 6e 63 3b 0d 0a 20 20 20 20   nautoInc;..    
c4c0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
c4d0: 65 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  e n;..      int 
c4e0: 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e  dtLen;..      in
c4f0: 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20  t csLen;....#if 
c500: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
c510: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
c520: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
c530: 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f  sqlite3_table_co
c540: 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 5f 69 6e  lumn_metadata_in
c550: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
c560: 46 38 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f  F8(dataBase), To
c570: 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55  UTF8(table), ToU
c580: 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74  TF8(column), out
c590: 20 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f 75   dataTypePtr, ou
c5a0: 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75  t collSeqPtr, ou
c5b0: 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20  t nnotNull, out 
c5c0: 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74  nprimaryKey, out
c5d0: 20 6e 61 75 74 6f 49 6e 63 2c 20 6f 75 74 20 64   nautoInc, out d
c5e0: 74 4c 65 6e 2c 20 6f 75 74 20 63 73 4c 65 6e 29  tLen, out csLen)
c5f0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
c600: 64 74 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20  dtLen = -1;..   
c610: 20 20 20 63 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a     csLen = -1;..
c620: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
c630: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
c640: 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f  sqlite3_table_co
c650: 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 5f 73  lumn_metadata(_s
c660: 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42  ql, ToUTF8(dataB
c670: 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62  ase), ToUTF8(tab
c680: 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75  le), ToUTF8(colu
c690: 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79 70  mn), out dataTyp
c6a0: 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65  ePtr, out collSe
c6b0: 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75  qPtr, out nnotNu
c6c0: 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72 79  ll, out nprimary
c6d0: 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e  Key, out nautoIn
c6e0: 63 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  c);..#endif..   
c6f0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
c700: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
c710: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
c720: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
c730: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
c740: 0a 20 20 20 20 20 20 64 61 74 61 54 79 70 65 20  .      dataType 
c750: 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 64  = UTF8ToString(d
c760: 61 74 61 54 79 70 65 50 74 72 2c 20 64 74 4c 65  ataTypePtr, dtLe
c770: 6e 29 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61  n);..      colla
c780: 74 65 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46  teSequence = UTF
c790: 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 53 65  8ToString(collSe
c7a0: 71 50 74 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d  qPtr, csLen);...
c7b0: 0a 20 20 20 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d  .      notNull =
c7c0: 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29   (nnotNull == 1)
c7d0: 3b 0d 0a 20 20 20 20 20 20 70 72 69 6d 61 72 79  ;..      primary
c7e0: 4b 65 79 20 3d 20 28 6e 70 72 69 6d 61 72 79 4b  Key = (nprimaryK
c7f0: 65 79 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20  ey == 1);..     
c800: 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20 3d   autoIncrement =
c810: 20 28 6e 61 75 74 6f 49 6e 63 20 3d 3d 20 31 29   (nautoInc == 1)
c820: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
c830: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
c840: 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62  e double GetDoub
c850: 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  le(SQLiteStateme
c860: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
c870: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
c880: 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d    double value;.
c890: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
c8a0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
c8b0: 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55  .      value = U
c8c0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
c8d0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
c8e0: 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73  n_double(stmt._s
c8f0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
c900: 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  x);..#elif !SQLI
c910: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
c920: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
c930: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
c940: 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74  olumn_double_int
c950: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
c960: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
c970: 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ut value);..#els
c980: 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
c990: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
c9a0: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
c9b0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74  endif..      ret
c9c0: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
c9d0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
c9e0: 6c 20 6f 76 65 72 72 69 64 65 20 73 62 79 74 65  l override sbyte
c9f0: 20 47 65 74 53 42 79 74 65 28 53 51 4c 69 74 65   GetSByte(SQLite
ca00: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
ca10: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
ca20: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
ca30: 75 6e 63 68 65 63 6b 65 64 28 28 73 62 79 74 65  unchecked((sbyte
ca40: 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  )(GetInt32(stmt,
ca50: 20 69 6e 64 65 78 29 20 26 20 62 79 74 65 2e 4d   index) & byte.M
ca60: 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  axValue));..    
ca70: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
ca80: 6c 20 6f 76 65 72 72 69 64 65 20 62 79 74 65 20  l override byte 
ca90: 47 65 74 42 79 74 65 28 53 51 4c 69 74 65 53 74  GetByte(SQLiteSt
caa0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
cab0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
cac0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e  .      return un
cad0: 63 68 65 63 6b 65 64 28 28 62 79 74 65 29 28 47  checked((byte)(G
cae0: 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
caf0: 64 65 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56  dex) & byte.MaxV
cb00: 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  alue));..    }..
cb10: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
cb20: 76 65 72 72 69 64 65 20 73 68 6f 72 74 20 47 65  verride short Ge
cb30: 74 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61  tInt16(SQLiteSta
cb40: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
cb50: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
cb60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63        return unc
cb70: 68 65 63 6b 65 64 28 28 73 68 6f 72 74 29 28 47  hecked((short)(G
cb80: 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
cb90: 64 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61  dex) & ushort.Ma
cba0: 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d  xValue));..    }
cbb0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
cbc0: 20 6f 76 65 72 72 69 64 65 20 75 73 68 6f 72 74   override ushort
cbd0: 20 47 65 74 55 49 6e 74 31 36 28 53 51 4c 69 74   GetUInt16(SQLit
cbe0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
cbf0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
cc00: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
cc10: 20 75 6e 63 68 65 63 6b 65 64 28 28 75 73 68 6f   unchecked((usho
cc20: 72 74 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d  rt)(GetInt32(stm
cc30: 74 2c 20 69 6e 64 65 78 29 20 26 20 75 73 68 6f  t, index) & usho
cc40: 72 74 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a  rt.MaxValue));..
cc50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
cc60: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
cc70: 6e 74 20 47 65 74 49 6e 74 33 32 28 53 51 4c 69  nt GetInt32(SQLi
cc80: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
cc90: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
cca0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
ccb0: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
ccc0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
ccd0: 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f 73  lumn_int(stmt._s
cce0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
ccf0: 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  x);..    }....  
cd00: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
cd10: 69 64 65 20 75 69 6e 74 20 47 65 74 55 49 6e 74  ide uint GetUInt
cd20: 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  32(SQLiteStateme
cd30: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
cd40: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
cd50: 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
cd60: 65 64 28 28 75 69 6e 74 29 47 65 74 49 6e 74 33  ed((uint)GetInt3
cd70: 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b  2(stmt, index));
cd80: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
cd90: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
cda0: 20 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34 28 53   long GetInt64(S
cdb0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
cdc0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
cdd0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c 6f  .    {..      lo
cde0: 6e 67 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21  ng value;..#if !
cdf0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
ce00: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
ce10: 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e   value = UnsafeN
ce20: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
ce30: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
ce40: 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  4(stmt._sqlite_s
ce50: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
ce60: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
ce70: 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61  DARD..      Unsa
ce80: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
ce90: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
cea0: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d  nt64_interop(stm
ceb0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
cec0: 69 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c 75 65  index, out value
ced0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
cee0: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
cef0: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
cf00: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
cf10: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
cf20: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
cf30: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
cf40: 64 65 20 75 6c 6f 6e 67 20 47 65 74 55 49 6e 74  de ulong GetUInt
cf50: 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
cf60: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
cf70: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
cf80: 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
cf90: 65 64 28 28 75 6c 6f 6e 67 29 47 65 74 49 6e 74  ed((ulong)GetInt
cfa0: 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  64(stmt, index))
cfb0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
cfc0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
cfd0: 65 20 73 74 72 69 6e 67 20 47 65 74 54 65 78 74  e string GetText
cfe0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
cff0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
d000: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
d010: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
d020: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
d030: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
d040: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
d050: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d060: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
d070: 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  t_interop(stmt._
d080: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
d090: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
d0a0: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
d0b0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
d0c0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
d0d0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d0e0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74  3_column_text(st
d0f0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
d100: 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20 20   index),..      
d110: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
d120: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
d130: 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e  lumn_bytes(stmt.
d140: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
d150: 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  dex));..#endif..
d160: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d170: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 44  ernal override D
d180: 61 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54  ateTime GetDateT
d190: 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ime(SQLiteStatem
d1a0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
d1b0: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
d1c0: 20 20 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65     if (_datetime
d1d0: 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65  Format == SQLite
d1e0: 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b  DateFormats.Tick
d1f0: 73 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  s)..        retu
d200: 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 47 65  rn ToDateTime(Ge
d210: 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
d220: 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69  ex), _datetimeKi
d230: 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65  nd);..      else
d240: 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46 6f   if (_datetimeFo
d250: 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44 61  rmat == SQLiteDa
d260: 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e  teFormats.Julian
d270: 44 61 79 29 0d 0a 20 20 20 20 20 20 20 20 72 65  Day)..        re
d280: 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28  turn ToDateTime(
d290: 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20  GetDouble(stmt, 
d2a0: 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d  index), _datetim
d2b0: 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65  eKind);..      e
d2c0: 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d  lse if (_datetim
d2d0: 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74  eFormat == SQLit
d2e0: 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69  eDateFormats.Uni
d2f0: 78 45 70 6f 63 68 29 0d 0a 20 20 20 20 20 20 20  xEpoch)..       
d300: 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69   return ToDateTi
d310: 6d 65 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74  me(GetInt32(stmt
d320: 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74  , index), _datet
d330: 69 6d 65 4b 69 6e 64 29 3b 0d 0a 0d 0a 23 69 66  imeKind);....#if
d340: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
d350: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
d360: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
d370: 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66  ToDateTime(Unsaf
d380: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
d390: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
d3a0: 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  xt_interop(stmt.
d3b0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
d3c0: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  dex, out len), l
d3d0: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
d3e0: 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65     return ToDate
d3f0: 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76  Time(UnsafeNativ
d400: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
d410: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d  _column_text(stm
d420: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
d430: 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20 20 20  index),..       
d440: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d450: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
d460: 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f  umn_bytes(stmt._
d470: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
d480: 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ex));..#endif.. 
d490: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d4a0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
d4b0: 6e 67 20 47 65 74 42 79 74 65 73 28 53 51 4c 69  ng GetBytes(SQLi
d4c0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
d4d0: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74  , int index, int
d4e0: 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79   nDataOffset, by
d4f0: 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20  te[] bDest, int 
d500: 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e  nStart, int nLen
d510: 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  gth)..    {..   
d520: 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e     int nlen = Un
d530: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d540: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
d550: 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c  _bytes(stmt._sql
d560: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
d570: 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66  ;....      // If
d580: 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20   no destination 
d590: 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74  buffer, return t
d5a0: 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d  he size needed..
d5b0: 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74  .      if (bDest
d5c0: 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
d5d0: 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20   nlen;....      
d5e0: 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c  int nCopied = nL
d5f0: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
d600: 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53  if (nCopied + nS
d610: 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e  tart > bDest.Len
d620: 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62  gth) nCopied = b
d630: 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53  Dest.Length - nS
d640: 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20  tart;..      if 
d650: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61  (nCopied + nData
d660: 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e  Offset > nlen) n
d670: 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20  Copied = nlen - 
d680: 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a  nDataOffset;....
d690: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
d6a0: 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d  d > 0)..      {.
d6b0: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
d6c0: 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ptr = UnsafeNati
d6d0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d6e0: 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74  3_column_blob(st
d6f0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
d700: 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20   index);....    
d710: 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79      Marshal.Copy
d720: 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f  ((IntPtr)(ptr.To
d730: 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f  Int64() + nDataO
d740: 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e  ffset), bDest, n
d750: 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b  Start, nCopied);
d760: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
d770: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a   else..      {..
d780: 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20          nCopied 
d790: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  = 0;..      }...
d7a0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43  .      return nC
d7b0: 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  opied;..    }...
d7c0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d7d0: 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 43  erride long GetC
d7e0: 68 61 72 73 28 53 51 4c 69 74 65 53 74 61 74 65  hars(SQLiteState
d7f0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
d800: 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f  ndex, int nDataO
d810: 66 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62 44  ffset, char[] bD
d820: 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c  est, int nStart,
d830: 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20   int nLength).. 
d840: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
d850: 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  nlen;..      int
d860: 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67   nCopied = nLeng
d870: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 74 72  th;....      str
d880: 69 6e 67 20 73 74 72 20 3d 20 47 65 74 54 65 78  ing str = GetTex
d890: 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  t(stmt, index);.
d8a0: 0a 20 20 20 20 20 20 6e 6c 65 6e 20 3d 20 73 74  .      nlen = st
d8b0: 72 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20  r.Length;....   
d8c0: 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20     if (bDest == 
d8d0: 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65  null) return nle
d8e0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  n;....      if (
d8f0: 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74  nCopied + nStart
d900: 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29   > bDest.Length)
d910: 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74   nCopied = bDest
d920: 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74  .Length - nStart
d930: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ;..      if (nCo
d940: 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73  pied + nDataOffs
d950: 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69  et > nlen) nCopi
d960: 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74  ed = nlen - nDat
d970: 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20  aOffset;....    
d980: 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20    if (nCopied > 
d990: 30 29 0d 0a 20 20 20 20 20 20 20 20 73 74 72 2e  0)..        str.
d9a0: 43 6f 70 79 54 6f 28 6e 44 61 74 61 4f 66 66 73  CopyTo(nDataOffs
d9b0: 65 74 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72  et, bDest, nStar
d9c0: 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20  t, nCopied);..  
d9d0: 20 20 20 20 65 6c 73 65 20 6e 43 6f 70 69 65 64      else nCopied
d9e0: 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72   = 0;....      r
d9f0: 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a  eturn nCopied;..
da00: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
da10: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
da20: 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74  ool IsNull(SQLit
da30: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
da40: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
da50: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
da60: 20 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79   (ColumnAffinity
da70: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 3d 3d  (stmt, index) ==
da80: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75   TypeAffinity.Nu
da90: 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ll);..    }.... 
daa0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
dab0: 72 69 64 65 20 69 6e 74 20 41 67 67 72 65 67 61  ride int Aggrega
dac0: 74 65 43 6f 75 6e 74 28 49 6e 74 50 74 72 20 63  teCount(IntPtr c
dad0: 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
dae0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
daf0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
db00: 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61  .sqlite3_aggrega
db10: 74 65 5f 63 6f 75 6e 74 28 63 6f 6e 74 65 78 74  te_count(context
db20: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
db30: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
db40: 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 46 75  de void CreateFu
db50: 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74  nction(string st
db60: 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e  rFunction, int n
db70: 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43  Args, bool needC
db80: 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65 43 61  ollSeq, SQLiteCa
db90: 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c  llback func, SQL
dba0: 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  iteCallback func
dbb0: 73 74 65 70 2c 20 53 51 4c 69 74 65 46 69 6e 61  step, SQLiteFina
dbc0: 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69  lCallback funcfi
dbd0: 6e 61 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  nal)..    {..   
dbe0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
dbf0: 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  de n;....#if !SQ
dc00: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
dc10: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
dc20: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
dc30: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
dc40: 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71  tion_interop(_sq
dc50: 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
dc60: 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34  ction), nArgs, 4
dc70: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
dc80: 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
dc90: 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43  uncfinal, (needC
dca0: 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20  ollSeq == true) 
dcb0: 3f 20 31 20 3a 20 30 29 3b 0d 0a 20 20 20 20 20  ? 1 : 0);..     
dcc0: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
dcd0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20  ErrorCode.Ok) n 
dce0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
dcf0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
dd00: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e  eate_function_in
dd10: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
dd20: 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c  F8(strFunction),
dd30: 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74   nArgs, 1, IntPt
dd40: 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75  r.Zero, func, fu
dd50: 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61  ncstep, funcfina
dd60: 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20  l, (needCollSeq 
dd70: 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30  == true) ? 1 : 0
dd80: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
dd90: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
dda0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ddb0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
ddc0: 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
ddd0: 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67  rFunction), nArg
dde0: 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72  s, 4, IntPtr.Zer
ddf0: 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65  o, func, funcste
de00: 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a  p, funcfinal);..
de10: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
de20: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
de30: 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  k) n = UnsafeNat
de40: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
de50: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
de60: 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  on(_sql, ToUTF8(
de70: 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41  strFunction), nA
de80: 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a  rgs, 1, IntPtr.Z
de90: 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ero, func, funcs
dea0: 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b  tep, funcfinal);
deb0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
dec0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
ded0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
dee0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
def0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
df00: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
df10: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
df20: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
df30: 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28  CreateCollation(
df40: 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74  string strCollat
df50: 69 6f 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61  ion, SQLiteColla
df60: 74 69 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74  tion func, SQLit
df70: 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31  eCollation func1
df80: 36 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  6)..    {..     
df90: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
dfa0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
dfb0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
dfc0: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
dfd0: 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  n(_sql, ToUTF8(s
dfe0: 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c  trCollation), 2,
dff0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
e000: 6e 63 31 36 29 3b 0d 0a 20 20 20 20 20 20 69 66  nc16);..      if
e010: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
e020: 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55  orCode.Ok) n = U
e030: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
e040: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
e050: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c  e_collation(_sql
e060: 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c  , ToUTF8(strColl
e070: 61 74 69 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74  ation), 1, IntPt
e080: 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a  r.Zero, func);..
e090: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
e0a0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
e0b0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
e0c0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
e0d0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
e0e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
e0f0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
e100: 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c   int ContextColl
e110: 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61  ateCompare(Colla
e120: 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
e130: 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e   enc, IntPtr con
e140: 74 65 78 74 2c 20 73 74 72 69 6e 67 20 73 31 2c  text, string s1,
e150: 20 73 74 72 69 6e 67 20 73 32 29 0d 0a 20 20 20   string s2)..   
e160: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
e170: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
e180: 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20  byte[] b1;..    
e190: 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20    byte[] b2;..  
e1a0: 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e      System.Text.
e1b0: 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74  Encoding convert
e1c0: 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  er = null;....  
e1d0: 20 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29      switch (enc)
e1e0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
e1f0: 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
e200: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
e210: 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  F8:..          c
e220: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
e230: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
e240: 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  UTF8;..         
e250: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
e260: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
e270: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31  ncodingEnum.UTF1
e280: 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  6LE:..          
e290: 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
e2a0: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
e2b0: 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20  .Unicode;..     
e2c0: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
e2d0: 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
e2e0: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
e2f0: 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20  UTF16BE:..      
e300: 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
e310: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
e320: 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e  ding.BigEndianUn
e330: 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20  icode;..        
e340: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
e350: 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20  }....      b1 = 
e360: 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  converter.GetByt
e370: 65 73 28 73 31 29 3b 0d 0a 20 20 20 20 20 20 62  es(s1);..      b
e380: 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65  2 = converter.Ge
e390: 74 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a 20  tBytes(s2);.... 
e3a0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
e3b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e3c0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f  sqlite3_context_
e3d0: 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65  collcompare_inte
e3e0: 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c  rop(context, b1,
e3f0: 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20   b1.Length, b2, 
e400: 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c  b2.Length);..#el
e410: 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
e420: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
e430: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
e440: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
e450: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
e460: 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65  erride int Conte
e470: 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65  xtCollateCompare
e480: 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69  (CollationEncodi
e490: 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50  ngEnum enc, IntP
e4a0: 74 72 20 63 6f 6e 74 65 78 74 2c 20 63 68 61 72  tr context, char
e4b0: 5b 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20 63 32  [] c1, char[] c2
e4c0: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
e4d0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
e4e0: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b        byte[] b1;
e4f0: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
e500: 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d  2;..      System
e510: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63  .Text.Encoding c
e520: 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b  onverter = null;
e530: 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68  ....      switch
e540: 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d   (enc)..      {.
e550: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
e560: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
e570: 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20  num.UTF8:..     
e580: 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
e590: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
e5a0: 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20  oding.UTF8;..   
e5b0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
e5c0: 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
e5d0: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
e5e0: 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20  m.UTF16LE:..    
e5f0: 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
e600: 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
e610: 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d  coding.Unicode;.
e620: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
e630: 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
e640: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
e650: 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a  gEnum.UTF16BE:..
e660: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
e670: 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
e680: 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e  t.Encoding.BigEn
e690: 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20  dianUnicode;..  
e6a0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
e6b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
e6c0: 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e   b1 = converter.
e6d0: 47 65 74 42 79 74 65 73 28 63 31 29 3b 0d 0a 20  GetBytes(c1);.. 
e6e0: 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72       b2 = conver
e6f0: 74 65 72 2e 47 65 74 42 79 74 65 73 28 63 32 29  ter.GetBytes(c2)
e700: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
e710: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
e720: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
e730: 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72  ntext_collcompar
e740: 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78  e_interop(contex
e750: 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68  t, b1, b1.Length
e760: 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29  , b2, b2.Length)
e770: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
e780: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
e790: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
e7a0: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
e7b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
e7c0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 43 6f 6c  nal override Col
e7d0: 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 47  lationSequence G
e7e0: 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65  etCollationSeque
e7f0: 6e 63 65 28 53 51 4c 69 74 65 46 75 6e 63 74 69  nce(SQLiteFuncti
e800: 6f 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 20  on func, IntPtr 
e810: 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d  context)..    {.
e820: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
e830: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 43 6f 6c  NDARD..      Col
e840: 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 73  lationSequence s
e850: 65 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74 69  eq = new Collati
e860: 6f 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a 20  onSequence();.. 
e870: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20       int len;.. 
e880: 20 20 20 20 20 69 6e 74 20 74 79 70 65 3b 0d 0a       int type;..
e890: 20 20 20 20 20 20 69 6e 74 20 65 6e 63 3b 0d 0a        int enc;..
e8a0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d        IntPtr p =
e8b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
e8c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
e8d0: 74 65 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74  text_collseq_int
e8e0: 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 6f 75  erop(context, ou
e8f0: 74 20 74 79 70 65 2c 20 6f 75 74 20 65 6e 63 2c  t type, out enc,
e900: 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20   out len);....  
e910: 20 20 20 20 69 66 20 28 70 20 21 3d 20 6e 75 6c      if (p != nul
e920: 6c 29 20 73 65 71 2e 4e 61 6d 65 20 3d 20 55 54  l) seq.Name = UT
e930: 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65  F8ToString(p, le
e940: 6e 29 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 54  n);..      seq.T
e950: 79 70 65 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e  ype = (Collation
e960: 54 79 70 65 45 6e 75 6d 29 74 79 70 65 3b 0d 0a  TypeEnum)type;..
e970: 20 20 20 20 20 20 73 65 71 2e 5f 66 75 6e 63 20        seq._func 
e980: 3d 20 66 75 6e 63 3b 0d 0a 20 20 20 20 20 20 73  = func;..      s
e990: 65 71 2e 45 6e 63 6f 64 69 6e 67 20 3d 20 28 43  eq.Encoding = (C
e9a0: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
e9b0: 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20 20  Enum)enc;....   
e9c0: 20 20 20 72 65 74 75 72 6e 20 73 65 71 3b 0d 0a     return seq;..
e9d0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
e9e0: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
e9f0: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
ea00: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
ea10: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
ea20: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
ea30: 65 74 50 61 72 61 6d 56 61 6c 75 65 42 79 74 65  etParamValueByte
ea40: 73 28 49 6e 74 50 74 72 20 70 2c 20 69 6e 74 20  s(IntPtr p, int 
ea50: 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74  nDataOffset, byt
ea60: 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  e[] bDest, int n
ea70: 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
ea80: 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
ea90: 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73    int nlen = Uns
eaa0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
eab0: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  .sqlite3_value_b
eac0: 79 74 65 73 28 70 29 3b 0d 0a 0d 0a 20 20 20 20  ytes(p);....    
ead0: 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69    // If no desti
eae0: 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72  nation buffer, r
eaf0: 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e  eturn the size n
eb00: 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66  eeded...      if
eb10: 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29   (bDest == null)
eb20: 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d   return nlen;...
eb30: 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69  .      int nCopi
eb40: 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d  ed = nLength;...
eb50: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
eb60: 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44  ed + nStart > bD
eb70: 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70  est.Length) nCop
eb80: 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67  ied = bDest.Leng
eb90: 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20  th - nStart;..  
eba0: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
ebb0: 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20  + nDataOffset > 
ebc0: 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20  nlen) nCopied = 
ebd0: 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73  nlen - nDataOffs
ebe0: 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  et;....      if 
ebf0: 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20  (nCopied > 0).. 
ec00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ec10: 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73  IntPtr ptr = Uns
ec20: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
ec30: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  .sqlite3_value_b
ec40: 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20  lob(p);....     
ec50: 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28     Marshal.Copy(
ec60: 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49  (IntPtr)(ptr.ToI
ec70: 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66  nt64() + nDataOf
ec80: 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53  fset), bDest, nS
ec90: 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d  tart, nCopied);.
eca0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
ecb0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  else..      {.. 
ecc0: 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d         nCopied =
ecd0: 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a   0;..      }....
ece0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f        return nCo
ecf0: 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  pied;..    }....
ed00: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
ed10: 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74  rride double Get
ed20: 50 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65  ParamValueDouble
ed30: 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
ed40: 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c    {..      doubl
ed50: 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50  e value;..#if !P
ed60: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
ed70: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
ed80: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
ed90: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
eda0: 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65  te3_value_double
edb0: 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53  (ptr);..#elif !S
edc0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
edd0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
ede0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
edf0: 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69  3_value_double_i
ee00: 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20  nterop(ptr, out 
ee10: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
ee20: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
ee30: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
ee40: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
ee50: 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  if..      return
ee60: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a   value;..    }..
ee70: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ee80: 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 50  verride int GetP
ee90: 61 72 61 6d 56 61 6c 75 65 49 6e 74 33 32 28 49  aramValueInt32(I
eea0: 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
eeb0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
eec0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
eed0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
eee0: 65 5f 69 6e 74 28 70 74 72 29 3b 0d 0a 20 20 20  e_int(ptr);..   
eef0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
ef00: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
ef10: 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e   GetParamValueIn
ef20: 74 36 34 28 49 6e 74 50 74 72 20 70 74 72 29 0d  t64(IntPtr ptr).
ef30: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e  .    {..      In
ef40: 74 36 34 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20  t64 value;..#if 
ef50: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
ef60: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
ef70: 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65    value = Unsafe
ef80: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ef90: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36  lite3_value_int6
efa0: 34 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21  4(ptr);..#elif !
efb0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
efc0: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
efd0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
efe0: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69  e3_value_int64_i
eff0: 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20  nterop(ptr, out 
f000: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
f010: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
f020: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
f030: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
f040: 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  if..      return
f050: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a   value;..    }..
f060: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
f070: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
f080: 65 74 50 61 72 61 6d 56 61 6c 75 65 54 65 78 74  etParamValueText
f090: 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
f0a0: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
f0b0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
f0c0: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
f0d0: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
f0e0: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
f0f0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
f100: 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65  _value_text_inte
f110: 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 6c 65 6e  rop(ptr, out len
f120: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
f130: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
f140: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
f150: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
f160: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
f170: 74 28 70 74 72 29 2c 0d 0a 20 20 20 20 20 20 20  t(ptr),..       
f180: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f190: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
f1a0: 75 65 5f 62 79 74 65 73 28 70 74 72 29 29 3b 0d  ue_bytes(ptr));.
f1b0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
f1c0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
f1d0: 76 65 72 72 69 64 65 20 54 79 70 65 41 66 66 69  verride TypeAffi
f1e0: 6e 69 74 79 20 47 65 74 50 61 72 61 6d 56 61 6c  nity GetParamVal
f1f0: 75 65 54 79 70 65 28 49 6e 74 50 74 72 20 70 74  ueType(IntPtr pt
f200: 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  r)..    {..     
f210: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
f220: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f230: 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70  te3_value_type(p
f240: 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
f250: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
f260: 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
f270: 42 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e 74  Blob(IntPtr cont
f280: 65 78 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75  ext, byte[] valu
f290: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
f2a0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f2b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
f2c0: 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e 74 65 78 74  ult_blob(context
f2d0: 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75 65 2e 4c  , value, value.L
f2e0: 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28  ength, (IntPtr)(
f2f0: 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  -1));..    }....
f300: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
f310: 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
f320: 6e 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 63  nDouble(IntPtr c
f330: 6f 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65 20 76  ontext, double v
f340: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  alue)..    {..#i
f350: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
f360: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
f370: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
f380: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
f390: 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f  result_double(co
f3a0: 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
f3b0: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
f3c0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e  ANDARD..      Un
f3d0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f3e0: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
f3f0: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
f400: 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c  context, ref val
f410: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
f420: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
f430: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
f440: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
f450: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
f460: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
f470: 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72 6f 72  void ReturnError
f480: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
f490: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a   string value)..
f4a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
f4b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
f4c0: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
f4d0: 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 54  error(context, T
f4e0: 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20 76 61  oUTF8(value), va
f4f0: 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  lue.Length);..  
f500: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
f510: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
f520: 64 20 52 65 74 75 72 6e 49 6e 74 33 32 28 49 6e  d ReturnInt32(In
f530: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e  tPtr context, in
f540: 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  t value)..    {.
f550: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
f560: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
f570: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f  e3_result_int(co
f580: 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
f590: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
f5a0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
f5b0: 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36 34 28  oid ReturnInt64(
f5c0: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
f5d0: 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  long value)..   
f5e0: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
f5f0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
f600: 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RK..      Unsafe
f610: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f620: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
f630: 36 34 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75  64(context, valu
f640: 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
f650: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
f660: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
f670: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
f680: 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65  esult_int64_inte
f690: 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66  rop(context, ref
f6a0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
f6b0: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
f6c0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
f6d0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
f6e0: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
f6f0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
f700: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 4e  ide void ReturnN
f710: 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ull(IntPtr conte
f720: 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  xt)..    {..    
f730: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
f740: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
f750: 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78  sult_null(contex
f760: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
f770: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
f780: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 54  ide void ReturnT
f790: 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ext(IntPtr conte
f7a0: 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  xt, string value
f7b0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
f7c0: 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
f7d0: 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  8(value);..     
f7e0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f7f0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
f800: 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74  ult_text(context
f810: 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c  , ToUTF8(value),
f820: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28   b.Length - 1, (
f830: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
f840: 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45     }....#if INTE
f850: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
f860: 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  E..    /// <summ
f870: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61  ary>..    /// Ca
f880: 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53  lls the native S
f890: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
f8a0: 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  ry in order to c
f8b0: 72 65 61 74 65 20 61 20 64 69 73 70 6f 73 61 62  reate a disposab
f8c0: 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 6d 6f 64 75  le..    /// modu
f8d0: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
f8e0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
f8f0: 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
f900: 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ble...    /// </
f910: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
f920: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
f930: 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  odule">..    ///
f940: 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65   The module obje
f950: 63 74 20 74 6f 20 62 65 20 75 73 65 64 20 77 68  ct to be used wh
f960: 65 6e 20 63 72 65 61 74 69 6e 67 20 74 68 65 20  en creating the 
f970: 6e 61 74 69 76 65 20 64 69 73 70 6f 73 61 62 6c  native disposabl
f980: 65 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 2f  e module...    /
f990: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
f9a0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
f9b0: 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f  ="flags">..    /
f9c0: 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 66 6f 72  // The flags for
f9d0: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
f9e0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
f9f0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20  eConnection" /> 
fa00: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
fa10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
fa20: 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
fa30: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
fa40: 72 65 61 74 65 4d 6f 64 75 6c 65 28 53 51 4c 69  reateModule(SQLi
fa50: 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c  teModule module,
fa60: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
fa70: 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20  nFlags flags).. 
fa80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
fa90: 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
faa0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
fab0: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
fac0: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
fad0: 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20  module");....   
fae0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
faf0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
fb00: 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64  onFlags.NoLogMod
fb10: 75 6c 65 29 20 21 3d 20 53 51 4c 69 74 65 43 6f  ule) != SQLiteCo
fb20: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
fb30: 4c 6f 67 4d 6f 64 75 6c 65 29 0d 0a 20 20 20 20  LogModule)..    
fb40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
fb50: 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 72 72     module.LogErr
fb60: 6f 72 73 20 3d 20 28 28 66 6c 61 67 73 20 26 20  ors = ((flags & 
fb70: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
fb80: 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45  Flags.LogModuleE
fb90: 72 72 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65 43  rror) == SQLiteC
fba0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
fbb0: 6f 67 4d 6f 64 75 6c 65 45 72 72 6f 72 29 3b 0d  ogModuleError);.
fbc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64  .            mod
fbd0: 75 6c 65 2e 4c 6f 67 45 78 63 65 70 74 69 6f 6e  ule.LogException
fbe0: 73 20 3d 20 28 28 66 6c 61 67 73 20 26 20 53 51  s = ((flags & SQ
fbf0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
fc00: 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63  ags.LogModuleExc
fc10: 65 70 74 69 6f 6e 29 20 3d 3d 20 53 51 4c 69 74  eption) == SQLit
fc20: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
fc30: 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70 74  .LogModuleExcept
fc40: 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ion);..        }
fc50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
fc60: 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
fc70: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
fc80: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
fc90: 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e  tion("connection
fca0: 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
fcb0: 68 61 6e 64 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20  handle");....   
fcc0: 20 20 20 20 20 53 65 74 4c 6f 61 64 45 78 74 65       SetLoadExte
fcd0: 6e 73 69 6f 6e 28 74 72 75 65 29 3b 0d 0a 20 20  nsion(true);..  
fce0: 20 20 20 20 20 20 4c 6f 61 64 45 78 74 65 6e 73        LoadExtens
fcf0: 69 6f 6e 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ion(UnsafeNative
fd00: 4d 65 74 68 6f 64 73 2e 53 51 4c 49 54 45 5f 44  Methods.SQLITE_D
fd10: 4c 4c 2c 20 22 73 71 6c 69 74 65 33 5f 76 74 73  LL, "sqlite3_vts
fd20: 68 69 6d 5f 69 6e 69 74 22 29 3b 0d 0a 0d 0a 20  him_init");.... 
fd30: 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
fd40: 65 2e 43 72 65 61 74 65 44 69 73 70 6f 73 61 62  e.CreateDisposab
fd50: 6c 65 4d 6f 64 75 6c 65 28 5f 73 71 6c 29 29 0d  leModule(_sql)).
fd60: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
fd70: 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f 64          if (_mod
fd80: 75 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ules == null).. 
fd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
fda0: 6d 6f 64 75 6c 65 73 20 3d 20 6e 65 77 20 44 69  modules = new Di
fdb0: 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
fdc0: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 28 29   SQLiteModule>()
fdd0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
fde0: 20 5f 6d 6f 64 75 6c 65 73 2e 41 64 64 28 6d 6f   _modules.Add(mo
fdf0: 64 75 6c 65 2e 4e 61 6d 65 2c 20 6d 6f 64 75 6c  dule.Name, modul
fe00: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
fe10: 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29     if (_usePool)
fe20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
fe30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fe40: 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73   _usePool = fals
fe50: 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  e;....#if !NET_C
fe60: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
fe70: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
fe80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
fe90: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53  race.WriteLine(S
fea0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43 72  tring.Format("Cr
feb0: 65 61 74 65 4d 6f 64 75 6c 65 20 28 50 6f 6f 6c  eateModule (Pool
fec0: 29 20 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d 22  ) Disabled: {0}"
fed0: 2c 20 5f 73 71 6c 29 29 3b 0d 0a 23 65 6e 64 69  , _sql));..#endi
fee0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  f..            }
fef0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
ff00: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
ff10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ff20: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
ff30: 74 65 45 78 63 65 70 74 69 6f 6e 28 47 65 74 4c  teException(GetL
ff40: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
ff50: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
ff60: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
ff70: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c  ry>..    /// Cal
ff80: 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51  ls the native SQ
ff90: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
ffa0: 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6c  y in order to cl
ffb0: 65 61 6e 75 70 20 74 68 65 20 72 65 73 6f 75 72  eanup the resour
ffc0: 63 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73  ces..    /// ass
ffd0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 6d  ociated with a m
ffe0: 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  odule containing
fff0: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
10000 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ion of a virtual
10010 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f   table...    ///
10020 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
10030 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
10040 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20  ="module">..    
10050 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f  /// The module o
10060 62 6a 65 63 74 20 70 72 65 76 69 6f 75 73 6c 79  bject previously
10070 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 3c   passed to the <
10080 73 65 65 20 63 72 65 66 3d 22 43 72 65 61 74 65  see cref="Create
10090 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20 20  Module" />..    
100a0 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20  /// method...   
100b0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
100c0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
100d0 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20  me="flags">..   
100e0 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 66   /// The flags f
100f0 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  or the associate
10100 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  d <see cref="SQL
10110 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f  iteConnection" /
10120 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
10130 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
10140 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
10150 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
10160 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 28 53   DisposeModule(S
10170 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
10180 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  le, SQLiteConnec
10190 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29  tionFlags flags)
101a0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
101b0 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
101c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
101d0 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
101e0 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
101f0 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a  n("module");....
10200 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44          module.D
10210 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 7d  ispose();..    }
10220 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
10230 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
10240 65 20 49 6e 74 50 74 72 20 41 67 67 72 65 67 61  e IntPtr Aggrega
10250 74 65 43 6f 6e 74 65 78 74 28 49 6e 74 50 74 72  teContext(IntPtr
10260 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b   context)..    {
10270 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
10280 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10290 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65  ds.sqlite3_aggre
102a0 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e  gate_context(con
102b0 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20 20 7d  text, 1);..    }
102c0 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f  ....#if INTEROP_
102d0 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20  VIRTUAL_TABLE.. 
102e0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
102f0 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20  ..    /// Calls 
10300 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74  the native SQLit
10310 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69  e core library i
10320 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61  n order to decla
10330 72 65 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  re a virtual tab
10340 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20 72  le..    /// in r
10350 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c  esponse to a cal
10360 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73 65 65 20  l into the <see 
10370 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
10380 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
10390 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f  e" />..    /// o
103a0 72 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  r <see cref="ISQ
103b0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
103c0 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69  .xConnect" /> vi
103d0 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74 68  rtual table meth
103e0 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ods...    /// </
103f0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
10400 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
10410 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  odule">..    ///
10420 20 54 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   The virtual tab
10430 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61 74 20 69  le module that i
10440 73 20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73 69  s to be responsi
10450 62 6c 65 20 66 6f 72 20 74 68 65 20 76 69 72 74  ble for the virt
10460 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  ual table..    /
10470 2f 2f 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65  // being declare
10480 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
10490 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
104a0 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 53 71  aram name="strSq
104b0 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  l">..    /// The
104c0 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
104d0 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
104e0 6d 65 6e 74 20 64 65 73 63 72 69 62 69 6e 67 20  ment describing 
104f0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
10500 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62 65  e to..    /// be
10510 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20   declared...    
10520 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
10530 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
10540 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20  e="error">..    
10550 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73  /// Upon success
10560 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  , the contents o
10570 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  f this parameter
10580 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 20   are undefined. 
10590 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a   Upon failure,..
105a0 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c      /// it shoul
105b0 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70  d contain an app
105c0 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d  ropriate error m
105d0 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f  essage...    ///
105e0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
105f0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
10600 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
10610 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
10620 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ode...    /// </
10630 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
10640 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10650 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
10660 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c 54 61  DeclareVirtualTa
10670 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 53 51  ble(..        SQ
10680 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
10690 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  e,..        stri
106a0 6e 67 20 73 74 72 53 71 6c 2c 0d 0a 20 20 20 20  ng strSql,..    
106b0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
106c0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29 0d  rror..        ).
106d0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
106e0 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  if (_sql == null
106f0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
10700 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
10710 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  = "connection ha
10720 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
10730 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  dle";..         
10740 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
10750 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
10760 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
10770 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 53         IntPtr pS
10780 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  ql = IntPtr.Zero
10790 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79  ;....        try
107a0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
107b0 20 20 20 20 20 20 20 20 20 70 53 71 6c 20 3d 20           pSql = 
107c0 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66  SQLiteString.Utf
107d0 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e  8IntPtrFromStrin
107e0 67 28 73 74 72 53 71 6c 29 3b 0d 0a 0d 0a 20 20  g(strSql);....  
107f0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
10800 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
10810 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10820 73 2e 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  s.sqlite3_declar
10830 65 5f 76 74 61 62 28 0d 0a 20 20 20 20 20 20 20  e_vtab(..       
10840 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70           _sql, p
10850 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Sql);....       
10860 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53       if ((n == S
10870 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
10880 6b 29 20 26 26 20 28 6d 6f 64 75 6c 65 20 21 3d  k) && (module !=
10890 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
108a0 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
108b0 44 65 63 6c 61 72 65 64 20 3d 20 74 72 75 65 3b  Declared = true;
108c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
108d0 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
108e0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72  rrorCode.Ok) err
108f0 6f 72 20 3d 20 47 65 74 4c 61 73 74 45 72 72 6f  or = GetLastErro
10900 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  r();....        
10910 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20      return n;.. 
10920 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10930 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
10940 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10950 20 20 69 66 20 28 70 53 71 6c 20 21 3d 20 49 6e    if (pSql != In
10960 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
10970 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10980 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
10990 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 53 71  eMemory.Free(pSq
109a0 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l);..           
109b0 20 20 20 20 20 70 53 71 6c 20 3d 20 49 6e 74 50       pSql = IntP
109c0 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
109d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
109e0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
109f0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
10a00 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68      /// Calls th
10a10 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20  e native SQLite 
10a20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20  core library in 
10a30 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61 72 65  order to declare
10a40 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
10a50 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69  ..    /// functi
10a60 6f 6e 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  on in response t
10a70 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68  o a call into th
10a80 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
10a90 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
10aa0 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20  .xCreate" />..  
10ab0 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72    /// or <see cr
10ac0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
10ad0 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74  eModule.xConnect
10ae0 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 74 61 62  " /> virtual tab
10af0 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20  le methods...   
10b00 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10b10 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
10b20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
10b30 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69 72 74      /// The virt
10b40 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65  ual table module
10b50 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20 72   that is to be r
10b60 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74  esponsible for t
10b70 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
10b80 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69  ..    /// functi
10b90 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65  on being declare
10ba0 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
10bb0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
10bc0 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d  aram name="argum
10bd0 65 6e 74 43 6f 75 6e 74 22 3e 0d 0a 20 20 20 20  entCount">..    
10be0 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
10bf0 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
10c00 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e  he function bein
10c10 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20  g declared...   
10c20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
10c30 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
10c40 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20  me="name">..    
10c50 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  /// The name of 
10c60 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69  the function bei
10c70 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20  ng declared...  
10c80 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
10c90 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
10ca0 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20  ame="error">..  
10cb0 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65    /// Upon succe
10cc0 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73  ss, the contents
10cd0 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65 74   of this paramet
10ce0 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  er are undefined
10cf0 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c  .  Upon failure,
10d00 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f  ..    /// it sho
10d10 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61  uld contain an a
10d20 70 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72  ppropriate error
10d30 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f   message...    /
10d40 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
10d50 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
10d60 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
10d70 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
10d80 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   code...    /// 
10d90 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
10da0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
10db0 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
10dc0 65 20 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c  e DeclareVirtual
10dd0 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
10de0 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20     SQLiteModule 
10df0 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20  module,..       
10e00 20 69 6e 74 20 61 72 67 75 6d 65 6e 74 43 6f 75   int argumentCou
10e10 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  nt,..        str
10e20 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
10e30 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
10e40 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ror..        )..
10e50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
10e60 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29  f (_sql == null)
10e70 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
10e80 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
10e90 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73   "connection has
10ea0 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
10eb0 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  le";..          
10ec0 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
10ed0 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
10ee0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
10ef0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 4e 61        IntPtr pNa
10f00 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  me = IntPtr.Zero
10f10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79  ;....        try
10f20 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
10f30 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d           pName =
10f40 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74   SQLiteString.Ut
10f50 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
10f60 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ng(name);....   
10f70 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
10f80 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
10f90 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10fa0 2e 73 71 6c 69 74 65 33 5f 6f 76 65 72 6c 6f 61  .sqlite3_overloa
10fb0 64 5f 66 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  d_function(..   
10fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71               _sq
10fd0 6c 2c 20 70 4e 61 6d 65 2c 20 61 72 67 75 6d 65  l, pName, argume
10fe0 6e 74 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  ntCount);....   
10ff0 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
11000 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
11010 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47 65  e.Ok) error = Ge
11020 74 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d  tLastError();...
11030 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
11040 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20  urn n;..        
11050 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
11060 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ly..        {.. 
11070 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
11080 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a  Name != IntPtr.Z
11090 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
110a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
110b0 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72       SQLiteMemor
110c0 79 2e 46 72 65 65 28 70 4e 61 6d 65 29 3b 0d 0a  y.Free(pName);..
110d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110e0 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a  pName = IntPtr.Z
110f0 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
11100 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
11110 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
11120 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
11130 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62  y>..    /// Enab
11140 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20  les or disabled 
11150 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e  extension loadin
11160 67 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a 20 20  g by SQLite...  
11170 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
11180 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
11190 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d   name="bOnOff">.
111a0 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 74 6f  .    /// True to
111b0 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67 20   enable loading 
111c0 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20 66  of extensions, f
111d0 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 2e  alse to disable.
111e0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
111f0 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
11200 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
11210 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28  etLoadExtension(
11220 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20  bool bOnOff)..  
11230 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
11240 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
11250 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11260 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 6e 61  hods.sqlite3_ena
11270 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble_load_extensi
11280 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
11290 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f   _sql, (bOnOff ?
112a0 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20   -1 : 0));....  
112b0 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
112c0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
112d0 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
112e0 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
112f0 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
11300 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
11310 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
11320 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20 53 51    /// Loads a SQ
11330 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 20 6c  Lite extension l
11340 69 62 72 61 72 79 20 66 72 6f 6d 20 74 68 65 20  ibrary from the 
11350 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20  named file...   
11360 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
11370 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
11380 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e  name="fileName">
11390 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61  ..    /// The na
113a0 6d 65 20 6f 66 20 74 68 65 20 64 79 6e 61 6d 69  me of the dynami
113b0 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72 79 20 66  c link library f
113c0 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ile containing t
113d0 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20  he extension... 
113e0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
113f0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
11400 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d 65 22 3e  name="procName">
11410 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61  ..    /// The na
11420 6d 65 20 6f 66 20 74 68 65 20 65 78 70 6f 72 74  me of the export
11430 65 64 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 64  ed function used
11440 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74   to initialize t
11450 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20  he extension... 
11460 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c 2c 20     /// If null, 
11470 74 68 65 20 64 65 66 61 75 6c 74 20 22 73 71 6c  the default "sql
11480 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69  ite3_extension_i
11490 6e 69 74 22 20 77 69 6c 6c 20 62 65 20 75 73 65  nit" will be use
114a0 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
114b0 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
114c0 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
114d0 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 73   LoadExtension(s
114e0 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 20  tring fileName, 
114f0 73 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d 65 29  string procName)
11500 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
11510 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d 3d   if (fileName ==
11520 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
11530 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
11540 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
11550 69 6f 6e 28 22 66 69 6c 65 4e 61 6d 65 22 29 3b  ion("fileName");
11560 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
11570 74 72 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50  tr pError = IntP
11580 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
11590 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
115a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
115b0 62 79 74 65 5b 5d 20 75 74 66 38 46 69 6c 65 4e  byte[] utf8FileN
115c0 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69  ame = UTF8Encodi
115d0 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73  ng.UTF8.GetBytes
115e0 28 66 69 6c 65 4e 61 6d 65 20 2b 20 27 5c 30 27  (fileName + '\0'
115f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
11600 62 79 74 65 5b 5d 20 75 74 66 38 50 72 6f 63 4e  byte[] utf8ProcN
11610 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ame = null;.... 
11620 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
11630 72 6f 63 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  rocName != null)
11640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11650 20 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d    utf8ProcName =
11660 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54   UTF8Encoding.UT
11670 46 38 2e 47 65 74 42 79 74 65 73 28 70 72 6f 63  F8.GetBytes(proc
11680 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 0d  Name + '\0');...
11690 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
116a0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
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 6c 6f 61  hods.sqlite3_loa
116d0 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20  d_extension(..  
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
116f0 71 6c 2c 20 75 74 66 38 46 69 6c 65 4e 61 6d 65  ql, utf8FileName
11700 2c 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 2c 20  , utf8ProcName, 
11710 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a 0d 0a  ref pError);....
11720 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11730 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
11740 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
11750 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
11760 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
11770 69 6f 6e 28 6e 2c 20 55 54 46 38 54 6f 53 74 72  ion(n, UTF8ToStr
11780 69 6e 67 28 70 45 72 72 6f 72 2c 20 2d 31 29 29  ing(pError, -1))
11790 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
117a0 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
117b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
117c0 20 20 20 20 20 20 69 66 20 28 70 45 72 72 6f 72        if (pError
117d0 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
117e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
117f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11800 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11810 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 72 65  hods.sqlite3_fre
11820 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20  e(pError);..    
11830 20 20 20 20 20 20 20 20 20 20 20 20 70 45 72 72              pErr
11840 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  or = IntPtr.Zero
11850 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
11860 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
11870 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e   }....    /// En
11880 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65  ables or disable
11890 64 20 65 78 74 65 6e 64 65 64 20 72 65 73 75 6c  d extended resul
118a0 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e 65 64  t codes returned
118b0 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20 20 20   by SQLite..    
118c0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
118d0 65 20 76 6f 69 64 20 53 65 74 45 78 74 65 6e 64  e void SetExtend
118e0 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28 62 6f  edResultCodes(bo
118f0 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20  ol bOnOff)..    
11900 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
11910 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
11920 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
11930 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65  .sqlite3_extende
11940 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28 0d  d_result_codes(.
11950 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c  .          _sql,
11960 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20   (bOnOff ? -1 : 
11970 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  0));....      if
11980 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
11990 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
119a0 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
119b0 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
119c0 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
119d0 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68  .    /// Gets th
119e0 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65 72  e last SQLite er
119f0 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e  ror code..    in
11a00 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
11a10 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
11a20 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20  ResultCode()..  
11a30 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
11a40 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
11a50 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 72  thods.sqlite3_er
11a60 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20  rcode(_sql);..  
11a70 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74    }..    /// Get
11a80 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74  s the last SQLit
11a90 65 20 65 78 74 65 6e 64 65 64 20 65 72 72 6f 72  e extended error
11aa0 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72   code..    inter
11ab0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
11ac0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 45 78 74  iteErrorCode Ext
11ad0 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65 28  endedResultCode(
11ae0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
11af0 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
11b00 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
11b10 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
11b20 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ode(_sql);..    
11b30 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64  }....    /// Add
11b40 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76   a log message v
11b50 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 73 71  ia the SQLite sq
11b60 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66  lite3_log interf
11b70 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ace...    intern
11b80 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
11b90 20 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69   LogMessage(SQLi
11ba0 74 65 45 72 72 6f 72 43 6f 64 65 20 69 45 72 72  teErrorCode iErr
11bb0 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65  Code, string zMe
11bc0 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  ssage)..    {.. 
11bd0 20 20 20 20 20 53 74 61 74 69 63 4c 6f 67 4d 65       StaticLogMe
11be0 73 73 61 67 65 28 69 45 72 72 43 6f 64 65 2c 20  ssage(iErrCode, 
11bf0 7a 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20  zMessage);..    
11c00 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64  }....    /// Add
11c10 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76   a log message v
11c20 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 73 71  ia the SQLite sq
11c30 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66  lite3_log interf
11c40 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ace...    intern
11c50 61 6c 20 73 74 61 74 69 63 20 76 6f 69 64 20 53  al static void S
11c60 74 61 74 69 63 4c 6f 67 4d 65 73 73 61 67 65 28  taticLogMessage(
11c70 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
11c80 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67  iErrCode, string
11c90 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20   zMessage)..    
11ca0 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
11cb0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
11cc0 69 74 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f 64  ite3_log(iErrCod
11cd0 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65 73 73 61  e, ToUTF8(zMessa
11ce0 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ge));..    }....
11cf0 23 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45  #if INTEROP_CODE
11d00 43 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  C..    internal 
11d10 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
11d20 74 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d  tPassword(byte[]
11d30 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d   passwordBytes).
11d40 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
11d50 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
11d60 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
11d70 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6b 65  thods.sqlite3_ke
11d80 79 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f 72 64  y(_sql, password
11d90 42 79 74 65 73 2c 20 70 61 73 73 77 6f 72 64 42  Bytes, passwordB
11da0 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20  ytes.Length);.. 
11db0 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
11dc0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
11dd0 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
11de0 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
11df0 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
11e00 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
11e10 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
11e20 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73 73 77  void ChangePassw
11e30 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77 50 61  ord(byte[] newPa
11e40 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20  sswordBytes)..  
11e50 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
11e60 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
11e70 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
11e80 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 6b 65 79  ds.sqlite3_rekey
11e90 28 5f 73 71 6c 2c 20 6e 65 77 50 61 73 73 77 6f  (_sql, newPasswo
11ea0 72 64 42 79 74 65 73 2c 20 28 6e 65 77 50 61 73  rdBytes, (newPas
11eb0 73 77 6f 72 64 42 79 74 65 73 20 3d 3d 20 6e 75  swordBytes == nu
11ec0 6c 6c 29 20 3f 20 30 20 3a 20 6e 65 77 50 61 73  ll) ? 0 : newPas
11ed0 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74  swordBytes.Lengt
11ee0 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  h);..      if (n
11ef0 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
11f00 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
11f10 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
11f20 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
11f30 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65  r());..    }..#e
11f40 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ndif....    inte
11f50 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
11f60 69 64 20 53 65 74 41 75 74 68 6f 72 69 7a 65 72  id SetAuthorizer
11f70 48 6f 6f 6b 28 53 51 4c 69 74 65 41 75 74 68 6f  Hook(SQLiteAutho
11f80 72 69 7a 65 72 43 61 6c 6c 62 61 63 6b 20 66 75  rizerCallback fu
11f90 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nc)..    {..    
11fa0 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
11fb0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 65  thods.sqlite3_se
11fc0 74 5f 61 75 74 68 6f 72 69 7a 65 72 28 5f 73 71  t_authorizer(_sq
11fd0 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
11fe0 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
11ff0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
12000 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 55  erride void SetU
12010 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c 69 74 65  pdateHook(SQLite
12020 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 66  UpdateCallback f
12030 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  unc)..    {..   
12040 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
12050 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 75  ethods.sqlite3_u
12060 70 64 61 74 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c  pdate_hook(_sql,
12070 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
12080 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
12090 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
120a0 72 69 64 65 20 76 6f 69 64 20 53 65 74 43 6f 6d  ride void SetCom
120b0 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f  mitHook(SQLiteCo
120c0 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e  mmitCallback fun
120d0 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
120e0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
120f0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d  hods.sqlite3_com
12100 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66  mit_hook(_sql, f
12110 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
12120 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
12130 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
12140 64 65 20 76 6f 69 64 20 53 65 74 54 72 61 63 65  de void SetTrace
12150 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 54  Callback(SQLiteT
12160 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e  raceCallback fun
12170 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
12180 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
12190 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 72 61  hods.sqlite3_tra
121a0 63 65 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49  ce(_sql, func, I
121b0 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
121c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
121d0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
121e0 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f  d SetRollbackHoo
121f0 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63 6b  k(SQLiteRollback
12200 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
12210 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
12220 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
12230 2e 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63  .sqlite3_rollbac
12240 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e  k_hook(_sql, fun
12250 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
12260 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
12270 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
12280 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74 68 65    /// Allows the
12290 20 73 65 74 74 69 6e 67 20 6f 66 20 61 20 6c 6f   setting of a lo
122a0 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69  gging callback i
122b0 6e 76 6f 6b 65 64 20 62 79 20 53 51 4c 69 74 65  nvoked by SQLite
122c0 20 77 68 65 6e 20 61 0d 0a 20 20 20 20 2f 2f 2f   when a..    ///
122d0 20 6c 6f 67 20 65 76 65 6e 74 20 6f 63 63 75 72   log event occur
122e0 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20 63 61 6c  s.  Only one cal
122f0 6c 62 61 63 6b 20 6d 61 79 20 62 65 20 73 65 74  lback may be set
12300 2e 20 20 49 66 20 4e 55 4c 4c 20 69 73 20 70 61  .  If NULL is pa
12310 73 73 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74  ssed,..    /// t
12320 68 65 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62  he logging callb
12330 61 63 6b 20 69 73 20 75 6e 72 65 67 69 73 74 65  ack is unregiste
12340 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  red...    /// </
12350 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
12360 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
12370 75 6e 63 22 3e 54 68 65 20 63 61 6c 6c 62 61 63  unc">The callbac
12380 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e  k function to in
12390 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  voke.</param>.. 
123a0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
123b0 52 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74  Returns a result
123c0 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d   code</returns>.
123d0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
123e0 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
123f0 6f 72 43 6f 64 65 20 53 65 74 4c 6f 67 43 61 6c  orCode SetLogCal
12400 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c 6f 67 43  lback(SQLiteLogC
12410 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
12420 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
12430 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
12440 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
12450 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
12460 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a 20 20 20 20  onfig_log(..    
12470 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
12480 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  nfigOpsEnum.SQLI
12490 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 66  TE_CONFIG_LOG, f
124a0 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
124b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
124c0 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d  turn rc;..    }.
124d0 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
124e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
124f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12530 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
12540 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
12550 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 20 6e   /// Creates a n
12560 65 77 20 53 51 4c 69 74 65 20 62 61 63 6b 75 70  ew SQLite backup
12570 20 6f 62 6a 65 63 74 20 62 61 73 65 64 20 6f 6e   object based on
12580 20 74 68 65 20 70 72 6f 76 69 64 65 64 20 64 65   the provided de
12590 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f  stination..    /
125a0 2f 2f 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  // database conn
125b0 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 73 6f 75  ection.  The sou
125c0 72 63 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  rce database con
125d0 6e 65 63 74 69 6f 6e 20 69 73 20 74 68 65 20 6f  nection is the o
125e0 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f  ne..    /// asso
125f0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
12600 20 6f 62 6a 65 63 74 2e 20 20 54 68 65 20 73 6f   object.  The so
12610 75 72 63 65 20 61 6e 64 20 64 65 73 74 69 6e 61  urce and destina
12620 74 69 6f 6e 20 64 61 74 61 62 61 73 65 0d 0a 20  tion database.. 
12630 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f     /// connectio
12640 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 74 68 65  ns cannot be the
12650 20 73 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   same...    /// 
12660 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
12670 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
12680 22 64 65 73 74 43 6e 6e 22 3e 54 68 65 20 64 65  "destCnn">The de
12690 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
126a0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f  se connection.</
126b0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
126c0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73  <param name="des
126d0 74 4e 61 6d 65 22 3e 54 68 65 20 64 65 73 74 69  tName">The desti
126e0 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20  nation database 
126f0 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  name.</param>.. 
12700 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
12710 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d 65 22 3e  me="sourceName">
12720 54 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  The source datab
12730 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d  ase name.</param
12740 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
12750 72 6e 73 3e 54 68 65 20 6e 65 77 6c 79 20 63 72  rns>The newly cr
12760 65 61 74 65 64 20 62 61 63 6b 75 70 20 6f 62 6a  eated backup obj
12770 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ect.</returns>..
12780 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
12790 72 72 69 64 65 20 53 51 4c 69 74 65 42 61 63 6b  rride SQLiteBack
127a0 75 70 20 49 6e 69 74 69 61 6c 69 7a 65 42 61 63  up InitializeBac
127b0 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51  kup(..        SQ
127c0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 64  LiteConnection d
127d0 65 73 74 43 6e 6e 2c 0d 0a 20 20 20 20 20 20 20  estCnn,..       
127e0 20 73 74 72 69 6e 67 20 64 65 73 74 4e 61 6d 65   string destName
127f0 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
12800 67 20 73 6f 75 72 63 65 4e 61 6d 65 0d 0a 20 20  g sourceName..  
12810 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
12820 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74          if (dest
12830 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Cnn == null)..  
12840 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
12850 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
12860 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74 43  Exception("destC
12870 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nn");....       
12880 20 69 66 20 28 64 65 73 74 4e 61 6d 65 20 3d 3d   if (destName ==
12890 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
128a0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
128b0 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
128c0 69 6f 6e 28 22 64 65 73 74 4e 61 6d 65 22 29 3b  ion("destName");
128d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
128e0 73 6f 75 72 63 65 4e 61 6d 65 20 3d 3d 20 6e 75  sourceName == nu
128f0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
12900 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
12910 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
12920 28 22 73 6f 75 72 63 65 4e 61 6d 65 22 29 3b 0d  ("sourceName");.
12930 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
12940 65 33 20 64 65 73 74 53 71 6c 69 74 65 33 20 3d  e3 destSqlite3 =
12950 20 64 65 73 74 43 6e 6e 2e 5f 73 71 6c 20 61 73   destCnn._sql as
12960 20 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a 20 20 20   SQLite3;....   
12970 20 20 20 20 20 69 66 20 28 64 65 73 74 53 71 6c       if (destSql
12980 69 74 65 33 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ite3 == null).. 
12990 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
129a0 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63   new ArgumentExc
129b0 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
129c0 20 20 20 20 20 20 20 20 20 22 44 65 73 74 69 6e           "Destin
129d0 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  ation connection
129e0 20 68 61 73 20 6e 6f 20 77 72 61 70 70 65 72 2e   has no wrapper.
129f0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
12a00 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d      "destCnn");.
12a10 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
12a20 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c  eConnectionHandl
12a30 65 20 64 65 73 74 48 61 6e 64 6c 65 20 3d 20 64  e destHandle = d
12a40 65 73 74 53 71 6c 69 74 65 33 2e 5f 73 71 6c 3b  estSqlite3._sql;
12a50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
12a60 64 65 73 74 48 61 6e 64 6c 65 20 3d 3d 20 6e 75  destHandle == nu
12a70 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
12a80 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
12a90 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  entException(.. 
12aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
12ab0 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e  Destination conn
12ac0 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e  ection has an in
12ad0 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 2c 0d  valid handle.",.
12ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12af0 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a   "destCnn");....
12b00 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
12b10 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 73  nnectionHandle s
12b20 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 20 5f 73  ourceHandle = _s
12b30 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ql;....        i
12b40 66 20 28 73 6f 75 72 63 65 48 61 6e 64 6c 65 20  f (sourceHandle 
12b50 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
12b60 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
12b70 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
12b80 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
12b90 20 20 20 20 20 20 20 20 20 20 20 20 22 53 6f 75              "Sou
12ba0 72 63 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  rce connection h
12bb0 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
12bc0 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
12bd0 20 20 20 20 62 79 74 65 5b 5d 20 7a 44 65 73 74      byte[] zDest
12be0 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28 64 65  Name = ToUTF8(de
12bf0 73 74 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  stName);..      
12c00 20 20 62 79 74 65 5b 5d 20 7a 53 6f 75 72 63 65    byte[] zSource
12c10 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28 73 6f  Name = ToUTF8(so
12c20 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  urceName);....  
12c30 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
12c40 75 70 48 61 6e 64 6c 65 20 62 61 63 6b 75 70 48  upHandle backupH
12c50 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  andle = null;...
12c60 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
12c70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12c80 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
12c90 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
12ca0 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20          finally 
12cb0 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e  /* NOTE: Thread.
12cc0 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69  Abort() protecti
12cd0 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  on. */..        
12ce0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  {..            I
12cf0 6e 74 50 74 72 20 62 61 63 6b 75 70 20 3d 20 55  ntPtr backup = U
12d00 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12d10 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  ds.sqlite3_backu
12d20 70 5f 69 6e 69 74 28 0d 0a 20 20 20 20 20 20 20  p_init(..       
12d30 20 20 20 20 20 20 20 20 20 64 65 73 74 48 61 6e           destHan
12d40 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20  dle, zDestName, 
12d50 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 20 7a 53  sourceHandle, zS
12d60 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  ourceName);.... 
12d70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62             if (b
12d80 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50 74 72 2e  ackup == IntPtr.
12d90 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
12da0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12db0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
12dc0 72 43 6f 64 65 20 72 65 73 75 6c 74 43 6f 64 65  rCode resultCode
12dd0 20 3d 20 52 65 73 75 6c 74 43 6f 64 65 28 29 3b   = ResultCode();
12de0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12df0 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 43 6f      if (resultCo
12e00 64 65 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  de != SQLiteErro
12e10 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
12e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12e30 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
12e40 78 63 65 70 74 69 6f 6e 28 72 65 73 75 6c 74 43  xception(resultC
12e50 6f 64 65 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  ode, GetLastErro
12e60 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
12e70 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
12e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e90 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
12ea0 65 45 78 63 65 70 74 69 6f 6e 28 22 66 61 69 6c  eException("fail
12eb0 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65  ed to initialize
12ec0 20 62 61 63 6b 75 70 22 29 3b 0d 0a 20 20 20 20   backup");..    
12ed0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
12ee0 20 20 20 20 20 20 20 20 20 62 61 63 6b 75 70 48           backupH
12ef0 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69  andle = new SQLi
12f00 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 28 64  teBackupHandle(d
12f10 65 73 74 48 61 6e 64 6c 65 2c 20 62 61 63 6b 75  estHandle, backu
12f20 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  p);..        }..
12f30 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
12f40 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61  Connection.OnCha
12f50 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43  nged(null, new C
12f60 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72  onnectionEventAr
12f70 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
12f80 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
12f90 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77 43 72  nEventType.NewCr
12fa0 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75  iticalHandle, nu
12fb0 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ll, null,..     
12fc0 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c         null, nul
12fd0 6c 2c 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c  l, backupHandle,
12fe0 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63   null, new objec
12ff0 74 5b 5d 20 7b 20 64 65 73 74 43 6e 6e 2c 0d 0a  t[] { destCnn,..
13000 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 74              dest
13010 4e 61 6d 65 2c 20 73 6f 75 72 63 65 4e 61 6d 65  Name, sourceName
13020 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   }));....       
13030 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69   return new SQLi
13040 74 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  teBackup(..     
13050 20 20 20 20 20 20 20 74 68 69 73 2c 20 62 61 63         this, bac
13060 6b 75 70 48 61 6e 64 6c 65 2c 20 64 65 73 74 48  kupHandle, destH
13070 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65  andle, zDestName
13080 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 0d  , sourceHandle,.
13090 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 53 6f  .            zSo
130a0 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  urceName);..    
130b0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
130c0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
130d0 43 6f 70 69 65 73 20 75 70 20 74 6f 20 4e 20 70  Copies up to N p
130e0 61 67 65 73 20 66 72 6f 6d 20 74 68 65 20 73 6f  ages from the so
130f0 75 72 63 65 20 64 61 74 61 62 61 73 65 20 74 6f  urce database to
13100 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e   the destination
13110 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61  ..    /// databa
13120 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  se associated wi
13130 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
13140 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d   backup object..
13150 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
13160 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
13170 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
13180 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
13190 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72  ect to use.</par
131a0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
131b0 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22  ram name="nPage"
131c0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
131d0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
131e0 6f 20 63 6f 70 79 2c 20 6e 65 67 61 74 69 76 65  o copy, negative
131f0 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20 72 65 6d   to copy all rem
13200 61 69 6e 69 6e 67 20 70 61 67 65 73 2e 0d 0a 20  aining pages... 
13210 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
13220 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
13230 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e 0d 0a 20  name="retry">.. 
13240 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f 20 74 72     /// Set to tr
13250 75 65 20 69 66 20 74 68 65 20 6f 70 65 72 61 74  ue if the operat
13260 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ion needs to be 
13270 72 65 74 72 69 65 64 20 64 75 65 20 74 6f 20 64  retried due to d
13280 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f  atabase..    ///
13290 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75 65 73 3b   locking issues;
132a0 20 6f 74 68 65 72 77 69 73 65 2c 20 73 65 74 20   otherwise, set 
132b0 74 6f 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f  to false...    /
132c0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
132d0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
132e0 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20      /// True if 
132f0 74 68 65 72 65 20 61 72 65 20 6d 6f 72 65 20 70  there are more p
13300 61 67 65 73 20 74 6f 20 62 65 20 63 6f 70 69 65  ages to be copie
13310 64 2c 20 66 61 6c 73 65 20 6f 74 68 65 72 77 69  d, false otherwi
13320 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  se...    /// </r
13330 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
13340 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
13350 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75 70 28 0d  ool StepBackup(.
13360 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
13370 61 63 6b 75 70 20 62 61 63 6b 75 70 2c 0d 0a 20  ackup backup,.. 
13380 20 20 20 20 20 20 20 69 6e 74 20 6e 50 61 67 65         int nPage
13390 2c 0d 0a 20 20 20 20 20 20 20 20 6f 75 74 20 62  ,..        out b
133a0 6f 6f 6c 20 72 65 74 72 79 0d 0a 20 20 20 20 20  ool retry..     
133b0 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
133c0 20 20 20 20 20 72 65 74 72 79 20 3d 20 66 61 6c       retry = fal
133d0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  se;....        i
133e0 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c  f (backup == nul
133f0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
13400 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
13410 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
13420 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20  "backup");....  
13430 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
13440 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  upHandle handle 
13450 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65  = backup._sqlite
13460 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20  _backup;....    
13470 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d      if (handle =
13480 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
13490 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
134a0 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
134b0 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
134c0 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
134d0 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
134e0 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
134f0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49  ");....        I
13500 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20  ntPtr handlePtr 
13510 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
13520 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50       if (handleP
13530 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tr == IntPtr.Zer
13540 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
13550 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
13560 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
13570 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
13580 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
13590 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
135a0 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74  lid handle point
135b0 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  er.");....      
135c0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
135d0 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
135e0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
135f0 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28 68 61  3_backup_step(ha
13600 6e 64 6c 65 50 74 72 2c 20 6e 50 61 67 65 29 3b  ndlePtr, nPage);
13610 0d 0a 20 20 20 20 20 20 20 20 62 61 63 6b 75 70  ..        backup
13620 2e 5f 73 74 65 70 52 65 73 75 6c 74 20 3d 20 6e  ._stepResult = n
13630 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 76 65 20  ; /* NOTE: Save 
13640 66 6f 72 20 75 73 65 20 62 79 20 46 69 6e 69 73  for use by Finis
13650 68 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20  hBackup. */.... 
13660 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
13670 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
13680 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  Ok)..        {..
13690 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
136a0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
136b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
136c0 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
136d0 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29  eErrorCode.Busy)
136e0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
136f0 20 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d           retry =
13700 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
13710 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
13720 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
13730 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
13740 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
13750 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20 20 20  de.Locked)..    
13760 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13770 20 20 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b     retry = true;
13780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
13790 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
137a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
137b0 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  lse if (n == SQL
137c0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e  iteErrorCode.Don
137d0 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  e)..        {.. 
137e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
137f0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
13800 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
13810 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
13820 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
13830 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
13840 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
13850 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
13860 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
13870 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
13880 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
13890 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
138a0 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f  ges remaining to
138b0 20 62 65 20 63 6f 70 69 65 64 20 66 72 6f 6d 20   be copied from 
138c0 74 68 65 20 73 6f 75 72 63 65 0d 0a 20 20 20 20  the source..    
138d0 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 74 6f 20  /// database to 
138e0 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  the destination 
138f0 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
13900 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65  ted with the spe
13910 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  cified..    /// 
13920 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a  backup object...
13930 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
13940 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
13950 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22  am name="backup"
13960 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65  >The backup obje
13970 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61  ct to check.</pa
13980 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
13990 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65  eturns>The numbe
139a0 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69  r of pages remai
139b0 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65  ning to be copie
139c0 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  d.</returns>..  
139d0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
139e0 69 64 65 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e  ide int Remainin
139f0 67 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  gBackup(..      
13a00 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62    SQLiteBackup b
13a10 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29  ackup..        )
13a20 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
13a30 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e   if (backup == n
13a40 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
13a50 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
13a60 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
13a70 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a  n("backup");....
13a80 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
13a90 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c  ckupHandle handl
13aa0 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69  e = backup._sqli
13ab0 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20  te_backup;....  
13ac0 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
13ad0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
13ae0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
13af0 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
13b00 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
13b20 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
13b30 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
13b40 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
13b50 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74   IntPtr handlePt
13b60 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
13b70 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
13b80 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  ePtr == IntPtr.Z
13b90 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
13ba0 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
13bb0 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
13bc0 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
13bd0 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
13be0 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
13bf0 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69  valid handle poi
13c00 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  nter.");....    
13c10 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
13c20 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
13c30 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 72 65  qlite3_backup_re
13c40 6d 61 69 6e 69 6e 67 28 68 61 6e 64 6c 65 50 74  maining(handlePt
13c50 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  r);..    }....  
13c60 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
13c70 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
13c80 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
13c90 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
13ca0 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
13cb0 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20  e associated..  
13cc0 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 65 20 73    /// with the s
13cd0 70 65 63 69 66 69 65 64 20 62 61 63 6b 75 70 20  pecified backup 
13ce0 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
13cf0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
13d00 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
13d10 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61  ="backup">The ba
13d20 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63  ckup object to c
13d30 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  heck.</param>.. 
13d40 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
13d50 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  The total number
13d60 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
13d70 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
13d80 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
13d90 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
13da0 64 65 20 69 6e 74 20 50 61 67 65 43 6f 75 6e 74  de int PageCount
13db0 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
13dc0 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61   SQLiteBackup ba
13dd0 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d  ckup..        ).
13de0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
13df0 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75  if (backup == nu
13e00 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
13e10 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
13e20 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
13e30 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20  ("backup");.... 
13e40 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
13e50 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  kupHandle handle
13e60 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74   = backup._sqlit
13e70 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20  e_backup;....   
13e80 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20       if (handle 
13e90 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
13ea0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
13eb0 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
13ec0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
13ee0 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
13ef0 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
13f00 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
13f10 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72  IntPtr handlePtr
13f20 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
13f30 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
13f40 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  Ptr == IntPtr.Ze
13f50 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
13f60 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
13f70 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
13f80 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
13f90 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
13fa0 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
13fb0 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e  alid handle poin
13fc0 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ter.");....     
13fd0 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
13fe0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
13ff0 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 70 61 67  lite3_backup_pag
14000 65 63 6f 75 6e 74 28 68 61 6e 64 6c 65 50 74 72  ecount(handlePtr
14010 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
14020 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
14030 20 20 20 20 2f 2f 2f 20 44 65 73 74 72 6f 79 73      /// Destroys
14040 20 74 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65   the backup obje
14050 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62 61 63 6b  ct, rolling back
14060 20 61 6e 79 20 62 61 63 6b 75 70 20 74 68 61 74   any backup that
14070 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20 20 20 20   may be in..    
14080 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d 0a 20 20  /// progess...  
14090 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
140a0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
140b0 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54   name="backup">T
140c0 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
140d0 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c 2f 70 61   to destroy.</pa
140e0 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
140f0 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
14100 20 46 69 6e 69 73 68 42 61 63 6b 75 70 28 0d 0a   FinishBackup(..
14110 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
14120 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20  ckup backup..   
14130 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
14140 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75         if (backu
14150 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  p == null)..    
14160 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
14170 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
14180 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22  ception("backup"
14190 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
141a0 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
141b0 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70   handle = backup
141c0 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b  ._sqlite_backup;
141d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
141e0 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  handle == null).
141f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
14200 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
14210 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
14220 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
14230 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
14240 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
14250 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
14260 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
14270 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65  ndlePtr = handle
14280 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
14290 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e  (handlePtr == In
142a0 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
142b0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
142c0 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
142d0 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
142f0 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
14300 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
14310 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a  le pointer.");..
14320 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
14330 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
14340 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
14350 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
14360 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
14370 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e  backup_finish_in
14380 74 65 72 6f 70 28 68 61 6e 64 6c 65 50 74 72 29  terop(handlePtr)
14390 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
143a0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
143b0 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
143c0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
143d0 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28  3_backup_finish(
143e0 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6e  handlePtr);..#en
143f0 64 69 66 0d 0a 20 20 20 20 20 20 20 20 68 61 6e  dif..        han
14400 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65 41 73 49  dle.SetHandleAsI
14410 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a 23 69 66  nvalid();....#if
14420 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 0d 0a 20   COUNT_HANDLE.. 
14430 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d         if ((n ==
14440 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
14450 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d 3d 20 62 61  .Ok) || (n == ba
14460 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74  ckup._stepResult
14470 29 29 20 68 61 6e 64 6c 65 2e 57 61 73 52 65 6c  )) handle.WasRel
14480 65 61 73 65 64 4f 6b 28 29 3b 0d 0a 23 65 6e 64  easedOk();..#end
14490 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  if....        if
144a0 20 28 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72   ((n != SQLiteEr
144b0 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28  rorCode.Ok) && (
144c0 6e 20 21 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65  n != backup._ste
144d0 70 52 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20  pResult))..     
144e0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
144f0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
14500 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
14510 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
14520 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
14530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14580 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  //....    /// <s
14590 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
145a0 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74   Determines if t
145b0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
145c0 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 20  ibrary has been 
145d0 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
145e0 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72  the..    /// cur
145f0 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process... 
14600 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
14610 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
14620 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20  rns>..    /// A 
14630 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69  boolean indicati
14640 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
14650 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  t the SQLite cor
14660 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
14670 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74  en..    /// init
14680 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 20  ialized for the 
14690 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
146a0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
146b0 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
146c0 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
146d0 20 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29   IsInitialized()
146e0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
146f0 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 49 73   return StaticIs
14700 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 3b 0d 0a  Initialized();..
14710 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
14720 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
14730 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69  /// Determines i
14740 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
14750 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
14760 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  en initialized f
14770 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  or the..    /// 
14780 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
14790 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
147a0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
147b0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
147c0 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63   A boolean indic
147d0 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
147e0 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20   not the SQLite 
147f0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
14800 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69   been..    /// i
14810 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74  nitialized for t
14820 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
14830 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ss...    /// </r
14840 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
14850 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f 6f  ernal static boo
14860 6c 20 53 74 61 74 69 63 49 73 49 6e 69 74 69 61  l StaticIsInitia
14870 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a  lized()..    {..
14880 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
14890 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 50      // BUGFIX: P
148a0 72 65 76 65 6e 74 20 72 61 63 65 73 20 77 69 74  revent races wit
148b0 68 20 6f 74 68 65 72 20 74 68 72 65 61 64 73 20  h other threads 
148c0 66 6f 72 20 74 68 69 73 20 65 6e 74 69 72 65 20  for this entire 
148d0 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20 20 20 20  block, due..    
148e0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 74      //         t
148f0 6f 20 74 68 65 20 74 72 79 2f 66 69 6e 61 6c 6c  o the try/finall
14900 79 20 73 65 6d 61 6e 74 69 63 73 2e 20 20 53 65  y semantics.  Se
14910 65 20 74 69 63 6b 65 74 20 5b 37 32 39 30 35 63  e ticket [72905c
14920 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20 20 20 20  9a77]...        
14930 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b  //..        lock
14940 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20   (syncRoot)..   
14950 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
14960 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
14970 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 61 76      // NOTE: Sav
14980 65 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74  e the state of t
14990 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c 61 73 73  he logging class
149a0 20 61 6e 64 20 74 68 65 6e 20 72 65 73 74 6f 72   and then restor
149b0 65 20 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  e it..          
149c0 20 20 2f 2f 20 20 20 20 20 20 20 61 66 74 65 72    //       after
149d0 20 77 65 20 61 72 65 20 64 6f 6e 65 20 74 6f 20   we are done to 
149e0 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67 20 74 6f  avoid logging to
149f0 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20 65 72 72  o many false err
14a00 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ors...          
14a10 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
14a20 20 20 62 6f 6f 6c 20 73 61 76 65 64 45 6e 61 62    bool savedEnab
14a30 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c 6f 67 2e  led = SQLiteLog.
14a40 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20  Enabled;..      
14a50 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
14a60 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c 73 65 3b  Enabled = false;
14a70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14a80 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
14a90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14aa0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
14ab0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
14ac0 20 54 68 69 73 20 6d 65 74 68 6f 64 20 5b 61 62   This method [ab
14ad0 5d 75 73 65 73 20 74 68 65 20 66 61 63 74 20 74  ]uses the fact t
14ae0 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 20  hat SQLite will 
14af0 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20  always..        
14b00 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
14b10 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
14b20 52 52 4f 52 20 66 6f 72 20 61 6e 79 20 75 6e 6b  RROR for any unk
14b30 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  nown configurati
14b40 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20  on option..     
14b50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
14b60 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20 74 68 65      *unless* the
14b70 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20   SQLite library 
14b80 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
14b90 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0d 0a 20   initialized... 
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14bb0 2f 20 20 20 20 20 20 20 49 6e 20 74 68 61 74 20  /       In that 
14bc0 63 61 73 65 20 69 74 20 77 69 6c 6c 20 61 6c 77  case it will alw
14bd0 61 79 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ays return SQLIT
14be0 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20 20 20 20  E_MISUSE...     
14bf0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
14c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
14c10 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
14c20 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
14c30 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
14c40 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20 20  config_none(..  
14c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c60 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70    SQLiteConfigOp
14c70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e  sEnum.SQLITE_CON
14c80 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20 20  FIG_NONE);....  
14c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
14ca0 74 75 72 6e 20 28 72 63 20 3d 3d 20 53 51 4c 69  turn (rc == SQLi
14cb0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4d 69 73 75  teErrorCode.Misu
14cc0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
14cd0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
14ce0 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
14cf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14d00 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
14d10 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 73 61 76  og.Enabled = sav
14d20 65 64 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20  edEnabled;..    
14d30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
14d40 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
14d50 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
14d60 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72  ..    /// Helper
14d70 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74   function to ret
14d80 72 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f  rieve a column o
14d90 66 20 64 61 74 61 20 66 72 6f 6d 20 61 6e 20 61  f data from an a
14da0 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 2e  ctive statement.
14db0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
14dc0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
14dd0 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22  aram name="stmt"
14de0 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62  >The statement b
14df0 65 69 6e 67 20 73 74 65 70 28 29 27 64 20 74 68  eing step()'d th
14e00 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20  rough</param>.. 
14e10 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
14e20 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68 65 20 66  me="flags">The f
14e30 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
14e40 77 69 74 68 20 74 68 65 20 63 6f 6e 6e 65 63 74  with the connect
14e50 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ion.</param>..  
14e60 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
14e70 65 3d 22 69 6e 64 65 78 22 3e 54 68 65 20 63 6f  e="index">The co
14e80 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72 65  lumn index to re
14e90 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a  trieve</param>..
14ea0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
14eb0 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74 79  ame="typ">The ty
14ec0 70 65 20 6f 66 20 64 61 74 61 20 63 6f 6e 74 61  pe of data conta
14ed0 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75  ined in the colu
14ee0 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74 69 61  mn.  If Uninitia
14ef0 6c 69 7a 65 64 2c 20 74 68 69 73 20 66 75 6e 63  lized, this func
14f00 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69 65  tion will retrie
14f10 76 65 20 74 68 65 20 64 61 74 61 74 79 70 65 20  ve the datatype 
14f20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61  information.</pa
14f30 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
14f40 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 74  eturns>Returns t
14f50 68 65 20 64 61 74 61 20 69 6e 20 74 68 65 20 63  he data in the c
14f60 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d  olumn</returns>.
14f70 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
14f80 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65  erride object Ge
14f90 74 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61  tValue(SQLiteSta
14fa0 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
14fb0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
14fc0 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
14fd0 64 65 78 2c 20 53 51 4c 69 74 65 54 79 70 65 20  dex, SQLiteType 
14fe0 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  typ)..    {..   
14ff0 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 20     TypeAffinity 
15000 61 66 66 20 3d 20 74 79 70 2e 41 66 66 69 6e 69  aff = typ.Affini
15010 74 79 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 61  ty;..      if (a
15020 66 66 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69  ff == TypeAffini
15030 74 79 2e 4e 75 6c 6c 29 20 72 65 74 75 72 6e 20  ty.Null) return 
15040 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20  DBNull.Value;.. 
15050 20 20 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75       Type t = nu
15060 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  ll;....      if 
15070 28 74 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54  (typ.Type != DbT
15080 79 70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20  ype.Object)..   
15090 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20     {..        t 
150a0 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e  = SQLiteConvert.
150b0 53 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65  SQLiteTypeToType
150c0 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  (typ);..        
150d0 61 66 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69  aff = TypeToAffi
150e0 6e 69 74 79 28 74 29 3b 0d 0a 20 20 20 20 20 20  nity(t);..      
150f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 28  }....      if ((
15100 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
15110 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65  nnectionFlags.Ge
15120 74 41 6c 6c 41 73 54 65 78 74 29 20 3d 3d 20 53  tAllAsText) == S
15130 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
15140 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73 54 65 78  lags.GetAllAsTex
15150 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  t)..          re
15160 74 75 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d  turn GetText(stm
15170 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20  t, index);....  
15180 20 20 20 20 73 77 69 74 63 68 20 28 61 66 66 29      switch (aff)
15190 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
151a0 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
151b0 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20  nity.Blob:..    
151c0 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79        if (typ.Ty
151d0 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69  pe == DbType.Gui
151e0 64 20 26 26 20 74 79 70 2e 41 66 66 69 6e 69 74  d && typ.Affinit
151f0 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74  y == TypeAffinit
15200 79 2e 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20  y.Text)..       
15210 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
15220 47 75 69 64 28 47 65 74 54 65 78 74 28 73 74 6d  Guid(GetText(stm
15230 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20  t, index));.... 
15240 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d           int n =
15250 20 28 69 6e 74 29 47 65 74 42 79 74 65 73 28 73   (int)GetBytes(s
15260 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e  tmt, index, 0, n
15270 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20  ull, 0, 0);..   
15280 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20         byte[] b 
15290 3d 20 6e 65 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a  = new byte[n];..
152a0 20 20 20 20 20 20 20 20 20 20 47 65 74 42 79 74            GetByt
152b0 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  es(stmt, index, 
152c0 30 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a  0, b, 0, n);....
152d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
152e0 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65  p.Type == DbType
152f0 2e 47 75 69 64 20 26 26 20 6e 20 3d 3d 20 31 36  .Guid && n == 16
15300 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
15310 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28 62  eturn new Guid(b
15320 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15330 72 65 74 75 72 6e 20 62 3b 0d 0a 20 20 20 20 20  return b;..     
15340 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
15350 6e 69 74 79 2e 44 61 74 65 54 69 6d 65 3a 0d 0a  nity.DateTime:..
15360 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
15370 20 47 65 74 44 61 74 65 54 69 6d 65 28 73 74 6d   GetDateTime(stm
15380 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
15390 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
153a0 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20  inity.Double:.. 
153b0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
153c0 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47  = null) return G
153d0 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69  etDouble(stmt, i
153e0 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
153f0 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74    return Convert
15400 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 44  .ChangeType(GetD
15410 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65  ouble(stmt, inde
15420 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20  x), t, null);.. 
15430 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
15440 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d  Affinity.Int64:.
15450 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
15460 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
15470 20 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20   GetInt64(stmt, 
15480 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
15490 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
154a0 6f 66 28 53 42 79 74 65 29 29 20 72 65 74 75 72  of(SByte)) retur
154b0 6e 20 47 65 74 53 42 79 74 65 28 73 74 6d 74 2c  n GetSByte(stmt,
154c0 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
154d0 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
154e0 65 6f 66 28 42 79 74 65 29 29 20 72 65 74 75 72  eof(Byte)) retur
154f0 6e 20 47 65 74 42 79 74 65 28 73 74 6d 74 2c 20  n GetByte(stmt, 
15500 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
15510 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
15520 6f 66 28 49 6e 74 31 36 29 29 20 72 65 74 75 72  of(Int16)) retur
15530 6e 20 47 65 74 49 6e 74 31 36 28 73 74 6d 74 2c  n GetInt16(stmt,
15540 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
15550 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
15560 65 6f 66 28 55 49 6e 74 31 36 29 29 20 72 65 74  eof(UInt16)) ret
15570 75 72 6e 20 47 65 74 55 49 6e 74 31 36 28 73 74  urn GetUInt16(st
15580 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
15590 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
155a0 74 79 70 65 6f 66 28 49 6e 74 33 32 29 29 20 72  typeof(Int32)) r
155b0 65 74 75 72 6e 20 47 65 74 49 6e 74 33 32 28 73  eturn GetInt32(s
155c0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
155d0 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
155e0 20 74 79 70 65 6f 66 28 55 49 6e 74 33 32 29 29   typeof(UInt32))
155f0 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 33   return GetUInt3
15600 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  2(stmt, index);.
15610 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
15620 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 36   == typeof(UInt6
15630 34 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49  4)) return GetUI
15640 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt64(stmt, index
15650 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  );..          re
15660 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61  turn Convert.Cha
15670 6e 67 65 54 79 70 65 28 47 65 74 49 6e 74 36 34  ngeType(GetInt64
15680 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74  (stmt, index), t
15690 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
156a0 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20    default:..    
156b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
156c0 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
156d0 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
156e0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
156f0 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
15700 47 65 74 43 75 72 73 6f 72 46 6f 72 54 61 62 6c  GetCursorForTabl
15710 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
15720 74 20 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20  t stmt, int db, 
15730 69 6e 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20  int rootPage).. 
15740 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
15750 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
15760 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
15770 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
15780 69 74 65 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f  ite3_table_curso
15790 72 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  r_interop(stmt._
157a0 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 64 62 2c  sqlite_stmt, db,
157b0 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a 23 65 6c   rootPage);..#el
157c0 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
157d0 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20   -1;..#endif..  
157e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
157f0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
15800 67 20 47 65 74 52 6f 77 49 64 46 6f 72 43 75 72  g GetRowIdForCur
15810 73 6f 72 28 53 51 4c 69 74 65 53 74 61 74 65 6d  sor(SQLiteStatem
15820 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 63 75  ent stmt, int cu
15830 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  rsor)..    {..#i
15840 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
15850 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 72  RD..      long r
15860 6f 77 69 64 3b 0d 0a 20 20 20 20 20 20 53 51 4c  owid;..      SQL
15870 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
15880 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
15890 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 75  thods.sqlite3_cu
158a0 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72  rsor_rowid_inter
158b0 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
158c0 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20 6f 75  stmt, cursor, ou
158d0 74 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20  t rowid);..     
158e0 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74   if (rc == SQLit
158f0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 72  eErrorCode.Ok) r
15900 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a  eturn rowid;....
15910 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d        return 0;.
15920 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
15930 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d  turn 0;..#endif.
15940 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
15950 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
15960 76 6f 69 64 20 47 65 74 49 6e 64 65 78 43 6f 6c  void GetIndexCol
15970 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f 28  umnExtendedInfo(
15980 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 2c  string database,
15990 20 73 74 72 69 6e 67 20 69 6e 64 65 78 2c 20 73   string index, s
159a0 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75  tring column, ou
159b0 74 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20  t int sortMode, 
159c0 6f 75 74 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c  out int onError,
159d0 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c   out string coll
159e0 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a  ationSequence)..
159f0 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
15a00 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
15a10 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 3b 0d     IntPtr coll;.
15a20 0a 20 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c  .      int colll
15a30 65 6e 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74  en;..      SQLit
15a40 65 45 72 72 6f 72 43 6f 64 65 20 72 63 3b 0d 0a  eErrorCode rc;..
15a50 0d 0a 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73  ..      rc = Uns
15a60 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
15a70 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63  .sqlite3_index_c
15a80 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72  olumn_info_inter
15a90 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  op(_sql, ToUTF8(
15aa0 64 61 74 61 62 61 73 65 29 2c 20 54 6f 55 54 46  database), ToUTF
15ab0 38 28 69 6e 64 65 78 29 2c 20 54 6f 55 54 46 38  8(index), ToUTF8
15ac0 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 73 6f  (column), out so
15ad0 72 74 4d 6f 64 65 2c 20 6f 75 74 20 6f 6e 45 72  rtMode, out onEr
15ae0 72 6f 72 2c 20 6f 75 74 20 63 6f 6c 6c 2c 20 6f  ror, out coll, o
15af0 75 74 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20  ut colllen);..  
15b00 20 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51      if (rc != SQ
15b10 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
15b20 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
15b30 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20  teException(rc, 
15b40 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  null);....      
15b50 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  collationSequenc
15b60 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
15b70 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b  (coll, colllen);
15b80 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 73  ..#else..      s
15b90 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20 20  ortMode = 0;..  
15ba0 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20 32 3b      onError = 2;
15bb0 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f  ..      collatio
15bc0 6e 53 65 71 75 65 6e 63 65 20 3d 20 22 42 49 4e  nSequence = "BIN
15bd0 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ARY";..#endif.. 
15be0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
15bf0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
15c00 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69  LiteErrorCode Fi
15c10 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72 69 6e 67  leControl(string
15c20 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74 20 6f 70   zDbName, int op
15c30 2c 20 49 6e 74 50 74 72 20 70 41 72 67 29 0d 0a  , IntPtr pArg)..
15c40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
15c50 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
15c60 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
15c70 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71  file_control(_sq
15c80 6c 2c 20 28 7a 44 62 4e 61 6d 65 20 21 3d 20 6e  l, (zDbName != n
15c90 75 6c 6c 29 20 3f 20 54 6f 55 54 46 38 28 7a 44  ull) ? ToUTF8(zD
15ca0 62 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f  bName) : null, o
15cb0 70 2c 20 70 41 72 67 29 3b 0d 0a 20 20 20 20 7d  p, pArg);..    }
15cc0 0d 0a 20 20 7d 0d 0a 7d 0d 0a                    ..  }..}..