System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 91160a5f3e624582e0fff90ed43a5b2cac326b7b:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 20 0d 0a  soft.com).. * ..
00b0: 20 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74   * Released to t
00c0: 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e  he public domain
00d0: 2c 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77  , use at your ow
00e0: 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a  n risk!.. ******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65  **/....namespace
0130: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
0140: 69 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20  ite..{..  using 
0150: 53 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67  System;..  using
0160: 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69   System.Collecti
0170: 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 0d 0a  ons.Generic;....
0180: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
0190: 5f 32 30 20 26 26 20 28 54 52 41 43 45 5f 43 4f  _20 && (TRACE_CO
01a0: 4e 4e 45 43 54 49 4f 4e 20 7c 7c 20 54 52 41 43  NNECTION || TRAC
01b0: 45 5f 53 54 41 54 45 4d 45 4e 54 29 0d 0a 20 20  E_STATEMENT)..  
01c0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61  using System.Dia
01d0: 67 6e 6f 73 74 69 63 73 3b 0d 0a 23 65 6e 64 69  gnostics;..#endi
01e0: 66 0d 0a 0d 0a 20 20 75 73 69 6e 67 20 53 79 73  f....  using Sys
01f0: 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f  tem.Globalizatio
0200: 6e 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  n;..  using Syst
0210: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0220: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 20 20 75  opServices;..  u
0230: 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74  sing System.Text
0240: 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;....  /// <summ
0250: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  ary>..  /// This
0260: 20 69 73 20 74 68 65 20 6d 65 74 68 6f 64 20 73   is the method s
0270: 69 67 6e 61 74 75 72 65 20 66 6f 72 20 74 68 65  ignature for the
0280: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
0290: 72 61 72 79 20 6c 6f 67 67 69 6e 67 20 63 61 6c  rary logging cal
02a0: 6c 62 61 63 6b 0d 0a 20 20 2f 2f 2f 20 66 75 6e  lback..  /// fun
02b0: 63 74 69 6f 6e 20 66 6f 72 20 75 73 65 20 77 69  ction for use wi
02c0: 74 68 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  th sqlite3_log()
02d0: 20 61 6e 64 20 74 68 65 20 53 51 4c 49 54 45 5f   and the SQLITE_
02e0: 43 4f 4e 46 49 47 5f 4c 4f 47 2e 0d 0a 20 20 2f  CONFIG_LOG...  /
02f0: 2f 2f 0d 0a 20 20 2f 2f 2f 20 57 41 52 4e 49 4e  //..  /// WARNIN
0300: 47 3a 20 54 68 69 73 20 64 65 6c 65 67 61 74 65  G: This delegate
0310: 20 69 73 20 75 73 65 64 20 6d 6f 72 65 2d 6f 72   is used more-or
0320: 2d 6c 65 73 73 20 64 69 72 65 63 74 6c 79 20 62  -less directly b
0330: 79 20 6e 61 74 69 76 65 20 63 6f 64 65 2c 20 64  y native code, d
0340: 6f 0d 0a 20 20 2f 2f 2f 20 20 20 20 20 20 20 20  o..  ///        
0350: 20 20 6e 6f 74 20 6d 6f 64 69 66 79 20 69 74 73    not modify its
0360: 20 74 79 70 65 20 73 69 67 6e 61 74 75 72 65 2e   type signature.
0370: 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
0380: 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  y>..  /// <param
0390: 20 6e 61 6d 65 3d 22 70 55 73 65 72 44 61 74 61   name="pUserData
03a0: 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 65 78  ">..  /// The ex
03b0: 74 72 61 20 64 61 74 61 20 61 73 73 6f 63 69 61  tra data associa
03c0: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6d 65  ted with this me
03d0: 73 73 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d 0a  ssage, if any...
03e0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
03f0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
0400: 65 3d 22 65 72 72 6f 72 43 6f 64 65 22 3e 0d 0a  e="errorCode">..
0410: 20 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72 20    /// The error 
0420: 63 6f 64 65 20 61 73 73 6f 63 69 61 74 65 64 20  code associated 
0430: 77 69 74 68 20 74 68 69 73 20 6d 65 73 73 61 67  with this messag
0440: 65 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  e...  /// </para
0450: 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  m>..  /// <param
0460: 20 6e 61 6d 65 3d 22 70 4d 65 73 73 61 67 65 22   name="pMessage"
0470: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 6d 65 73  >..  /// The mes
0480: 73 61 67 65 20 73 74 72 69 6e 67 20 74 6f 20 62  sage string to b
0490: 65 20 6c 6f 67 67 65 64 2e 0d 0a 20 20 2f 2f 2f  e logged...  ///
04a0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 23 69 66 20 21   </param>..#if !
04b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
04c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 5b 55 6e  FRAMEWORK..  [Un
04d0: 6d 61 6e 61 67 65 64 46 75 6e 63 74 69 6f 6e 50  managedFunctionP
04e0: 6f 69 6e 74 65 72 28 43 61 6c 6c 69 6e 67 43 6f  ointer(CallingCo
04f0: 6e 76 65 6e 74 69 6f 6e 2e 43 64 65 63 6c 29 5d  nvention.Cdecl)]
0500: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 69 6e 74 65  ..#endif..  inte
0510: 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f  rnal delegate vo
0520: 69 64 20 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c  id SQLiteLogCall
0530: 62 61 63 6b 28 49 6e 74 50 74 72 20 70 55 73 65  back(IntPtr pUse
0540: 72 44 61 74 61 2c 20 69 6e 74 20 65 72 72 6f 72  rData, int error
0550: 43 6f 64 65 2c 20 49 6e 74 50 74 72 20 70 4d 65  Code, IntPtr pMe
0560: 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f  ssage);....  ///
0570: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f   <summary>..  //
0580: 2f 20 54 68 69 73 20 63 6c 61 73 73 20 69 6d 70  / This class imp
0590: 6c 65 6d 65 6e 74 73 20 53 51 4c 69 74 65 42 61  lements SQLiteBa
05a0: 73 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2c 20 61  se completely, a
05b0: 6e 64 20 69 73 20 74 68 65 20 67 75 74 73 20 6f  nd is the guts o
05c0: 66 20 74 68 65 20 63 6f 64 65 20 74 68 61 74 20  f the code that 
05d0: 69 6e 74 65 72 6f 70 27 73 20 53 51 4c 69 74 65  interop's SQLite
05e0: 20 77 69 74 68 20 2e 4e 45 54 0d 0a 20 20 2f 2f   with .NET..  //
05f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0600: 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 53  internal class S
0610: 51 4c 69 74 65 33 20 3a 20 53 51 4c 69 74 65 42  QLite3 : SQLiteB
0620: 61 73 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 70 72  ase..  {..    pr
0630: 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a  ivate static obj
0640: 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e  ect syncRoot = n
0650: 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 0d 0a  ew object();....
0660: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 2f 2f 20 4e      //..    // N
0670: 4f 54 45 3a 20 54 68 69 73 20 69 73 20 74 68 65  OTE: This is the
0680: 20 70 75 62 6c 69 63 20 6b 65 79 20 66 6f 72 20   public key for 
0690: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
06a0: 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 2e  SQLite assembly.
06b0: 20 20 49 66 20 79 6f 75 20 63 68 61 6e 67 65 20    If you change 
06c0: 74 68 65 0d 0a 20 20 20 20 2f 2f 20 20 20 20 20  the..    //     
06d0: 20 20 53 4e 4b 20 66 69 6c 65 2c 20 79 6f 75 20    SNK file, you 
06e0: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 63 68 61  will need to cha
06f0: 6e 67 65 20 74 68 69 73 20 61 73 20 77 65 6c 6c  nge this as well
0700: 2e 0d 0a 20 20 20 20 2f 2f 0d 0a 20 20 20 20 69  ...    //..    i
0710: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74  nternal const st
0720: 72 69 6e 67 20 50 75 62 6c 69 63 4b 65 79 20 3d  ring PublicKey =
0730: 0d 0a 20 20 20 20 20 20 20 20 22 30 30 32 34 30  ..        "00240
0740: 30 30 30 30 34 38 30 30 30 30 30 39 34 30 30 30  0000480000094000
0750: 30 30 30 30 36 30 32 30 30 30 30 30 30 32 34 30  0000602000000240
0760: 30 30 30 35 32 35 33 34 31 33 31 30 30 30 34 30  0005253413100040
0770: 30 30 30 30 31 30 30 30 31 30 30 30 35 61 32 38  0000100010005a28
0780: 38 64 65 35 36 38 37 63 34 65 31 22 20 2b 0d 0a  8de5687c4e1" +..
0790: 20 20 20 20 20 20 20 20 22 62 36 32 31 64 64 66          "b621ddf
07a0: 66 35 64 38 34 34 37 32 37 34 31 38 39 35 36 39  f5d8447274189569
07b0: 39 37 66 34 37 35 65 62 38 32 39 34 32 39 65 34  97f475eb829429e4
07c0: 31 31 61 66 66 33 65 39 33 66 39 37 62 37 30 64  11aff3e93f97b70d
07d0: 65 36 39 38 62 39 37 32 36 34 30 39 32 35 62 64  e698b972640925bd
07e0: 64 34 34 32 38 30 64 66 30 22 20 2b 0d 0a 20 20  d44280df0" +..  
07f0: 20 20 20 20 20 20 22 61 32 35 61 38 34 33 32 36        "a25a84326
0800: 36 39 37 33 37 30 34 31 33 37 63 62 62 30 65 37  6973704137cbb0e7
0810: 34 34 31 63 31 66 65 37 63 61 65 34 65 32 34 34  441c1fe7cae4e244
0820: 30 61 65 39 31 61 62 38 63 64 65 33 39 33 33 66  0ae91ab8cde3933f
0830: 65 62 63 62 31 61 63 34 38 64 64 33 33 62 34 30  ebcb1ac48dd33b40
0840: 65 31 33 63 34 32 31 22 20 2b 0d 0a 20 20 20 20  e13c421" +..    
0850: 20 20 20 20 22 64 38 32 31 35 63 31 38 61 34 33      "d8215c18a43
0860: 34 39 61 34 33 36 64 64 34 39 39 65 33 63 33 38  49a436dd499e3c38
0870: 35 63 63 36 38 33 30 31 35 66 38 38 36 66 36 63  5cc683015f886f6c
0880: 31 30 62 64 39 30 31 31 35 65 62 32 62 64 36 31  10bd90115eb2bd61
0890: 62 36 37 37 35 30 38 33 39 65 33 61 31 39 39 34  b67750839e3a1994
08a0: 31 64 63 39 63 22 3b 0d 0a 0d 0a 23 69 66 20 21  1dc9c";....#if !
08b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
08c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 69  FRAMEWORK..    i
08d0: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74  nternal const st
08e0: 72 69 6e 67 20 44 65 73 69 67 6e 65 72 56 65 72  ring DesignerVer
08f0: 73 69 6f 6e 20 3d 20 22 31 2e 30 2e 38 37 2e 30  sion = "1.0.87.0
0900: 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  ";..#endif....  
0910: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0920: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 70 61  .    /// The opa
0930: 71 75 65 20 70 6f 69 6e 74 65 72 20 72 65 74 75  que pointer retu
0940: 72 6e 65 64 20 74 6f 20 75 73 20 62 79 20 74 68  rned to us by th
0950: 65 20 73 71 6c 69 74 65 20 70 72 6f 76 69 64 65  e sqlite provide
0960: 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  r..    /// </sum
0970: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0980: 63 74 65 64 20 69 6e 74 65 72 6e 61 6c 20 53 51  cted internal SQ
0990: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
09a0: 6e 64 6c 65 20 5f 73 71 6c 3b 0d 0a 20 20 20 20  ndle _sql;..    
09b0: 70 72 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67  protected string
09c0: 20 5f 66 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20   _fileName;..   
09d0: 20 70 72 6f 74 65 63 74 65 64 20 62 6f 6f 6c 20   protected bool 
09e0: 5f 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 70  _usePool;..    p
09f0: 72 6f 74 65 63 74 65 64 20 69 6e 74 20 5f 70 6f  rotected int _po
0a00: 6f 6c 56 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 23 69  olVersion;....#i
0a10: 66 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54  f (NET_35 || NET
0a20: 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 29 20 26  _40 || NET_45) &
0a30: 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  & !PLATFORM_COMP
0a40: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
0a50: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 5f    private bool _
0a60: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 3b 0d  buildingSchema;.
0a70: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
0a80: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0a90: 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72 2d 64    /// The user-d
0aa0: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
0ab0: 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e 20 74   registered on t
0ac0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  his connection..
0ad0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ae0: 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  y>..    protecte
0af0: 64 20 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 20 20 20 20 20 20  ileName;..      
11d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
11e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
11f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1240: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
1250: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
1260: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
1270: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1280: 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20   disposed;..    
1290: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
12a0: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
12b0: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b 0d  throw */..    {.
12c0: 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49  .#if THROW_ON_DI
12d0: 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20  SPOSED..        
12e0: 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20  if (disposed).. 
12f0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1300: 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
1310: 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74 79 70  sedException(typ
1320: 65 6f 66 28 53 51 4c 69 74 65 33 29 2e 4e 61 6d  eof(SQLite3).Nam
1330: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
1340: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
1350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
13b0: 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72   protected overr
13c0: 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65  ide void Dispose
13d0: 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29  (bool disposing)
13e0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
13f0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1410: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
1420: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1430: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
1440: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
1450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1460: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1470: 20 20 20 2f 2f 20 20 20 20 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 0d 0a 20  /////////////.. 
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14b0: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
14c0: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
14d0: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
14e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
14f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1510: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1520: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1560: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
1570: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
1580: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
1590: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d0: 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45  ////....#if INTE
15e0: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
15f0: 45 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  E..             
1600: 20 20 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65     DisposeModule
1610: 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  s();..#endif....
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1630: 43 6c 6f 73 65 28 66 61 6c 73 65 29 3b 20 2f 2a  Close(false); /*
1640: 20 44 69 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e   Disposing, cann
1650: 6f 74 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a 20 20  ot throw. */..  
1660: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1670: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1680: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
1690: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16a0: 62 61 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73  base.Dispose(dis
16b0: 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20  posing);....    
16c0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
16d0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
16e0: 20 45 76 65 72 79 74 68 69 6e 67 20 73 68 6f 75   Everything shou
16f0: 6c 64 20 62 65 20 66 75 6c 6c 79 20 64 69 73 70  ld be fully disp
1700: 6f 73 65 64 20 61 74 20 74 68 69 73 20 70 6f 69  osed at this poi
1710: 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt...           
1720: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1730: 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65   disposed = true
1740: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1750: 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
1760: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
1770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69  //////////....#i
17d0: 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  f INTEROP_VIRTUA
17e0: 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f  L_TABLE..    ///
17f0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1800: 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
1810: 61 74 74 65 6d 70 74 73 20 74 6f 20 64 69 73 70  attempts to disp
1820: 6f 73 65 20 6f 66 20 61 6c 6c 20 74 68 65 20 3c  ose of all the <
1830: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
1840: 4d 6f 64 75 6c 65 22 20 2f 3e 20 64 65 72 69 76  Module" /> deriv
1850: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6f 62 6a 65  ed..    /// obje
1860: 63 74 20 69 6e 73 74 61 6e 63 65 73 20 63 75 72  ct instances cur
1870: 72 65 6e 74 6c 79 20 61 73 73 6f 63 69 61 74 65  rently associate
1880: 64 20 77 69 74 68 20 74 68 65 20 6e 61 74 69 76  d with the nativ
1890: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
18a0: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
18b0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
18c0: 70 72 69 76 61 74 65 20 76 6f 69 64 20 44 69 73  private void Dis
18d0: 70 6f 73 65 4d 6f 64 75 6c 65 73 28 29 0d 0a 20  poseModules().. 
18e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
18f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
1900: 45 3a 20 49 66 20 61 6e 79 20 6d 6f 64 75 6c 65  E: If any module
1910: 73 20 77 65 72 65 20 63 72 65 61 74 65 64 2c 20  s were created, 
1920: 61 74 74 65 6d 70 74 20 74 6f 20 64 69 73 70 6f  attempt to dispo
1930: 73 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f  se of..        /
1940: 2f 20 20 20 20 20 20 20 74 68 65 6d 20 6e 6f 77  /       them now
1950: 2e 20 20 54 68 69 73 20 63 6f 64 65 20 69 73 20  .  This code is 
1960: 64 65 73 69 67 6e 65 64 20 74 6f 20 61 76 6f 69  designed to avoi
1970: 64 20 74 68 72 6f 77 69 6e 67 0d 0a 20 20 20 20  d throwing..    
1980: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 63      //       exc
1990: 65 70 74 69 6f 6e 73 20 75 6e 6c 65 73 73 20 74  eptions unless t
19a0: 68 65 20 44 69 73 70 6f 73 65 20 6d 65 74 68 6f  he Dispose metho
19b0: 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 0d  d of the module.
19c0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
19d0: 20 20 69 74 73 65 6c 66 20 74 68 72 6f 77 73 20    itself throws 
19e0: 61 6e 20 65 78 63 65 70 74 69 6f 6e 2e 0d 0a 20  an exception... 
19f0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1a00: 20 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20     if (_modules 
1a10: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
1a20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1a30: 20 66 6f 72 65 61 63 68 20 28 4b 65 79 56 61 6c   foreach (KeyVal
1a40: 75 65 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 53  uePair<string, S
1a50: 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 20 70 61 69  QLiteModule> pai
1a60: 72 20 69 6e 20 5f 6d 6f 64 75 6c 65 73 29 0d 0a  r in _modules)..
1a70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1a90: 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
1aa0: 6c 65 20 3d 20 70 61 69 72 2e 56 61 6c 75 65 3b  le = pair.Value;
1ab0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ac0: 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
1ad0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1af0: 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
1b00: 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
1b10: 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
1b20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1b30: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65      }..    }..#e
1b40: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  ndif....    ////
1b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1bb0: 20 20 20 2f 2f 20 49 74 20 69 73 6e 27 74 20 6e     // It isn't n
1bc0: 65 63 65 73 73 61 72 79 20 74 6f 20 63 6c 65 61  ecessary to clea
1bd0: 6e 75 70 20 61 6e 79 20 66 75 6e 63 74 69 6f 6e  nup any function
1be0: 73 20 77 65 27 76 65 20 72 65 67 69 73 74 65 72  s we've register
1bf0: 65 64 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 6e  ed.  If the conn
1c00: 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 20 67  ection..    // g
1c10: 6f 65 73 20 74 6f 20 74 68 65 20 70 6f 6f 6c 20  oes to the pool 
1c20: 61 6e 64 20 69 73 20 72 65 73 75 72 72 65 63 74  and is resurrect
1c30: 65 64 20 6c 61 74 65 72 2c 20 72 65 2d 72 65 67  ed later, re-reg
1c40: 69 73 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e  istered function
1c50: 73 20 77 69 6c 6c 20 6f 76 65 72 77 72 69 74 65  s will overwrite
1c60: 20 74 68 65 0d 0a 20 20 20 20 2f 2f 20 70 72 65   the..    // pre
1c70: 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 2e  vious functions.
1c80: 20 20 54 68 65 20 53 51 4c 69 74 65 46 75 6e 63    The SQLiteFunc
1c90: 74 69 6f 6e 43 6f 6f 6b 69 65 48 61 6e 64 6c 65  tionCookieHandle
1ca0: 20 77 69 6c 6c 20 74 61 6b 65 20 63 61 72 65 20   will take care 
1cb0: 6f 66 20 66 72 65 65 69 6e 67 20 75 6e 6d 61 6e  of freeing unman
1cc0: 61 67 65 64 0d 0a 20 20 20 20 2f 2f 20 72 65 73  aged..    // res
1cd0: 6f 75 72 63 65 73 20 62 65 6c 6f 6e 67 69 6e 67  ources belonging
1ce0: 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
1cf0: 6c 79 2d 72 65 67 69 73 74 65 72 65 64 20 66 75  ly-registered fu
1d00: 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 69 6e  nctions...    in
1d10: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
1d20: 76 6f 69 64 20 43 6c 6f 73 65 28 62 6f 6f 6c 20  void Close(bool 
1d30: 63 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 7b  canThrow)..    {
1d40: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c  ..      if (_sql
1d50: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
1d60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
1d70: 20 28 21 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c   (!_sql.OwnHandl
1d80: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  e)..          {.
1d90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
1da0: 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  sql = null;..   
1db0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1dc0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n;..          }.
1dd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
1de0: 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20  (_usePool)..    
1df0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1e00: 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69 74         if (SQLit
1e10: 65 42 61 73 65 2e 52 65 73 65 74 43 6f 6e 6e 65  eBase.ResetConne
1e20: 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 5f 73 71 6c  ction(_sql, _sql
1e30: 2c 20 63 61 6e 54 68 72 6f 77 29 29 0d 0a 20 20  , canThrow))..  
1e40: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23              {..#
1e50: 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  if INTEROP_VIRTU
1e60: 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 20 20  AL_TABLE..      
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
1e80: 6f 73 65 4d 6f 64 75 6c 65 73 28 29 3b 0d 0a 23  oseModules();..#
1e90: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
1ea0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1eb0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e  eConnectionPool.
1ec0: 41 64 64 28 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f  Add(_fileName, _
1ed0: 73 71 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f  sql, _poolVersio
1ee0: 6e 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f  n);....#if !NET_
1ef0: 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
1f00: 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f20: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
1f30: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
1f40: 22 43 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 53 75  "Close (Pool) Su
1f50: 63 63 65 73 73 3a 20 7b 30 7d 22 2c 20 5f 73 71  ccess: {0}", _sq
1f60: 6c 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  l));..#endif..  
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
1f80: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
1f90: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
1fa0: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
1fb0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
1fc0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1fe0: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53  race.WriteLine(S
1ff0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43 6c  tring.Format("Cl
2000: 6f 73 65 20 28 50 6f 6f 6c 29 20 46 61 69 6c 75  ose (Pool) Failu
2010: 72 65 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29 29  re: {0}", _sql))
2020: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2030: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20   }..#endif..    
2040: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2050: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
2060: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2070: 20 20 20 20 5f 73 71 6c 2e 44 69 73 70 6f 73 65      _sql.Dispose
2080: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ();..          }
2090: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c  ..          _sql
20a0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
20b0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
20c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2120: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
2130: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74  ary>..    /// At
2140: 74 65 6d 70 74 73 20 74 6f 20 69 6e 74 65 72 72  tempts to interr
2150: 75 70 74 20 74 68 65 20 71 75 65 72 79 20 63 75  upt the query cu
2160: 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
2170: 67 20 6f 6e 20 74 68 65 20 61 73 73 6f 63 69 61  g on the associa
2180: 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74  ted..    /// nat
2190: 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ive database con
21a0: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
21b0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
21c0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
21d0: 69 64 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28  ide void Cancel(
21e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
21f0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2200: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 74 65  ods.sqlite3_inte
2210: 72 72 75 70 74 28 5f 73 71 6c 29 3b 0d 0a 20 20  rrupt(_sql);..  
2220: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
2230: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2240: 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  / This function 
2250: 62 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65 66  binds a user-def
2260: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f  ined function to
2270: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e   the connection.
2280: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2290: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
22a0: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74  aram name="funct
22b0: 69 6f 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a  ionAttribute">..
22c0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
22d0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e   cref="SQLiteFun
22e0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f  ctionAttribute"/
22f0: 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
2300: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20  e containing..  
2310: 20 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61    /// the metada
2320: 74 61 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74  ta for the funct
2330: 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e  ion to be bound.
2340: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
2350: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
2360: 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f  am name="functio
2370: 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  n">..    /// The
2380: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
2390: 74 65 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62  teFunction"/> ob
23a0: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74 68  ject instance th
23b0: 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  at implements th
23c0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74  e..    /// funct
23d0: 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e  ion to be bound.
23e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
23f0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
2400: 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e  am name="flags">
2410: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c  ..    /// The fl
2420: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
2430: 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 20 63  ith the parent c
2440: 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74  onnection object
2450: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
2460: 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
2470: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
2480: 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20  BindFunction(.. 
2490: 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e         SQLiteFun
24a0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 66  ctionAttribute f
24b0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
24c0: 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ,..        SQLit
24d0: 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69  eFunction functi
24e0: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  on,..        SQL
24f0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
2500: 67 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20  gs flags..      
2510: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
2520: 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69      SQLiteFuncti
2530: 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28  on.BindFunction(
2540: 74 68 69 73 2c 20 66 75 6e 63 74 69 6f 6e 41 74  this, functionAt
2550: 74 72 69 62 75 74 65 2c 20 66 75 6e 63 74 69 6f  tribute, functio
2560: 6e 2c 20 66 6c 61 67 73 29 3b 0d 0a 0d 0a 20 20  n, flags);....  
2570: 20 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74        if (_funct
2580: 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
2590: 20 20 20 20 20 20 20 20 20 20 20 5f 66 75 6e 63             _func
25a0: 74 69 6f 6e 73 20 3d 20 6e 65 77 20 4c 69 73 74  tions = new List
25b0: 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e  <SQLiteFunction>
25c0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f  ();....        _
25d0: 66 75 6e 63 74 69 6f 6e 73 2e 41 64 64 28 66 75  functions.Add(fu
25e0: 6e 63 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 7d 0d  nction);..    }.
25f0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2600: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
2610: 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a  Version..    {..
2620: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
2630: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
2640: 72 6e 20 53 51 4c 69 74 65 33 2e 53 51 4c 69 74  rn SQLite3.SQLit
2650: 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20  eVersion;..     
2660: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
2670: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
2680: 64 65 20 69 6e 74 20 56 65 72 73 69 6f 6e 4e 75  de int VersionNu
2690: 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  mber..    {..   
26a0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
26b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
26c0: 53 51 4c 69 74 65 33 2e 53 51 4c 69 74 65 56 65  SQLite3.SQLiteVe
26d0: 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20  rsionNumber;..  
26e0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
26f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
2700: 74 69 63 20 73 74 72 69 6e 67 20 44 65 66 69 6e  tic string Defin
2710: 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20  eConstants..    
2720: 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a  {..        get..
2730: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2740: 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69         StringBui
2750: 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65  lder result = ne
2760: 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28  w StringBuilder(
2770: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2780: 49 4c 69 73 74 3c 73 74 72 69 6e 67 3e 20 6c 69  IList<string> li
2790: 73 74 20 3d 20 53 51 4c 69 74 65 44 65 66 69 6e  st = SQLiteDefin
27a0: 65 43 6f 6e 73 74 61 6e 74 73 2e 4f 70 74 69 6f  eConstants.Optio
27b0: 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  nList;....      
27c0: 20 20 20 20 20 20 69 66 20 28 6c 69 73 74 20 21        if (list !
27d0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
27e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27f0: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
2800: 28 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 20  (string element 
2810: 69 6e 20 6c 69 73 74 29 0d 0a 20 20 20 20 20 20  in list)..      
2820: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2840: 20 69 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20   if (element == 
2850: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2870: 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
2880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2890: 69 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74  if (result.Lengt
28a0: 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  h > 0)..        
28b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c0: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20  result.Append(' 
28d0: 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ');....         
28e0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
28f0: 74 2e 41 70 70 65 6e 64 28 65 6c 65 6d 65 6e 74  t.Append(element
2900: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2910: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2920: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2930: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
2940: 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  t.ToString();.. 
2950: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
2960: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2970: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 53 51  static string SQ
2980: 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20  LiteVersion..   
2990: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
29a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29b0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
29c0: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
29d0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
29e0: 6c 69 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31  libversion(), -1
29f0: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
2a00: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
2a10: 61 6c 20 73 74 61 74 69 63 20 69 6e 74 20 53 51  al static int SQ
2a20: 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65  LiteVersionNumbe
2a30: 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  r..    {..      
2a40: 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  get..      {..  
2a50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
2a60: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2a70: 2e 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73  .sqlite3_libvers
2a80: 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 3b 0d 0a 20  ion_number();.. 
2a90: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2aa0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
2ab0: 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69  atic string SQLi
2ac0: 74 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20  teSourceId..    
2ad0: 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20  {..      get..  
2ae0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
2af0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
2b00: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
2b10: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73  ethods.sqlite3_s
2b20: 6f 75 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d  ourceid(), -1);.
2b30: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
2b40: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2b50: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 41 75  override bool Au
2b60: 74 6f 43 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d  toCommit..    {.
2b70: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
2b80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
2b90: 75 72 6e 20 49 73 41 75 74 6f 63 6f 6d 6d 69 74  urn IsAutocommit
2ba0: 28 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20  (_sql, _sql);.. 
2bb0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2bc0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
2bd0: 65 72 72 69 64 65 20 6c 6f 6e 67 20 4c 61 73 74  erride long Last
2be0: 49 6e 73 65 72 74 52 6f 77 49 64 0d 0a 20 20 20  InsertRowId..   
2bf0: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
2c00: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
2c10: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
2c20: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
2c30: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
2c40: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2c50: 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
2c60: 6f 77 69 64 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c  owid(_sql);..#el
2c70: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
2c80: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6e  ARD..        lon
2c90: 67 20 72 6f 77 49 64 20 3d 20 30 3b 0d 0a 20 20  g rowId = 0;..  
2ca0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
2cb0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
2cc0: 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
2cd0: 77 69 64 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  wid_interop(_sql
2ce0: 2c 20 72 65 66 20 72 6f 77 49 64 29 3b 0d 0a 20  , ref rowId);.. 
2cf0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 6f         return ro
2d00: 77 49 64 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  wId;..#else..   
2d10: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
2d20: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
2d30: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
2d40: 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  f..      }..    
2d50: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
2d60: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
2d70: 68 61 6e 67 65 73 0d 0a 20 20 20 20 7b 0d 0a 20  hanges..    {.. 
2d80: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
2d90: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
2da0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
2db0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
2dc0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
2dd0: 74 65 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65  te3_changes_inte
2de0: 72 6f 70 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 73  rop(_sql);..#els
2df0: 65 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  e..        retur
2e00: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
2e10: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68  thods.sqlite3_ch
2e20: 61 6e 67 65 73 28 5f 73 71 6c 29 3b 0d 0a 23 65  anges(_sql);..#e
2e30: 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ndif..      }.. 
2e40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
2e50: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
2e60: 6e 67 20 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20  ng MemoryUsed.. 
2e70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
2e80: 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50  .      {..#if !P
2e90: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
2ea0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
2eb0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
2ec0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
2ed0: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64  ite3_memory_used
2ee0: 28 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  ();..#elif !SQLI
2ef0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
2f00: 20 20 20 20 20 6c 6f 6e 67 20 62 79 74 65 73 20       long bytes 
2f10: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e  = 0;..        Un
2f20: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
2f30: 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79  s.sqlite3_memory
2f40: 5f 75 73 65 64 5f 69 6e 74 65 72 6f 70 28 72 65  _used_interop(re
2f50: 66 20 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20  f bytes);..     
2f60: 20 20 20 72 65 74 75 72 6e 20 62 79 74 65 73 3b     return bytes;
2f70: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
2f80: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
2f90: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
2fa0: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
2fb0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2fc0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
2fd0: 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f  erride long Memo
2fe0: 72 79 48 69 67 68 77 61 74 65 72 0d 0a 20 20 20  ryHighwater..   
2ff0: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
3000: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
3010: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
3020: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
3030: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
3040: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
3050: 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61  e3_memory_highwa
3060: 74 65 72 28 30 29 3b 0d 0a 23 65 6c 69 66 20 21  ter(0);..#elif !
3070: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
3080: 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 62 79  .        long by
3090: 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  tes = 0;..      
30a0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
30b0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65  thods.sqlite3_me
30c0: 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 5f 69  mory_highwater_i
30d0: 6e 74 65 72 6f 70 28 30 2c 20 72 65 66 20 62 79  nterop(0, ref by
30e0: 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  tes);..        r
30f0: 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23 65  eturn bytes;..#e
3100: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72  lse..        thr
3110: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
3120: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
3130: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
3140: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
3150: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3160: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
3170: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
3180: 75 6e 64 65 72 6c 79 69 6e 67 20 6e 61 74 69 76  underlying nativ
3190: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
31a0: 64 6c 65 20 69 73 20 6f 77 6e 65 64 0d 0a 20 20  dle is owned..  
31b0: 20 20 2f 2f 2f 20 62 79 20 74 68 69 73 20 69 6e    /// by this in
31c0: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f  stance...    ///
31d0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
31e0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
31f0: 64 65 20 62 6f 6f 6c 20 4f 77 6e 48 61 6e 64 6c  de bool OwnHandl
3200: 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  e..    {..      
3210: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
3220: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
3230: 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
3240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3250: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
3260: 65 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63  eException("no c
3270: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
3280: 20 61 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 0d   available");...
3290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
32a0: 75 72 6e 20 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64  urn _sql.OwnHand
32b0: 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  le;..        }..
32c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
32d0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
32e0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
32f0: 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 62  etMemoryStatus(b
3300: 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ool value)..    
3310: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
3320: 6e 20 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72  n StaticSetMemor
3330: 79 53 74 61 74 75 73 28 76 61 6c 75 65 29 3b 0d  yStatus(value);.
3340: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
3350: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51  ternal static SQ
3360: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74  LiteErrorCode St
3370: 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74 61  aticSetMemorySta
3380: 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d  tus(bool value).
3390: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
33a0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
33b0: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
33c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
33d0: 5f 63 6f 6e 66 69 67 5f 69 6e 74 28 0d 0a 20 20  _config_int(..  
33e0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
33f0: 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51  ConfigOpsEnum.SQ
3400: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53  LITE_CONFIG_MEMS
3410: 54 41 54 55 53 2c 20 76 61 6c 75 65 20 3f 20 31  TATUS, value ? 1
3420: 20 3a 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   : 0);....      
3430: 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20    return rc;..  
3440: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
3450: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
3460: 2f 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20 53  / Shutdown the S
3470: 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 73 6f 20  QLite engine so 
3480: 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
3490: 65 73 74 61 72 74 65 64 20 77 69 74 68 20 64 69  estarted with di
34a0: 66 66 65 72 65 6e 74 20 63 6f 6e 66 69 67 20 6f  fferent config o
34b0: 70 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f  ptions...    ///
34c0: 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75   We depend on au
34d0: 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  to initializatio
34e0: 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20  n to recover... 
34f0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
3500: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
3510: 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65  rns>Returns a re
3520: 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72  sult code</retur
3530: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
3540: 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
3550: 65 45 72 72 6f 72 43 6f 64 65 20 53 68 75 74 64  eErrorCode Shutd
3560: 6f 77 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  own()..    {..  
3570: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
3580: 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
3590: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
35a0: 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28  qlite3_shutdown(
35b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
35c0: 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  rn rc;..    }...
35d0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
35e0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65  y>..    /// Dete
35f0: 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20 61 73  rmines if the as
3600: 73 6f 63 69 61 74 65 64 20 6e 61 74 69 76 65 20  sociated native 
3610: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
3620: 65 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20  e is open...    
3630: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
3640: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
3650: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a  >..    /// Non-z
3660: 65 72 6f 20 69 66 20 74 68 65 20 61 73 73 6f 63  ero if the assoc
3670: 69 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f 6e  iated native con
3680: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69  nection handle i
3690: 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  s open...    ///
36a0: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
36b0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
36c0: 64 65 20 62 6f 6f 6c 20 49 73 4f 70 65 6e 28 29  de bool IsOpen()
36d0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
36e0: 20 72 65 74 75 72 6e 20 28 5f 73 71 6c 20 21 3d   return (_sql !=
36f0: 20 6e 75 6c 6c 29 20 26 26 20 21 5f 73 71 6c 2e   null) && !_sql.
3700: 49 73 49 6e 76 61 6c 69 64 20 26 26 20 21 5f 73  IsInvalid && !_s
3710: 71 6c 2e 49 73 43 6c 6f 73 65 64 3b 0d 0a 20 20  ql.IsClosed;..  
3720: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
3730: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
3740: 64 20 4f 70 65 6e 28 73 74 72 69 6e 67 20 73 74  d Open(string st
3750: 72 46 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 69 74  rFilename, SQLit
3760: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
3770: 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73   connectionFlags
3780: 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67  , SQLiteOpenFlag
3790: 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61 67 73 2c  sEnum openFlags,
37a0: 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53 69 7a 65   int maxPoolSize
37b0: 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29 0d  , bool usePool).
37c0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f  .    {..      //
37d0: 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a  ..      // NOTE:
37e0: 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
37f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
3800: 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 61  urrently open, a
3810: 74 74 65 6d 70 74 20 74 6f 0d 0a 20 20 20 20 20  ttempt to..     
3820: 20 2f 2f 20 20 20 20 20 20 20 63 6c 6f 73 65 20   //       close 
3830: 69 74 20 6e 6f 77 2e 20 20 54 68 69 73 20 6d 75  it now.  This mu
3840: 73 74 20 62 65 20 64 6f 6e 65 20 62 65 63 61 75  st be done becau
3850: 73 65 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65  se the file name
3860: 20 6f 72 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20   or..      //   
3870: 20 20 20 20 6f 74 68 65 72 20 70 61 72 61 6d 65      other parame
3880: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 69 6d  ters that may im
3890: 70 61 63 74 20 74 68 65 20 75 6e 64 65 72 6c 79  pact the underly
38a0: 69 6e 67 20 64 61 74 61 62 61 73 65 0d 0a 20 20  ing database..  
38b0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e      //       con
38c0: 6e 65 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65  nection may have
38d0: 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20   changed...     
38e0: 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f   //..      if (_
38f0: 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 43 6c 6f  sql != null) Clo
3900: 73 65 28 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20  se(true);....   
3910: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20     //..      // 
3920: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6e  NOTE: If the con
3930: 6e 65 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20  nection was not 
3940: 63 6c 6f 73 65 64 20 73 75 63 63 65 73 73 66 75  closed successfu
3950: 6c 6c 79 2c 20 74 68 72 6f 77 20 61 6e 0d 0a 20  lly, throw an.. 
3960: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78       //       ex
3970: 63 65 70 74 69 6f 6e 20 6e 6f 77 2e 0d 0a 20 20  ception now...  
3980: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66      //..      if
3990: 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d   (_sql != null).
39a0: 0a 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77  .          throw
39b0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
39c0: 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e  tion("connection
39d0: 20 68 61 6e 64 6c 65 20 69 73 20 73 74 69 6c 6c   handle is still
39e0: 20 61 63 74 69 76 65 22 29 3b 0d 0a 0d 0a 20 20   active");....  
39f0: 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 75      _usePool = u
3a00: 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 5f  sePool;..      _
3a10: 66 69 6c 65 4e 61 6d 65 20 3d 20 73 74 72 46 69  fileName = strFi
3a20: 6c 65 6e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  lename;....     
3a30: 20 69 66 20 28 75 73 65 50 6f 6f 6c 29 0d 0a 20   if (usePool).. 
3a40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3a50: 5f 73 71 6c 20 3d 20 53 51 4c 69 74 65 43 6f 6e  _sql = SQLiteCon
3a60: 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f  nectionPool.Remo
3a70: 76 65 28 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20  ve(strFilename, 
3a80: 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74  maxPoolSize, out
3a90: 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d   _poolVersion);.
3aa0: 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  ...#if !NET_COMP
3ab0: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
3ac0: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
3ad0: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
3ae0: 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ine(String.Forma
3af0: 74 28 22 4f 70 65 6e 20 28 50 6f 6f 6c 29 3a 20  t("Open (Pool): 
3b00: 7b 30 7d 22 2c 20 28 5f 73 71 6c 20 21 3d 20 6e  {0}", (_sql != n
3b10: 75 6c 6c 29 20 3f 20 5f 73 71 6c 2e 54 6f 53 74  ull) ? _sql.ToSt
3b20: 72 69 6e 67 28 29 20 3a 20 22 3c 6e 75 6c 6c 3e  ring() : "<null>
3b30: 22 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  "));..#endif..  
3b40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
3b50: 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29  f (_sql == null)
3b60: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
3b70: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
3b80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
3b90: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
3ba0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3bb0: 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54    finally /* NOT
3bc0: 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28  E: Thread.Abort(
3bd0: 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f  ) protection. */
3be0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
3bf0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 64 62         IntPtr db
3c00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  ;..          SQL
3c10: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d  iteErrorCode n;.
3c20: 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
3c30: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
3c40: 20 20 20 69 66 20 28 28 63 6f 6e 6e 65 63 74 69     if ((connecti
3c50: 6f 6e 46 6c 61 67 73 20 26 20 53 51 4c 69 74 65  onFlags & SQLite
3c60: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
3c70: 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74  NoExtensionFunct
3c80: 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69 74 65 43  ions) != SQLiteC
3c90: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e  onnectionFlags.N
3ca0: 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69  oExtensionFuncti
3cb0: 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ons)..          
3cc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  {..            n
3cd0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
3ce0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f  ethods.sqlite3_o
3cf0: 70 65 6e 5f 69 6e 74 65 72 6f 70 28 54 6f 55 54  pen_interop(ToUT
3d00: 46 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c  F8(strFilename),
3d10: 20 6f 70 65 6e 46 6c 61 67 73 2c 20 6f 75 74 20   openFlags, out 
3d20: 64 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  db);..          
3d30: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  }..          els
3d40: 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  e..#endif..     
3d50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3d60: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
3d70: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3d80: 74 65 33 5f 6f 70 65 6e 5f 76 32 28 54 6f 55 54  te3_open_v2(ToUT
3d90: 46 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c  F8(strFilename),
3da0: 20 6f 75 74 20 64 62 2c 20 6f 70 65 6e 46 6c 61   out db, openFla
3db0: 67 73 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  gs, IntPtr.Zero)
3dc0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
3dd0: 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
3de0: 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
3df0: 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
3e00: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
3e10: 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Line(String.Form
3e20: 61 74 28 22 4f 70 65 6e 3a 20 7b 30 7d 22 2c 20  at("Open: {0}", 
3e30: 64 62 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  db));..#endif...
3e40: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e  .          if (n
3e50: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
3e60: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
3e70: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
3e80: 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  n(n, null);..   
3e90: 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65         _sql = ne
3ea0: 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
3eb0: 6f 6e 48 61 6e 64 6c 65 28 64 62 2c 20 74 72 75  onHandle(db, tru
3ec0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
3ed0: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f 73          lock (_s
3ee0: 71 6c 29 20 7b 20 2f 2a 20 48 41 43 4b 3a 20 46  ql) { /* HACK: F
3ef0: 6f 72 63 65 20 74 68 65 20 53 79 6e 63 42 6c 6f  orce the SyncBlo
3f00: 63 6b 20 74 6f 20 62 65 20 22 63 72 65 61 74 65  ck to be "create
3f10: 64 22 20 6e 6f 77 2e 20 2a 2f 20 7d 0d 0a 20 20  d" now. */ }..  
3f20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f      }....      /
3f30: 2f 20 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e 73  / Bind functions
3f40: 20 74 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63 74   to this connect
3f50: 69 6f 6e 2e 20 20 49 66 20 61 6e 79 20 70 72 65  ion.  If any pre
3f60: 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 20  vious functions 
3f70: 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  of the same name
3f80: 0d 0a 20 20 20 20 20 20 2f 2f 20 77 65 72 65 20  ..      // were 
3f90: 61 6c 72 65 61 64 79 20 62 6f 75 6e 64 2c 20 74  already bound, t
3fa0: 68 65 6e 20 74 68 65 20 6e 65 77 20 62 69 6e 64  hen the new bind
3fb0: 69 6e 67 73 20 72 65 70 6c 61 63 65 20 74 68 65  ings replace the
3fc0: 20 6f 6c 64 2e 0d 0a 20 20 20 20 20 20 69 66 20   old...      if 
3fd0: 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  ((connectionFlag
3fe0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
3ff0: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64  tionFlags.NoBind
4000: 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53 51  Functions) != SQ
4010: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
4020: 61 67 73 2e 4e 6f 42 69 6e 64 46 75 6e 63 74 69  ags.NoBindFuncti
4030: 6f 6e 73 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ons)..      {.. 
4040: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 66 75           if (_fu
4050: 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  nctions == null)
4060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4070: 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77  _functions = new
4080: 20 4c 69 73 74 3c 53 51 4c 69 74 65 46 75 6e 63   List<SQLiteFunc
4090: 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20  tion>();....    
40a0: 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73        _functions
40b0: 2e 41 64 64 52 61 6e 67 65 28 6e 65 77 20 4c 69  .AddRange(new Li
40c0: 73 74 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  st<SQLiteFunctio
40d0: 6e 3e 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  n>(SQLiteFunctio
40e0: 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28  n.BindFunctions(
40f0: 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e  this, connection
4100: 46 6c 61 67 73 29 29 29 3b 0d 0a 20 20 20 20 20  Flags)));..     
4110: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 53 65 74 54   }....      SetT
4120: 69 6d 65 6f 75 74 28 30 29 3b 0d 0a 20 20 20 20  imeout(0);..    
4130: 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65 28 5f    GC.KeepAlive(_
4140: 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  sql);..    }....
4150: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
4160: 72 72 69 64 65 20 76 6f 69 64 20 43 6c 65 61 72  rride void Clear
4170: 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Pool()..    {.. 
4180: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
4190: 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50  ctionPool.ClearP
41a0: 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d  ool(_fileName);.
41b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
41c0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
41d0: 69 6e 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29 0d  int CountPool().
41e0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
41f0: 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
4200: 67 2c 20 69 6e 74 3e 20 63 6f 75 6e 74 73 20 3d  g, int> counts =
4210: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
4220: 69 6e 74 20 6f 70 65 6e 43 6f 75 6e 74 20 3d 20  int openCount = 
4230: 30 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  0;..        int 
4240: 63 6c 6f 73 65 43 6f 75 6e 74 20 3d 20 30 3b 0d  closeCount = 0;.
4250: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 74 6f 74  .        int tot
4260: 61 6c 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a  alCount = 0;....
4270: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
4280: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65 74  nnectionPool.Get
4290: 43 6f 75 6e 74 73 28 5f 66 69 6c 65 4e 61 6d 65  Counts(_fileName
42a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
42b0: 65 66 20 63 6f 75 6e 74 73 2c 20 72 65 66 20 6f  ef counts, ref o
42c0: 70 65 6e 43 6f 75 6e 74 2c 20 72 65 66 20 63 6c  penCount, ref cl
42d0: 6f 73 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20  oseCount,..     
42e0: 20 20 20 20 20 20 20 72 65 66 20 74 6f 74 61 6c         ref total
42f0: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
4300: 20 20 20 72 65 74 75 72 6e 20 74 6f 74 61 6c 43     return totalC
4310: 6f 75 6e 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ount;..    }....
4320: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
4330: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 69  rride void SetTi
4340: 6d 65 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f  meout(int nTimeo
4350: 75 74 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  utMS)..    {..  
4360: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
4370: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
4380: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4390: 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  te3_busy_timeout
43a0: 28 5f 73 71 6c 2c 20 6e 54 69 6d 65 6f 75 74 4d  (_sql, nTimeoutM
43b0: 53 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  S);..      if (n
43c0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
43d0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
43e0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
43f0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
4400: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
4410: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
4420: 72 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 28  rride bool Step(
4430: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
4440: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
4450: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
4460: 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61  ode n;..      Ra
4470: 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b  ndom rnd = null;
4480: 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74 61  ..      uint sta
4490: 72 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45  rttick = (uint)E
44a0: 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43  nvironment.TickC
44b0: 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e  ount;..      uin
44c0: 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e  t timeout = (uin
44d0: 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64  t)(stmt._command
44e0: 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74  ._commandTimeout
44f0: 20 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20   * 1000);....   
4500: 20 20 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d     while (true).
4510: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
4520: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
4530: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4540: 33 5f 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c  3_step(stmt._sql
4550: 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20  ite_stmt);....  
4560: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
4570: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 52  QLiteErrorCode.R
4580: 6f 77 29 20 72 65 74 75 72 6e 20 74 72 75 65 3b  ow) return true;
4590: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
45a0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
45b0: 64 65 2e 44 6f 6e 65 29 20 72 65 74 75 72 6e 20  de.Done) return 
45c0: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
45d0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
45e0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
45f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4600: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
4610: 43 6f 64 65 20 72 3b 0d 0a 0d 0a 20 20 20 20 20  Code r;....     
4620: 20 20 20 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72       // An error
4630: 20 6f 63 63 75 72 72 65 64 2c 20 61 74 74 65 6d   occurred, attem
4640: 70 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20  pt to reset the 
4650: 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 66 20 74  statement.  If t
4660: 68 65 20 72 65 73 65 74 20 77 6f 72 6b 65 64 20  he reset worked 
4670: 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20  because the..   
4680: 20 20 20 20 20 20 20 2f 2f 20 73 63 68 65 6d 61         // schema
4690: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 72 65   has changed, re
46a0: 2d 74 72 79 20 74 68 65 20 73 74 65 70 20 61 67  -try the step ag
46b0: 61 69 6e 2e 20 20 49 66 20 69 74 20 65 72 72 6f  ain.  If it erro
46c0: 72 65 64 20 6f 75 72 20 62 65 63 61 75 73 65 20  red our because 
46d0: 74 68 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20  the database..  
46e0: 20 20 20 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f          // is lo
46f0: 63 6b 65 64 2c 20 74 68 65 6e 20 6b 65 65 70 20  cked, then keep 
4700: 72 65 74 72 79 69 6e 67 20 75 6e 74 69 6c 20 74  retrying until t
4710: 68 65 20 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f  he command timeo
4720: 75 74 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20  ut occurs...    
4730: 20 20 20 20 20 20 72 20 3d 20 52 65 73 65 74 28        r = Reset(
4740: 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  stmt);....      
4750: 20 20 20 20 69 66 20 28 72 20 3d 3d 20 53 51 4c      if (r == SQL
4760: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
4770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
4780: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
4790: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
47a0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
47b0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
47c0: 20 28 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72   ((r == SQLiteEr
47d0: 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c  rorCode.Locked |
47e0: 7c 20 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  | r == SQLiteErr
47f0: 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20  orCode.Busy) && 
4800: 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d  stmt._command !=
4810: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
4820: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4830: 20 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d   // Keep trying.
4840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4850: 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f  (rnd == null) //
4860: 20 46 69 72 73 74 20 74 69 6d 65 20 77 65 27 76   First time we'v
4870: 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68  e encountered th
4880: 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20  e lock..        
4890: 20 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20        rnd = new 
48a0: 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20  Random();....   
48b0: 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77           // If w
48c0: 65 27 76 65 20 65 78 63 65 65 64 65 64 20 74 68  e've exceeded th
48d0: 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65  e command's time
48e0: 6f 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64  out, give up and
48f0: 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d   throw an error.
4900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4910: 28 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65  ((uint)Environme
4920: 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73  nt.TickCount - s
4930: 74 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f  tarttick > timeo
4940: 75 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ut)..           
4950: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4960: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
4970: 74 65 45 78 63 65 70 74 69 6f 6e 28 72 2c 20 47  teException(r, G
4980: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
4990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
49a0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
49b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
49c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  .              /
49d0: 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65  / Otherwise slee
49e0: 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61  p for a random a
49f0: 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70  mount of time up
4a00: 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20   to 150ms..     
4a10: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
4a20: 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64  Threading.Thread
4a30: 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28  .Sleep(rnd.Next(
4a40: 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20  1, 150));..     
4a50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4a60: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
4a70: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
4a80: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
4a90: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
4aa0: 45 72 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28  ErrorCode Reset(
4ab0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
4ac0: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
4ad0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
4ae0: 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  ode n;....#if !S
4af0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
4b00: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
4b10: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
4b20: 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65  lite3_reset_inte
4b30: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
4b40: 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a  _stmt);..#else..
4b50: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
4b60: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
4b70: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74  lite3_reset(stmt
4b80: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
4b90: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
4ba0: 20 2f 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d   // If the schem
4bb0: 61 20 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61  a changed, try a
4bc0: 6e 64 20 72 65 2d 70 72 65 70 61 72 65 20 69 74  nd re-prepare it
4bd0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
4be0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
4bf0: 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20  .Schema)..      
4c00: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65  {..        // Re
4c10: 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73  create a dummy s
4c20: 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20  tatement..      
4c30: 20 20 73 74 72 69 6e 67 20 73 74 72 3b 0d 0a 20    string str;.. 
4c40: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
4c50: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6d  LiteStatement tm
4c60: 70 20 3d 20 50 72 65 70 61 72 65 28 6e 75 6c 6c  p = Prepare(null
4c70: 2c 20 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65  , stmt._sqlState
4c80: 6d 65 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e  ment, null, (uin
4c90: 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64  t)(stmt._command
4ca0: 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74  ._commandTimeout
4cb0: 20 2a 20 31 30 30 30 29 2c 20 6f 75 74 20 73 74   * 1000), out st
4cc0: 72 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  r))..        {..
4cd0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e            // Fin
4ce0: 61 6c 69 7a 65 20 74 68 65 20 65 78 69 73 74 69  alize the existi
4cf0: 6e 67 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20  ng statement..  
4d00: 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71          stmt._sq
4d10: 6c 69 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73  lite_stmt.Dispos
4d20: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
4d30: 2f 2f 20 52 65 61 73 73 69 67 6e 20 61 20 6e 65  // Reassign a ne
4d40: 77 20 73 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e  w statement poin
4d50: 74 65 72 20 74 6f 20 74 68 65 20 6f 6c 64 20 73  ter to the old s
4d60: 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65  tatement and cle
4d70: 61 72 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  ar the temporary
4d80: 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20   one..          
4d90: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
4da0: 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f  t = tmp._sqlite_
4db0: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  stmt;..         
4dc0: 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d   tmp._sqlite_stm
4dd0: 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  t = null;....   
4de0: 20 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c         // Reappl
4df0: 79 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20  y parameters..  
4e00: 20 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e          stmt.Bin
4e10: 64 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a  dParameters();..
4e20: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4e30: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
4e40: 45 72 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e 6f 77  ErrorCode.Unknow
4e50: 6e 3b 20 2f 2f 20 52 65 73 65 74 20 77 61 73 20  n; // Reset was 
4e60: 4f 4b 2c 20 77 69 74 68 20 73 63 68 65 6d 61 20  OK, with schema 
4e70: 63 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d 0d  change..      }.
4e80: 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28  .      else if (
4e90: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
4ea0: 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e  Code.Locked || n
4eb0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
4ec0: 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20  ode.Busy)..     
4ed0: 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a     return n;....
4ee0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
4ef0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
4f00: 6b 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  k)..        thro
4f10: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
4f20: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
4f30: 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
4f40: 20 20 20 72 65 74 75 72 6e 20 6e 3b 20 2f 2f 20     return n; // 
4f50: 57 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20  We reset OK, no 
4f60: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a  schema changes..
4f70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
4f80: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
4f90: 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72  tring GetLastErr
4fa0: 6f 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  or()..    {..   
4fb0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
4fc0: 42 61 73 65 2e 47 65 74 4c 61 73 74 45 72 72 6f  Base.GetLastErro
4fd0: 72 28 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a  r(_sql, _sql);..
4fe0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
4ff0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
5000: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 50  QLiteStatement P
5010: 72 65 70 61 72 65 28 53 51 4c 69 74 65 43 6f 6e  repare(SQLiteCon
5020: 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72  nection cnn, str
5030: 69 6e 67 20 73 74 72 53 71 6c 2c 20 53 51 4c 69  ing strSql, SQLi
5040: 74 65 53 74 61 74 65 6d 65 6e 74 20 70 72 65 76  teStatement prev
5050: 69 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f  ious, uint timeo
5060: 75 74 4d 53 2c 20 6f 75 74 20 73 74 72 69 6e 67  utMS, out string
5070: 20 73 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20 20   strRemain)..   
5080: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 21 53   {..      if (!S
5090: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
50a0: 70 74 79 28 73 74 72 53 71 6c 29 29 0d 0a 20 20  pty(strSql))..  
50b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f      {..        /
50c0: 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f  /..        // NO
50d0: 54 45 3a 20 53 51 4c 69 74 65 20 64 6f 65 73 20  TE: SQLite does 
50e0: 6e 6f 74 20 73 75 70 70 6f 72 74 20 74 68 65 20  not support the 
50f0: 63 6f 6e 63 65 70 74 20 6f 66 20 73 65 70 61 72  concept of separ
5100: 61 74 65 20 73 63 68 65 6d 61 73 0d 0a 20 20 20  ate schemas..   
5110: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e       //       in
5120: 20 6f 6e 65 20 64 61 74 61 62 61 73 65 3b 20 74   one database; t
5130: 68 65 72 65 66 6f 72 65 2c 20 72 65 6d 6f 76 65  herefore, remove
5140: 20 74 68 65 20 62 61 73 65 20 73 63 68 65 6d 61   the base schema
5150: 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f   name..        /
5160: 2f 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20  /       used to 
5170: 73 6d 6f 6f 74 68 20 69 6e 74 65 67 72 61 74 69  smooth integrati
5180: 6f 6e 20 77 69 74 68 20 74 68 65 20 62 61 73 65  on with the base
5190: 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d   .NET Framework.
51a0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
51b0: 20 20 64 61 74 61 20 63 6c 61 73 73 65 73 2e 0d    data classes..
51c0: 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
51d0: 20 20 20 20 20 73 74 72 69 6e 67 20 62 61 73 65       string base
51e0: 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 28 63 6e  SchemaName = (cn
51f0: 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e  n != null) ? cnn
5200: 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  ._baseSchemaName
5210: 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   : null;....    
5220: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
5230: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 62 61  IsNullOrEmpty(ba
5240: 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 29 0d 0a  seSchemaName))..
5250: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5260: 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74       strSql = st
5270: 72 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20  rSql.Replace(.. 
5280: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
5290: 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75  ing.Format(Cultu
52a0: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
52b0: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
52c0: 20 20 20 20 20 20 20 20 22 5b 7b 30 7d 5d 2e 22          "[{0}]."
52d0: 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  , baseSchemaName
52e0: 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29  ), String.Empty)
52f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ;....          s
5300: 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52  trSql = strSql.R
5310: 65 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20  eplace(..       
5320: 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
5330: 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f  rmat(CultureInfo
5340: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
5350: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
5360: 20 20 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63    "{0}.", baseSc
5370: 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e  hemaName), Strin
5380: 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20  g.Empty);..     
5390: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
53a0: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e  .      SQLiteCon
53b0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
53c0: 67 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  gs =..          
53d0: 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (cnn != null) ? 
53e0: 63 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69  cnn.Flags : SQLi
53f0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
5400: 73 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20 20  s.Default;....  
5410: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
5420: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5430: 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61 72  nFlags.LogPrepar
5440: 65 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  e) == SQLiteConn
5450: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50  ectionFlags.LogP
5460: 72 65 70 61 72 65 29 0d 0a 20 20 20 20 20 20 7b  repare)..      {
5470: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
5480: 28 73 74 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c 29  (strSql == null)
5490: 20 7c 7c 20 28 73 74 72 53 71 6c 2e 4c 65 6e 67   || (strSql.Leng
54a0: 74 68 20 3d 3d 20 30 29 20 7c 7c 20 28 73 74 72  th == 0) || (str
54b0: 53 71 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e 67 74  Sql.Trim().Lengt
54c0: 68 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20 20  h == 0))..      
54d0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
54e0: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 22 50 72  g.LogMessage("Pr
54f0: 65 70 61 72 69 6e 67 20 7b 3c 6e 6f 74 68 69 6e  eparing {<nothin
5500: 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20 20 20  g>}...");..     
5510: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
5520: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
5530: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
5540: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
5550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5560: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
5570: 65 6e 74 43 75 6c 74 75 72 65 2c 20 22 50 72 65  entCulture, "Pre
5580: 70 61 72 69 6e 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e  paring {{{0}}}..
5590: 2e 22 2c 20 73 74 72 53 71 6c 29 29 3b 0d 0a 20  .", strSql));.. 
55a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
55b0: 49 6e 74 50 74 72 20 73 74 6d 74 20 3d 20 49 6e  IntPtr stmt = In
55c0: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
55d0: 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 49    IntPtr ptr = I
55e0: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
55f0: 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d     int len = 0;.
5600: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
5610: 6f 72 43 6f 64 65 20 6e 20 3d 20 53 51 4c 69 74  orCode n = SQLit
5620: 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d  eErrorCode.Schem
5630: 61 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72 65  a;..      int re
5640: 74 72 69 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20  tries = 0;..    
5650: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
5660: 54 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20  TF8(strSql);..  
5670: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 64      string typed
5680: 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  efs = null;..   
5690: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
56a0: 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a  nt cmd = null;..
56b0: 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64        Random rnd
56c0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
56d0: 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d  uint starttick =
56e0: 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65   (uint)Environme
56f0: 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d  nt.TickCount;...
5700: 0a 20 20 20 20 20 20 47 43 48 61 6e 64 6c 65 20  .      GCHandle 
5710: 68 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e 64 6c  handle = GCHandl
5720: 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48 61 6e  e.Alloc(b, GCHan
5730: 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64 29 3b  dleType.Pinned);
5740: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
5750: 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41 64 64  sql = handle.Add
5760: 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63 74 28  rOfPinnedObject(
5770: 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  );..      SQLite
5780: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
5790: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  statementHandle 
57a0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 74  = null;..      t
57b0: 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ry..      {..   
57c0: 20 20 20 20 20 77 68 69 6c 65 20 28 28 6e 20 3d       while ((n =
57d0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
57e0: 65 2e 53 63 68 65 6d 61 20 7c 7c 20 6e 20 3d 3d  e.Schema || n ==
57f0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
5800: 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20  .Locked || n == 
5810: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
5820: 42 75 73 79 29 20 26 26 20 72 65 74 72 69 65 73  Busy) && retries
5830: 20 3c 20 33 29 0d 0a 20 20 20 20 20 20 20 20 7b   < 3)..        {
5840: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 72 79 0d  ..          try.
5850: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
5860: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
5870: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
5880: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
5890: 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45   finally /* NOTE
58a0: 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29  : Thread.Abort()
58b0: 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d   protection. */.
58c0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  .          {..#i
58d0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
58e0: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
58f0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
5900: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5910: 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  prepare_interop(
5920: 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65  _sql, psql, b.Le
5930: 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20 73 74  ngth - 1, out st
5940: 6d 74 2c 20 6f 75 74 20 70 74 72 2c 20 6f 75 74  mt, out ptr, out
5950: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 23   len);..#else..#
5960: 69 66 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56  if USE_PREPARE_V
5970: 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  2..            n
5980: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
5990: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70  ethods.sqlite3_p
59a0: 72 65 70 61 72 65 5f 76 32 28 5f 73 71 6c 2c 20  repare_v2(_sql, 
59b0: 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  psql, b.Length -
59c0: 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75   1, out stmt, ou
59d0: 74 20 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a  t ptr);..#else..
59e0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
59f0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
5a00: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70  ods.sqlite3_prep
5a10: 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20  are(_sql, psql, 
5a20: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75  b.Length - 1, ou
5a30: 74 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 29  t stmt, out ptr)
5a40: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
5a50: 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b         len = -1;
5a60: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20  ..#endif....#if 
5a70: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
5a80: 26 26 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45  && TRACE_STATEME
5a90: 4e 54 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  NT..            
5aa0: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
5ab0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 50  String.Format("P
5ac0: 72 65 70 61 72 65 20 28 7b 30 7d 29 3a 20 7b 31  repare ({0}): {1
5ad0: 7d 22 2c 20 6e 2c 20 73 74 6d 74 29 29 3b 0d 0a  }", n, stmt));..
5ae0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
5af0: 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20        if ((n == 
5b00: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
5b10: 4f 6b 29 20 26 26 20 28 73 74 6d 74 20 21 3d 20  Ok) && (stmt != 
5b20: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20  IntPtr.Zero)).. 
5b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
5b40: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e  tementHandle = n
5b50: 65 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ew SQLiteStateme
5b60: 6e 74 48 61 6e 64 6c 65 28 5f 73 71 6c 2c 20 73  ntHandle(_sql, s
5b70: 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tmt);..         
5b80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5b90: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
5ba0: 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 29  rrorCode.Schema)
5bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
5bc0: 74 72 69 65 73 2b 2b 3b 0d 0a 20 20 20 20 20 20  tries++;..      
5bd0: 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d      else if (n =
5be0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
5bf0: 65 2e 45 72 72 6f 72 29 0d 0a 20 20 20 20 20 20  e.Error)..      
5c00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5c10: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f     if (String.Co
5c20: 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72  mpare(GetLastErr
5c30: 6f 72 28 29 2c 20 22 6e 65 61 72 20 5c 22 54 59  or(), "near \"TY
5c40: 50 45 53 5c 22 3a 20 73 79 6e 74 61 78 20 65 72  PES\": syntax er
5c50: 72 6f 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70  ror", StringComp
5c60: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
5c70: 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d  noreCase) == 0).
5c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
5ca0: 74 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 49  t pos = strSql.I
5cb0: 6e 64 65 78 4f 66 28 27 3b 27 29 3b 0d 0a 20 20  ndexOf(';');..  
5cc0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5cd0: 70 6f 73 20 3d 3d 20 2d 31 29 20 70 6f 73 20 3d  pos == -1) pos =
5ce0: 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d   strSql.Length -
5cf0: 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   1;....         
5d00: 20 20 20 20 20 74 79 70 65 64 65 66 73 20 3d 20       typedefs = 
5d10: 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67  strSql.Substring
5d20: 28 30 2c 20 70 6f 73 20 2b 20 31 29 3b 0d 0a 20  (0, pos + 1);.. 
5d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
5d40: 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 53 75 62  Sql = strSql.Sub
5d50: 73 74 72 69 6e 67 28 70 6f 73 20 2b 20 31 29 3b  string(pos + 1);
5d60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5d70: 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22    strRemain = ""
5d80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5d90: 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d     while (cmd ==
5da0: 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e   null && strSql.
5db0: 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20  Length > 0)..   
5dc0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d                cm
5de0: 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c  d = Prepare(cnn,
5df0: 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75   strSql, previou
5e00: 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75  s, timeoutMS, ou
5e10: 74 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20  t strRemain);.. 
5e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
5e30: 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69  trSql = strRemai
5e40: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
5e50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5e60: 20 20 20 20 20 69 66 20 28 63 6d 64 20 21 3d 20       if (cmd != 
5e70: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
5e80: 20 20 20 20 20 20 20 63 6d 64 2e 53 65 74 54 79         cmd.SetTy
5e90: 70 65 73 28 74 79 70 65 64 65 66 73 29 3b 0d 0a  pes(typedefs);..
5ea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5eb0: 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20  return cmd;..   
5ec0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20           }..#if 
5ed0: 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f 34  (NET_35 || NET_4
5ee0: 30 20 7c 7c 20 4e 45 54 5f 34 35 29 20 26 26 20  0 || NET_45) && 
5ef0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
5f00: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
5f10: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
5f20: 28 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61  (_buildingSchema
5f30: 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72   == false && Str
5f40: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c  ing.Compare(GetL
5f50: 61 73 74 45 72 72 6f 72 28 29 2c 20 30 2c 20 22  astError(), 0, "
5f60: 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 54  no such table: T
5f70: 45 4d 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c 20  EMP.SCHEMA", 0, 
5f80: 32 36 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  26, StringCompar
5f90: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
5fa0: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
5fb0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5fc0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52              strR
5fd0: 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 20 20 20  emain = "";..   
5fe0: 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c             _buil
5ff0: 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 74 72 75  dingSchema = tru
6000: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
6010: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
6020: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6030: 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 53          ISQLiteS
6040: 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 20  chemaExtensions 
6050: 65 78 74 20 3d 20 28 28 49 53 65 72 76 69 63 65  ext = ((IService
6060: 50 72 6f 76 69 64 65 72 29 53 51 4c 69 74 65 46  Provider)SQLiteF
6070: 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65 29  actory.Instance)
6080: 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70 65  .GetService(type
6090: 6f 66 28 49 53 51 4c 69 74 65 53 63 68 65 6d 61  of(ISQLiteSchema
60a0: 45 78 74 65 6e 73 69 6f 6e 73 29 29 20 61 73 20  Extensions)) as 
60b0: 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74  ISQLiteSchemaExt
60c0: 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20  ensions;....    
60d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
60e0: 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ext != null)..  
60f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6100: 65 78 74 2e 42 75 69 6c 64 54 65 6d 70 53 63 68  ext.BuildTempSch
6110: 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20 20  ema(cnn);....   
6120: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
6130: 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20  le (cmd == null 
6140: 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68  && strSql.Length
6150: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
6160: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6170: 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 20              cmd 
6180: 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73  = Prepare(cnn, s
6190: 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c  trSql, previous,
61a0: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20   timeoutMS, out 
61b0: 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20  strRemain);..   
61c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
61d0: 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69  trSql = strRemai
61e0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
61f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6200: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6210: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  cmd;..          
6220: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6230: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
6240: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
6260: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d  buildingSchema =
6270: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
6280: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6290: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
62a0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
62b0: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
62c0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
62d0: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
62e0: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
62f0: 43 6f 64 65 2e 42 75 73 79 29 20 2f 2f 20 4c 6f  Code.Busy) // Lo
6300: 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61 20  cked -- delay a 
6310: 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65 66  small amount bef
6320: 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20 20  ore retrying..  
6330: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6340: 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74         // Keep t
6350: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
6360: 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75     if (rnd == nu
6370: 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d  ll) // First tim
6380: 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65  e we've encounte
6390: 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20  red the lock..  
63a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64 20              rnd 
63b0: 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d  = new Random();.
63c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
63d0: 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65 65  / If we've excee
63e0: 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27  ded the command'
63f0: 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20  s timeout, give 
6400: 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20  up and throw an 
6410: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
6420: 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76     if ((uint)Env
6430: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
6440: 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e  nt - starttick >
6450: 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20   timeoutMS)..   
6460: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6470: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
6480: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
6490: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
64a0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
64b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
64c0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
64d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
64e0: 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72 77         // Otherw
64f0: 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61 20  ise sleep for a 
6500: 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66  random amount of
6510: 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30 6d   time up to 150m
6520: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
6530: 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e   System.Threadin
6540: 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28 72  g.Thread.Sleep(r
6550: 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29 29  nd.Next(1, 150))
6560: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
6570: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
6580: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6590: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
65a0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
65b0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
65c0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
65d0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
65e0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 52 65 6d  ..        strRem
65f0: 61 69 6e 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ain = UTF8ToStri
6600: 6e 67 28 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a 0d  ng(ptr, len);...
6610: 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61  .        if (sta
6620: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20  tementHandle != 
6630: 6e 75 6c 6c 29 20 63 6d 64 20 3d 20 6e 65 77 20  null) cmd = new 
6640: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 28  SQLiteStatement(
6650: 74 68 69 73 2c 20 66 6c 61 67 73 2c 20 73 74 61  this, flags, sta
6660: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74  tementHandle, st
6670: 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30  rSql.Substring(0
6680: 2c 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  , strSql.Length 
6690: 2d 20 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67  - strRemain.Leng
66a0: 74 68 29 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d  th), previous);.
66b0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
66c0: 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d  n cmd;..      }.
66d0: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a  .      finally..
66e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
66f0: 20 68 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d   handle.Free();.
6700: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
6710: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
6720: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67   static void Log
6730: 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65  Bind(SQLiteState
6740: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
6750: 65 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  e, int index).. 
6760: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
6770: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
6780: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
6790: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
67a0: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
67b0: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
67c0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
67d0: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
67e0: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
67f0: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
6800: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
6810: 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e 2e   #{1} as NULL...
6820: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
6830: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
6840: 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  dex));..    }...
6850: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
6860: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
6870: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
6880: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
6890: 20 69 6e 74 20 69 6e 64 65 78 2c 20 56 61 6c 75   int index, Valu
68a0: 65 54 79 70 65 20 76 61 6c 75 65 29 0d 0a 20 20  eType value)..  
68b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
68c0: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
68d0: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
68e0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
68f0: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
6900: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
6910: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
6920: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
6930: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74  ramter #{1} as t
6940: 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c  ype {2} with val
6950: 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d  ue {{{3}}}...",.
6960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e  .            han
6970: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
6980: 2c 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28  , value.GetType(
6990: 29 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20  ), value));..   
69a0: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74   }....    privat
69b0: 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
69c0: 46 6f 72 6d 61 74 44 61 74 65 54 69 6d 65 28 44  FormatDateTime(D
69d0: 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a  ateTime value)..
69e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
69f0: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73  tringBuilder res
6a00: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
6a10: 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20  Builder();....  
6a20: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
6a30: 65 6e 64 28 76 61 6c 75 65 2e 54 6f 53 74 72 69  end(value.ToStri
6a40: 6e 67 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48  ng("yyyy-MM-ddTH
6a50: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b  H:mm:ss.FFFFFFFK
6a60: 22 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  "));..        re
6a70: 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29  sult.Append(' ')
6a80: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c  ;..        resul
6a90: 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b  t.Append(value.K
6aa0: 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  ind);..        r
6ab0: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27  esult.Append(' '
6ac0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
6ad0: 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e  lt.Append(value.
6ae0: 54 69 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  Ticks);....     
6af0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
6b00: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
6b10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
6b20: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
6b30: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
6b40: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
6b50: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
6b60: 2c 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65  , DateTime value
6b70: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
6b80: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
6b90: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
6ba0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
6bb0: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
6bc0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
6bd0: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
6be0: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
6bf0: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
6c00: 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74   as type {2} wit
6c10: 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e  h value {{{3}}}.
6c20: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
6c30: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
6c40: 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61  index, typeof(Da
6c50: 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44  teTime), FormatD
6c60: 61 74 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29  ateTime(value)))
6c70: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6c80: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
6c90: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
6ca0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
6cb0: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
6cc0: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61  index, string va
6cd0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
6ce0: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
6cf0: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
6d00: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
6d10: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
6d20: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
6d30: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  (..            "
6d40: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
6d50: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
6d60: 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20  {1} as type {2} 
6d70: 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d  with value {{{3}
6d80: 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  }}...",..       
6d90: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
6da0: 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66  r, index, typeof
6db0: 28 53 74 72 69 6e 67 29 2c 20 28 76 61 6c 75 65  (String), (value
6dc0: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75   != null) ? valu
6dd0: 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d  e : "<null>"));.
6de0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
6df0: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
6e00: 69 6e 67 20 54 6f 48 65 78 61 64 65 63 69 6d 61  ing ToHexadecima
6e10: 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20  lString(..      
6e20: 20 20 62 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a    byte[] array..
6e30: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
6e40: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72  ..        if (ar
6e50: 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ray == null)..  
6e60: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6e70: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
6e80: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
6e90: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
6ea0: 69 6e 67 42 75 69 6c 64 65 72 28 61 72 72 61 79  ingBuilder(array
6eb0: 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d  .Length * 2);...
6ec0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  .        int len
6ed0: 67 74 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67  gth = array.Leng
6ee0: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  th;....        f
6ef0: 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
6f00: 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74  0; index < lengt
6f10: 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20  h; index++)..   
6f20: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
6f30: 41 70 70 65 6e 64 28 61 72 72 61 79 5b 69 6e 64  Append(array[ind
6f40: 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78 32  ex].ToString("x2
6f50: 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "));....        
6f60: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f  return result.To
6f70: 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d  String();..    }
6f80: 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ....    protecte
6f90: 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f  d static void Lo
6fa0: 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74  gBind(SQLiteStat
6fb0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
6fc0: 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62  le, int index, b
6fd0: 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20  yte[] value)..  
6fe0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
6ff0: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
7000: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
7010: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
7020: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
7030: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
7040: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
7050: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
7060: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74  ramter #{1} as t
7070: 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c  ype {2} with val
7080: 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d  ue {{{3}}}...",.
7090: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e  .            han
70a0: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
70b0: 2c 20 74 79 70 65 6f 66 28 42 79 74 65 5b 5d 29  , typeof(Byte[])
70c0: 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c  , (value != null
70d0: 29 20 3f 20 54 6f 48 65 78 61 64 65 63 69 6d 61  ) ? ToHexadecima
70e0: 6c 53 74 72 69 6e 67 28 76 61 6c 75 65 29 20 3a  lString(value) :
70f0: 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20   "<null>"));..  
7100: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
7110: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
7120: 64 20 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53 51  d Bind_Double(SQ
7130: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
7140: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
7150: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
7160: 20 69 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75 62   int index, doub
7170: 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  le value)..    {
7180: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
7190: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
71a0: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
71b0: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20  qlite_stmt;.... 
71c0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
71d0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
71e0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
71f0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
7200: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
7210: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
7220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
7230: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
7240: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
7250: 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50       }....#if !P
7260: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
7270: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
7280: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
7290: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
72a0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
72b0: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61  3_bind_double(ha
72c0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
72d0: 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
72e0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
72f0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
7300: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
7310: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
7320: 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c  lite3_bind_doubl
7330: 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  e_interop(handle
7340: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
7350: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
7360: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
7370: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
7380: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
7390: 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  f..        if (n
73a0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
73b0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
73c0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
73d0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
73e0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
73f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
7400: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
7410: 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74  Int32(SQLiteStat
7420: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
7430: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7440: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
7450: 65 78 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a  ex, int value)..
7460: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
7470: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
7480: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
7490: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
74a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
74b0: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
74c0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
74d0: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
74e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
74f0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
7500: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7510: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
7520: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
7530: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
7540: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
7550: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
7560: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7570: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
7580: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
7590: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
75a0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
75b0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
75c0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
75d0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
75e0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
75f0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
7600: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
7610: 42 69 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c 69  Bind_UInt32(SQLi
7620: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
7630: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
7640: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
7650: 6e 74 20 69 6e 64 65 78 2c 20 75 69 6e 74 20 76  nt index, uint v
7660: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
7670: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
7680: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
7690: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
76a0: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21  e_stmt;....#if !
76b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
76c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
76d0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
76e0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
76f0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
7700: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7710: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
7720: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
7730: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
7740: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
7750: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
7760: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
7770: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
7780: 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20  rCode n;....    
7790: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
77a0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
77b0: 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74 33  nFlags.BindUInt3
77c0: 32 41 73 49 6e 74 36 34 29 20 3d 3d 20 53 51 4c  2AsInt64) == SQL
77d0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
77e0: 67 73 2e 42 69 6e 64 55 49 6e 74 33 32 41 73 49  gs.BindUInt32AsI
77f0: 6e 74 36 34 29 0d 0a 20 20 20 20 20 20 20 20 7b  nt64)..        {
7800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f  ..            lo
7810: 6e 67 20 76 61 6c 75 65 32 20 3d 20 76 61 6c 75  ng value2 = valu
7820: 65 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  e;....#if !PLATF
7830: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
7840: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
7850: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
7860: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
7870: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e  3_bind_int64(han
7880: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
7890: 65 32 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  e2);..#elif !SQL
78a0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
78b0: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
78c0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
78d0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
78e0: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
78f0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
7900: 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 73 65 0d  value2);..#else.
7910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
7920: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
7930: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
7940: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
7950: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
7960: 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  se..        {.. 
7970: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
7980: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
7990: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
79a0: 75 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64  uint(handle, ind
79b0: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
79c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
79d0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
79e0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
79f0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
7a00: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
7a10: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
7a20: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
7a30: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
7a40: 42 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74  Bind_Int64(SQLit
7a50: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
7a60: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7a70: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
7a80: 74 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61  t index, long va
7a90: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
7aa0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
7ab0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
7ac0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
7ad0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
7ae0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
7af0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
7b00: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
7b10: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7b20: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
7b30: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7b40: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
7b50: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
7b60: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
7b70: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
7b80: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
7b90: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
7ba0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
7bb0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
7bc0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
7bd0: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
7be0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
7bf0: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
7c00: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
7c10: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
7c20: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
7c30: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7c40: 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72  bind_int64_inter
7c50: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
7c60: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
7c70: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
7c80: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
7c90: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
7ca0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
7cb0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
7cc0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
7cd0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
7ce0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
7cf0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
7d00: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
7d10: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
7d20: 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 36 34 28  oid Bind_UInt64(
7d30: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
7d40: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
7d50: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
7d60: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 6c  s, int index, ul
7d70: 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ong value)..    
7d80: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
7d90: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
7da0: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
7db0: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
7dc0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
7dd0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
7de0: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
7df0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
7e00: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
7e10: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
7e20: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
7e30: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
7e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
7e50: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
7e60: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
7e70: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7e80: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
7e90: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
7ea0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
7eb0: 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 28 68  e3_bind_uint64(h
7ec0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
7ed0: 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
7ee0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
7ef0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
7f00: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
7f10: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7f20: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74  qlite3_bind_uint
7f30: 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  64_interop(handl
7f40: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
7f50: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
7f60: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
7f70: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
7f80: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
7f90: 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  if..        if (
7fa0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
7fb0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
7fc0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
7fd0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
7fe0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
7ff0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
8000: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
8010: 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74  _Text(SQLiteStat
8020: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
8030: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8040: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
8050: 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ex, string value
8060: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8070: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
8080: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
8090: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
80a0: 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  mt;....#if !PLAT
80b0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
80c0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
80d0: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
80e0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
80f0: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
8100: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
8110: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
8120: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8130: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
8140: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
8150: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
8160: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
8170: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
8180: 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 23  TF8(value);....#
8190: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
81a0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
81b0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
81c0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
81d0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
81e0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
81f0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
8200: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
8210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
8220: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
8230: 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20  ex, b);..       
8240: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
8250: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
8260: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
8270: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
8280: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
8290: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
82a0: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
82b0: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
82c0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
82d0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
82e0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
82f0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
8300: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
8310: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
8320: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
8330: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74  de void Bind_Dat
8340: 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eTime(SQLiteStat
8350: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
8360: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8370: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
8380: 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29  ex, DateTime dt)
8390: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
83a0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
83b0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
83c0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
83d0: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
83e0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
83f0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
8400: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
8410: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
8420: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
8430: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
8440: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
8450: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8460: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
8470: 6c 65 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d  le, index, dt);.
8480: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
8490: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 77  if....        sw
84a0: 69 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46  itch (_datetimeF
84b0: 6f 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20  ormat)..        
84c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
84d0: 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f  ase SQLiteDateFo
84e0: 72 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20  rmats.Ticks:..  
84f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
8500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8510: 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20       long value 
8520: 3d 20 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 23  = dt.Ticks;....#
8530: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
8540: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
8550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8560: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
8570: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8580: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
8590: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
85a0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
85b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
85c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
85d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85e0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
85f0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
8600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8610: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
8630: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
8640: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
8650: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
8660: 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c  nd_int64(handle,
8670: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
8680: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
8690: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
86a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
86b0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
86c0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
86d0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
86e0: 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  d_int64_interop(
86f0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
8700: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
8710: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
8720: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
8730: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
8740: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
8750: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
8760: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
8770: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
8780: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
8790: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
87a0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
87b0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
87c0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
87d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
87e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
87f0: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
8800: 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79  ormats.JulianDay
8810: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
8820: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8830: 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65            double
8840: 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69 61   value = ToJulia
8850: 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 23 69 66  nDay(dt);....#if
8860: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
8870: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
8880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8890: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
88a0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
88b0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
88c0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
88d0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
88e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
8910: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
8920: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
8930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8940: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8950: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
8960: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
8970: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8980: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
8990: 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20  _double(handle, 
89a0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
89b0: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
89c0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
89d0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
89e0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
89f0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8a00: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
8a10: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
8a20: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
8a30: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
8a40: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
8a50: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
8a60: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
8a70: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
8a80: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
8a90: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
8aa0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
8ab0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
8ac0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
8ad0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
8ae0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
8af0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
8b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8b10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8b20: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
8b30: 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68  ormats.UnixEpoch
8b40: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
8b50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8b60: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76            long v
8b70: 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54  alue = Convert.T
8b80: 6f 49 6e 74 36 34 28 64 74 2e 53 75 62 74 72 61  oInt64(dt.Subtra
8b90: 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f  ct(UnixEpoch).To
8ba0: 74 61 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a  talSeconds);....
8bb0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
8bc0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
8bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8be0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
8bf0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8c00: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
8c10: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
8c20: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
8c30: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8c40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c60: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
8c70: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
8c80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8c90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
8cb0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
8cc0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
8cd0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
8ce0: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
8cf0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
8d00: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
8d10: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
8d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
8d30: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
8d40: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
8d50: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
8d60: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
8d70: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
8d80: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
8d90: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
8da0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
8db0: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
8dc0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
8dd0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
8de0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
8df0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
8e00: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
8e10: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
8e20: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
8e30: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
8e40: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
8e50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e60: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
8e70: 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
8e80: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ea0: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
8eb0: 54 46 38 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20  TF8(dt);....#if 
8ec0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
8ed0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
8ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ef0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
8f00: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
8f10: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
8f20: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
8f30: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
8f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f                Lo
8f70: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
8f80: 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20  dex, b);..      
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
8fa0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
8fc0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
8fd0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
8fe0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
8ff0: 69 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c  ind_text(handle,
9000: 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e   index, b, b.Len
9010: 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72  gth - 1, (IntPtr
9020: 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20  )(-1));..       
9030: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
9040: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
9050: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
9060: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
9070: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
9080: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
90a0: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ak;..           
90b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
90c0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
90d0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
90e0: 65 20 76 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62  e void Bind_Blob
90f0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
9100: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
9110: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
9120: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62  gs, int index, b
9130: 79 74 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29 0d  yte[] blobData).
9140: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
9150: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
9160: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
9170: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
9180: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
9190: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
91a0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
91b0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
91c0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
91d0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
91e0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
91f0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
9200: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9210: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
9220: 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61  e, index, blobDa
9230: 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ta);..        }.
9240: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
9250: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
9260: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
9270: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9280: 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 68 61 6e  e3_bind_blob(han
9290: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62  dle, index, blob
92a0: 44 61 74 61 2c 20 62 6c 6f 62 44 61 74 61 2e 4c  Data, blobData.L
92b0: 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28  ength, (IntPtr)(
92c0: 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  -1));..        i
92d0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
92e0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
92f0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
9300: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
9310: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
9320: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
9330: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
9340: 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65 53  ind_Null(SQLiteS
9350: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
9360: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
9370: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
9380: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
9390: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
93a0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
93b0: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
93c0: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
93d0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
93e0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
93f0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
9400: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
9410: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
9420: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
9430: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
9440: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
9450: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
9460: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29  d(handle, index)
9470: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
9480: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
9490: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
94a0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
94b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
94c0: 62 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65  bind_null(handle
94d0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
94e0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
94f0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
9500: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
9510: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
9520: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
9530: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
9540: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
9550: 74 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e  t Bind_ParamCoun
9560: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
9570: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
9580: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
9590: 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ags)..    {..   
95a0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
95b0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
95c0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
95d0: 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20  _stmt;..        
95e0: 69 6e 74 20 76 61 6c 75 65 20 3d 20 55 6e 73 61  int value = Unsa
95f0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9600: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
9610: 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 68 61 6e  ameter_count(han
9620: 64 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dle);....       
9630: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
9640: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
9650: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
9660: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
9670: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
9680: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9690: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
96a0: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
96b0: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
96c0: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
96d0: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
96e0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
96f0: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
9700: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
9710: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
9720: 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74        "Statement
9730: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 63 6f   {0} paramter co
9740: 75 6e 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20  unt is {1}.",.. 
9750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
9760: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c  andleIntPtr, val
9770: 75 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ue));..        }
9780: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
9790: 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d  rn value;..    }
97a0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
97b0: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
97c0: 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28   Bind_ParamName(
97d0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
97e0: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
97f0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
9800: 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  s, int index).. 
9810: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
9820: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
9830: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
9840: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
9850: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
9860: 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  name;....#if !SQ
9870: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
9880: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d         int len;.
9890: 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20  .        name = 
98a0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
98b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
98c0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
98d0: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f 69 6e 74  rameter_name_int
98e0: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
98f0: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
9900: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
9910: 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54      name = UTF8T
9920: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
9930: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9940: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
9950: 65 72 5f 6e 61 6d 65 28 68 61 6e 64 6c 65 2c 20  er_name(handle, 
9960: 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65  index), -1);..#e
9970: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
9980: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
9990: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
99a0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
99b0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
99c0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
99d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
99e0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
99f0: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
9a00: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
9a10: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
9a20: 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46  Message(String.F
9a30: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
9a40: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
9a50: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
9a60: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
9a70: 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20       "Statement 
9a80: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31  {0} paramter #{1
9a90: 7d 20 6e 61 6d 65 20 69 73 20 7b 7b 7b 32 7d 7d  } name is {{{2}}
9aa0: 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
9ab0: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
9ac0: 74 72 2c 20 69 6e 64 65 78 2c 20 6e 61 6d 65 29  tr, index, name)
9ad0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
9ae0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
9af0: 6e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  name;..    }....
9b00: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9b10: 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50  rride int Bind_P
9b20: 61 72 61 6d 49 6e 64 65 78 28 53 51 4c 69 74 65  aramIndex(SQLite
9b30: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
9b40: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
9b50: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 73 74 72  Flags flags, str
9b60: 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65 29 0d 0a  ing paramName)..
9b70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
9b80: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
9b90: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
9ba0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
9bb0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e  ..        int in
9bc0: 64 65 78 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  dex = UnsafeNati
9bd0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9be0: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
9bf0: 5f 69 6e 64 65 78 28 68 61 6e 64 6c 65 2c 20 54  _index(handle, T
9c00: 6f 55 54 46 38 28 70 61 72 61 6d 4e 61 6d 65 29  oUTF8(paramName)
9c10: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
9c20: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
9c30: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
9c40: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
9c50: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
9c60: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
9c70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9c80: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
9c90: 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65  eIntPtr = handle
9ca0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9cb0: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
9cc0: 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72  ssage(String.For
9cd0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
9ce0: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
9cf0: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
9d00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9d10: 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30     "Statement {0
9d20: 7d 20 70 61 72 61 6d 74 65 72 20 69 6e 64 65 78  } paramter index
9d30: 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d 7d   of name {{{1}}}
9d40: 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20 20   is #{2}.",..   
9d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e               han
9d60: 64 6c 65 49 6e 74 50 74 72 2c 20 70 61 72 61 6d  dleIntPtr, param
9d70: 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  Name, index));..
9d80: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9d90: 20 20 20 20 20 72 65 74 75 72 6e 20 69 6e 64 65       return inde
9da0: 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  x;..    }....   
9db0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
9dc0: 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75  de int ColumnCou
9dd0: 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nt(SQLiteStateme
9de0: 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d  nt stmt)..    {.
9df0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
9e00: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9e10: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
9e20: 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71 6c  _count(stmt._sql
9e30: 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20  ite_stmt);..    
9e40: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
9e50: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
9e60: 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c  g ColumnName(SQL
9e70: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
9e80: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
9e90: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
9ea0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
9eb0: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
9ec0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
9ed0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
9ee0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9ef0: 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e  3_column_name_in
9f00: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
9f10: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
9f20: 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  out len), len);.
9f30: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
9f40: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
9f50: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
9f60: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
9f70: 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f  lumn_name(stmt._
9f80: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
9f90: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
9fa0: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
9fb0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
9fc0: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 43  e TypeAffinity C
9fd0: 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 53 51  olumnAffinity(SQ
9fe0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
9ff0: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
a000: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
a010: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
a020: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a030: 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d 74  column_type(stmt
a040: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
a050: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ndex);..    }...
a060: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
a070: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f  erride string Co
a080: 6c 75 6d 6e 54 79 70 65 28 53 51 4c 69 74 65 53  lumnType(SQLiteS
a090: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
a0a0: 6e 74 20 69 6e 64 65 78 2c 20 6f 75 74 20 54 79  nt index, out Ty
a0b0: 70 65 41 66 66 69 6e 69 74 79 20 6e 41 66 66 69  peAffinity nAffi
a0c0: 6e 69 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nity)..    {..  
a0d0: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69      int len;..#i
a0e0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
a0f0: 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  RD..      IntPtr
a100: 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   p = UnsafeNativ
a110: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a120: 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
a130: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
a140: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
a150: 78 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23 65  x, out len);..#e
a160: 6c 73 65 0d 0a 20 20 20 20 20 20 6c 65 6e 20 3d  lse..      len =
a170: 20 2d 31 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50   -1;..      IntP
a180: 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  tr p = UnsafeNat
a190: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a1a0: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
a1b0: 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  pe(stmt._sqlite_
a1c0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23  stmt, index);..#
a1d0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 6e 41 66  endif..      nAf
a1e0: 66 69 6e 69 74 79 20 3d 20 43 6f 6c 75 6d 6e 41  finity = ColumnA
a1f0: 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e  ffinity(stmt, in
a200: 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  dex);....      i
a210: 66 20 28 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a  f (p != IntPtr.Z
a220: 65 72 6f 29 20 72 65 74 75 72 6e 20 55 54 46 38  ero) return UTF8
a230: 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29  ToString(p, len)
a240: 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  ;..      else.. 
a250: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a260: 73 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74  string[] ar = st
a270: 6d 74 2e 54 79 70 65 44 65 66 69 6e 69 74 69 6f  mt.TypeDefinitio
a280: 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ns;..        if 
a290: 28 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  (ar != null)..  
a2a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a2b0: 20 20 20 69 66 20 28 69 6e 64 65 78 20 3c 20 61     if (index < a
a2c0: 72 2e 4c 65 6e 67 74 68 20 26 26 20 61 72 5b 69  r.Length && ar[i
a2d0: 6e 64 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ndex] != null)..
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
a2f0: 72 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20  rn ar[index];.. 
a300: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
a310: 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
a320: 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  Empty;....      
a330: 20 20 2f 2f 73 77 69 74 63 68 20 28 6e 41 66 66    //switch (nAff
a340: 69 6e 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20  inity)..        
a350: 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  //{..        // 
a360: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
a370: 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20  ty.Int64:..     
a380: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
a390: 22 42 49 47 49 4e 54 22 3b 0d 0a 20 20 20 20 20  "BIGINT";..     
a3a0: 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65     //  case Type
a3b0: 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a  Affinity.Double:
a3c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
a3d0: 72 65 74 75 72 6e 20 22 44 4f 55 42 4c 45 22 3b  return "DOUBLE";
a3e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61  ..        //  ca
a3f0: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
a400: 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 2f  Blob:..        /
a410: 2f 20 20 20 20 72 65 74 75 72 6e 20 22 42 4c 4f  /    return "BLO
a420: 42 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  B";..        // 
a430: 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
a440: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
a450: 22 54 45 58 54 22 3b 0d 0a 20 20 20 20 20 20 20  "TEXT";..       
a460: 20 2f 2f 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20   //}..      }.. 
a470: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
a480: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
a490: 74 20 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51  t ColumnIndex(SQ
a4a0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
a4b0: 6d 74 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d  mt, string colum
a4c0: 6e 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  nName)..    {.. 
a4d0: 20 20 20 20 20 69 6e 74 20 78 20 3d 20 43 6f 6c       int x = Col
a4e0: 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d  umnCount(stmt);.
a4f0: 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e  ...      for (in
a500: 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20  t n = 0; n < x; 
a510: 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  n++)..      {.. 
a520: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
a530: 67 2e 43 6f 6d 70 61 72 65 28 63 6f 6c 75 6d 6e  g.Compare(column
a540: 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65  Name, ColumnName
a550: 28 73 74 6d 74 2c 20 6e 29 2c 20 53 74 72 69 6e  (stmt, n), Strin
a560: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
a570: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
a580: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
a590: 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20  return n;..     
a5a0: 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   }..      return
a5b0: 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   -1;..    }.... 
a5c0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
a5d0: 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75  ride string Colu
a5e0: 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53  mnOriginalName(S
a5f0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
a600: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
a610: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
a620: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
a630: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20      int len;..  
a640: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
a650: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
a660: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a670: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69  te3_column_origi
a680: 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  n_name_interop(s
a690: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
a6a0: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e  , index, out len
a6b0: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
a6c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
a6d0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
a6e0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a6f0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
a700: 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f  igin_name(stmt._
a710: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
a720: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
a730: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
a740: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
a750: 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 44  e string ColumnD
a760: 61 74 61 62 61 73 65 4e 61 6d 65 28 53 51 4c 69  atabaseName(SQLi
a770: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
a780: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
a790: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
a7a0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
a7b0: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
a7c0: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
a7d0: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
a7e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a7f0: 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
a800: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74  _name_interop(st
a810: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
a820: 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29   index, out len)
a830: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
a840: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
a850: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
a860: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
a870: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
a880: 61 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74 2e  abase_name(stmt.
a890: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
a8a0: 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
a8b0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
a8c0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a8d0: 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
a8e0: 54 61 62 6c 65 4e 61 6d 65 28 53 51 4c 69 74 65  TableName(SQLite
a8f0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
a900: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
a910: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
a920: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
a930: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72  nt len;..      r
a940: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
a950: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
a960: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
a970: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
a980: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
a990: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
a9a0: 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e  x, out len), len
a9b0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
a9c0: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
a9d0: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
a9e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a9f0: 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
aa00: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
aa10: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
aa20: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
aa30: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
aa40: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
aa50: 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 73  ColumnMetaData(s
aa60: 74 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c 20  tring dataBase, 
aa70: 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74  string table, st
aa80: 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74  ring column, out
aa90: 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70 65   string dataType
aaa0: 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c  , out string col
aab0: 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20 6f 75  lateSequence, ou
aac0: 74 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20  t bool notNull, 
aad0: 6f 75 74 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79  out bool primary
aae0: 4b 65 79 2c 20 6f 75 74 20 62 6f 6f 6c 20 61 75  Key, out bool au
aaf0: 74 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20 20  toIncrement)..  
ab00: 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74    {..      IntPt
ab10: 72 20 64 61 74 61 54 79 70 65 50 74 72 3b 0d 0a  r dataTypePtr;..
ab20: 20 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c        IntPtr col
ab30: 6c 53 65 71 50 74 72 3b 0d 0a 20 20 20 20 20 20  lSeqPtr;..      
ab40: 69 6e 74 20 6e 6e 6f 74 4e 75 6c 6c 3b 0d 0a 20  int nnotNull;.. 
ab50: 20 20 20 20 20 69 6e 74 20 6e 70 72 69 6d 61 72       int nprimar
ab60: 79 4b 65 79 3b 0d 0a 20 20 20 20 20 20 69 6e 74  yKey;..      int
ab70: 20 6e 61 75 74 6f 49 6e 63 3b 0d 0a 20 20 20 20   nautoInc;..    
ab80: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
ab90: 65 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  e n;..      int 
aba0: 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e  dtLen;..      in
abb0: 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20  t csLen;....#if 
abc0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
abd0: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
abe0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
abf0: 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f  sqlite3_table_co
ac00: 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 5f 69 6e  lumn_metadata_in
ac10: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
ac20: 46 38 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f  F8(dataBase), To
ac30: 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55  UTF8(table), ToU
ac40: 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74  TF8(column), out
ac50: 20 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f 75   dataTypePtr, ou
ac60: 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75  t collSeqPtr, ou
ac70: 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20  t nnotNull, out 
ac80: 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74  nprimaryKey, out
ac90: 20 6e 61 75 74 6f 49 6e 63 2c 20 6f 75 74 20 64   nautoInc, out d
aca0: 74 4c 65 6e 2c 20 6f 75 74 20 63 73 4c 65 6e 29  tLen, out csLen)
acb0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
acc0: 64 74 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20  dtLen = -1;..   
acd0: 20 20 20 63 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a     csLen = -1;..
ace0: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
acf0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
ad00: 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f  sqlite3_table_co
ad10: 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 5f 73  lumn_metadata(_s
ad20: 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42  ql, ToUTF8(dataB
ad30: 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62  ase), ToUTF8(tab
ad40: 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75  le), ToUTF8(colu
ad50: 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79 70  mn), out dataTyp
ad60: 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65  ePtr, out collSe
ad70: 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75  qPtr, out nnotNu
ad80: 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72 79  ll, out nprimary
ad90: 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e  Key, out nautoIn
ada0: 63 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  c);..#endif..   
adb0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
adc0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
add0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
ade0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
adf0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
ae00: 0a 20 20 20 20 20 20 64 61 74 61 54 79 70 65 20  .      dataType 
ae10: 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 64  = UTF8ToString(d
ae20: 61 74 61 54 79 70 65 50 74 72 2c 20 64 74 4c 65  ataTypePtr, dtLe
ae30: 6e 29 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61  n);..      colla
ae40: 74 65 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46  teSequence = UTF
ae50: 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 53 65  8ToString(collSe
ae60: 71 50 74 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d  qPtr, csLen);...
ae70: 0a 20 20 20 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d  .      notNull =
ae80: 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29   (nnotNull == 1)
ae90: 3b 0d 0a 20 20 20 20 20 20 70 72 69 6d 61 72 79  ;..      primary
aea0: 4b 65 79 20 3d 20 28 6e 70 72 69 6d 61 72 79 4b  Key = (nprimaryK
aeb0: 65 79 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20  ey == 1);..     
aec0: 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20 3d   autoIncrement =
aed0: 20 28 6e 61 75 74 6f 49 6e 63 20 3d 3d 20 31 29   (nautoInc == 1)
aee0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
aef0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
af00: 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62  e double GetDoub
af10: 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  le(SQLiteStateme
af20: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
af30: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
af40: 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d    double value;.
af50: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
af60: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
af70: 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55  .      value = U
af80: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
af90: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
afa0: 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73  n_double(stmt._s
afb0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
afc0: 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  x);..#elif !SQLI
afd0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
afe0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
aff0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
b000: 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74  olumn_double_int
b010: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
b020: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
b030: 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ut value);..#els
b040: 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
b050: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
b060: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
b070: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74  endif..      ret
b080: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
b090: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
b0a0: 6c 20 6f 76 65 72 72 69 64 65 20 73 62 79 74 65  l override sbyte
b0b0: 20 47 65 74 53 42 79 74 65 28 53 51 4c 69 74 65   GetSByte(SQLite
b0c0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
b0d0: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
b0e0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
b0f0: 75 6e 63 68 65 63 6b 65 64 28 28 73 62 79 74 65  unchecked((sbyte
b100: 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  )(GetInt32(stmt,
b110: 20 69 6e 64 65 78 29 20 26 20 62 79 74 65 2e 4d   index) & byte.M
b120: 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  axValue));..    
b130: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
b140: 6c 20 6f 76 65 72 72 69 64 65 20 62 79 74 65 20  l override byte 
b150: 47 65 74 42 79 74 65 28 53 51 4c 69 74 65 53 74  GetByte(SQLiteSt
b160: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
b170: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
b180: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e  .      return un
b190: 63 68 65 63 6b 65 64 28 28 62 79 74 65 29 28 47  checked((byte)(G
b1a0: 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
b1b0: 64 65 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56  dex) & byte.MaxV
b1c0: 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  alue));..    }..
b1d0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
b1e0: 76 65 72 72 69 64 65 20 73 68 6f 72 74 20 47 65  verride short Ge
b1f0: 74 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61  tInt16(SQLiteSta
b200: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
b210: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
b220: 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63        return unc
b230: 68 65 63 6b 65 64 28 28 73 68 6f 72 74 29 28 47  hecked((short)(G
b240: 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
b250: 64 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61  dex) & ushort.Ma
b260: 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d  xValue));..    }
b270: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
b280: 20 6f 76 65 72 72 69 64 65 20 75 73 68 6f 72 74   override ushort
b290: 20 47 65 74 55 49 6e 74 31 36 28 53 51 4c 69 74   GetUInt16(SQLit
b2a0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
b2b0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
b2c0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
b2d0: 20 75 6e 63 68 65 63 6b 65 64 28 28 75 73 68 6f   unchecked((usho
b2e0: 72 74 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d  rt)(GetInt32(stm
b2f0: 74 2c 20 69 6e 64 65 78 29 20 26 20 75 73 68 6f  t, index) & usho
b300: 72 74 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a  rt.MaxValue));..
b310: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
b320: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
b330: 6e 74 20 47 65 74 49 6e 74 33 32 28 53 51 4c 69  nt GetInt32(SQLi
b340: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
b350: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
b360: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
b370: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
b380: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
b390: 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f 73  lumn_int(stmt._s
b3a0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
b3b0: 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  x);..    }....  
b3c0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
b3d0: 69 64 65 20 75 69 6e 74 20 47 65 74 55 49 6e 74  ide uint GetUInt
b3e0: 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  32(SQLiteStateme
b3f0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
b400: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
b410: 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
b420: 65 64 28 28 75 69 6e 74 29 47 65 74 49 6e 74 33  ed((uint)GetInt3
b430: 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b  2(stmt, index));
b440: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
b450: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
b460: 20 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34 28 53   long GetInt64(S
b470: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
b480: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
b490: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c 6f  .    {..      lo
b4a0: 6e 67 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21  ng value;..#if !
b4b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
b4c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
b4d0: 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e   value = UnsafeN
b4e0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
b4f0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
b500: 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  4(stmt._sqlite_s
b510: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
b520: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
b530: 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61  DARD..      Unsa
b540: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b550: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
b560: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d  nt64_interop(stm
b570: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
b580: 69 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c 75 65  index, out value
b590: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
b5a0: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
b5b0: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
b5c0: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
b5d0: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
b5e0: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
b5f0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b600: 64 65 20 75 6c 6f 6e 67 20 47 65 74 55 49 6e 74  de ulong GetUInt
b610: 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
b620: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
b630: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
b640: 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
b650: 65 64 28 28 75 6c 6f 6e 67 29 47 65 74 49 6e 74  ed((ulong)GetInt
b660: 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  64(stmt, index))
b670: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
b680: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
b690: 65 20 73 74 72 69 6e 67 20 47 65 74 54 65 78 74  e string GetText
b6a0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
b6b0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
b6c0: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
b6d0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
b6e0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
b6f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
b700: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
b710: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b720: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
b730: 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  t_interop(stmt._
b740: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
b750: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
b760: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
b770: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
b780: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
b790: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
b7a0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74  3_column_text(st
b7b0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
b7c0: 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20 20   index),..      
b7d0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
b7e0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
b7f0: 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e  lumn_bytes(stmt.
b800: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
b810: 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  dex));..#endif..
b820: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
b830: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 44  ernal override D
b840: 61 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54  ateTime GetDateT
b850: 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ime(SQLiteStatem
b860: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
b870: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
b880: 20 20 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65     if (_datetime
b890: 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65  Format == SQLite
b8a0: 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b  DateFormats.Tick
b8b0: 73 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  s)..        retu
b8c0: 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 47 65  rn ToDateTime(Ge
b8d0: 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
b8e0: 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69  ex), _datetimeKi
b8f0: 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65  nd);..      else
b900: 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46 6f   if (_datetimeFo
b910: 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44 61  rmat == SQLiteDa
b920: 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e  teFormats.Julian
b930: 44 61 79 29 0d 0a 20 20 20 20 20 20 20 20 72 65  Day)..        re
b940: 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28  turn ToDateTime(
b950: 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20  GetDouble(stmt, 
b960: 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d  index), _datetim
b970: 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65  eKind);..      e
b980: 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d  lse if (_datetim
b990: 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74  eFormat == SQLit
b9a0: 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69  eDateFormats.Uni
b9b0: 78 45 70 6f 63 68 29 0d 0a 20 20 20 20 20 20 20  xEpoch)..       
b9c0: 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69   return ToDateTi
b9d0: 6d 65 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74  me(GetInt32(stmt
b9e0: 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74  , index), _datet
b9f0: 69 6d 65 4b 69 6e 64 29 3b 0d 0a 0d 0a 23 69 66  imeKind);....#if
ba00: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
ba10: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
ba20: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
ba30: 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66  ToDateTime(Unsaf
ba40: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
ba50: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
ba60: 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  xt_interop(stmt.
ba70: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
ba80: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  dex, out len), l
ba90: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
baa0: 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65     return ToDate
bab0: 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76  Time(UnsafeNativ
bac0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
bad0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d  _column_text(stm
bae0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
baf0: 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20 20 20  index),..       
bb00: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
bb10: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
bb20: 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f  umn_bytes(stmt._
bb30: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
bb40: 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ex));..#endif.. 
bb50: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
bb60: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
bb70: 6e 67 20 47 65 74 42 79 74 65 73 28 53 51 4c 69  ng GetBytes(SQLi
bb80: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
bb90: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74  , int index, int
bba0: 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79   nDataOffset, by
bbb0: 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20  te[] bDest, int 
bbc0: 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e  nStart, int nLen
bbd0: 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  gth)..    {..   
bbe0: 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e     int nlen = Un
bbf0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
bc00: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
bc10: 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c  _bytes(stmt._sql
bc20: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
bc30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66  ;....      // If
bc40: 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20   no destination 
bc50: 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74  buffer, return t
bc60: 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d  he size needed..
bc70: 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74  .      if (bDest
bc80: 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
bc90: 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20   nlen;....      
bca0: 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c  int nCopied = nL
bcb0: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
bcc0: 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53  if (nCopied + nS
bcd0: 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e  tart > bDest.Len
bce0: 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62  gth) nCopied = b
bcf0: 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53  Dest.Length - nS
bd00: 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20  tart;..      if 
bd10: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61  (nCopied + nData
bd20: 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e  Offset > nlen) n
bd30: 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20  Copied = nlen - 
bd40: 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a  nDataOffset;....
bd50: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
bd60: 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d  d > 0)..      {.
bd70: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
bd80: 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ptr = UnsafeNati
bd90: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
bda0: 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74  3_column_blob(st
bdb0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
bdc0: 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20   index);....    
bdd0: 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79      Marshal.Copy
bde0: 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f  ((IntPtr)(ptr.To
bdf0: 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f  Int64() + nDataO
be00: 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e  ffset), bDest, n
be10: 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b  Start, nCopied);
be20: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
be30: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a   else..      {..
be40: 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20          nCopied 
be50: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  = 0;..      }...
be60: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43  .      return nC
be70: 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  opied;..    }...
be80: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
be90: 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 43  erride long GetC
bea0: 68 61 72 73 28 53 51 4c 69 74 65 53 74 61 74 65  hars(SQLiteState
beb0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
bec0: 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f  ndex, int nDataO
bed0: 66 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62 44  ffset, char[] bD
bee0: 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c  est, int nStart,
bef0: 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20   int nLength).. 
bf00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
bf10: 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  nlen;..      int
bf20: 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67   nCopied = nLeng
bf30: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 74 72  th;....      str
bf40: 69 6e 67 20 73 74 72 20 3d 20 47 65 74 54 65 78  ing str = GetTex
bf50: 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  t(stmt, index);.
bf60: 0a 20 20 20 20 20 20 6e 6c 65 6e 20 3d 20 73 74  .      nlen = st
bf70: 72 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20  r.Length;....   
bf80: 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20     if (bDest == 
bf90: 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65  null) return nle
bfa0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  n;....      if (
bfb0: 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74  nCopied + nStart
bfc0: 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29   > bDest.Length)
bfd0: 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74   nCopied = bDest
bfe0: 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74  .Length - nStart
bff0: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ;..      if (nCo
c000: 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73  pied + nDataOffs
c010: 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69  et > nlen) nCopi
c020: 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74  ed = nlen - nDat
c030: 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20  aOffset;....    
c040: 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20    if (nCopied > 
c050: 30 29 0d 0a 20 20 20 20 20 20 20 20 73 74 72 2e  0)..        str.
c060: 43 6f 70 79 54 6f 28 6e 44 61 74 61 4f 66 66 73  CopyTo(nDataOffs
c070: 65 74 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72  et, bDest, nStar
c080: 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20  t, nCopied);..  
c090: 20 20 20 20 65 6c 73 65 20 6e 43 6f 70 69 65 64      else nCopied
c0a0: 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72   = 0;....      r
c0b0: 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a  eturn nCopied;..
c0c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
c0d0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
c0e0: 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74  ool IsNull(SQLit
c0f0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
c100: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
c110: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
c120: 20 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79   (ColumnAffinity
c130: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 3d 3d  (stmt, index) ==
c140: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75   TypeAffinity.Nu
c150: 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ll);..    }.... 
c160: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
c170: 72 69 64 65 20 69 6e 74 20 41 67 67 72 65 67 61  ride int Aggrega
c180: 74 65 43 6f 75 6e 74 28 49 6e 74 50 74 72 20 63  teCount(IntPtr c
c190: 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
c1a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
c1b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c1c0: 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61  .sqlite3_aggrega
c1d0: 74 65 5f 63 6f 75 6e 74 28 63 6f 6e 74 65 78 74  te_count(context
c1e0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
c1f0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c200: 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 46 75  de void CreateFu
c210: 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74  nction(string st
c220: 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e  rFunction, int n
c230: 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43  Args, bool needC
c240: 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65 43 61  ollSeq, SQLiteCa
c250: 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c  llback func, SQL
c260: 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  iteCallback func
c270: 73 74 65 70 2c 20 53 51 4c 69 74 65 46 69 6e 61  step, SQLiteFina
c280: 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69  lCallback funcfi
c290: 6e 61 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  nal)..    {..   
c2a0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
c2b0: 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  de n;....#if !SQ
c2c0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
c2d0: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
c2e0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
c2f0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
c300: 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71  tion_interop(_sq
c310: 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
c320: 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34  ction), nArgs, 4
c330: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
c340: 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
c350: 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43  uncfinal, (needC
c360: 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20  ollSeq == true) 
c370: 3f 20 31 20 3a 20 30 29 3b 0d 0a 20 20 20 20 20  ? 1 : 0);..     
c380: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
c390: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20  ErrorCode.Ok) n 
c3a0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
c3b0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
c3c0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e  eate_function_in
c3d0: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
c3e0: 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c  F8(strFunction),
c3f0: 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74   nArgs, 1, IntPt
c400: 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75  r.Zero, func, fu
c410: 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61  ncstep, funcfina
c420: 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20  l, (needCollSeq 
c430: 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30  == true) ? 1 : 0
c440: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
c450: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
c460: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c470: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
c480: 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
c490: 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67  rFunction), nArg
c4a0: 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72  s, 4, IntPtr.Zer
c4b0: 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65  o, func, funcste
c4c0: 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a  p, funcfinal);..
c4d0: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
c4e0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
c4f0: 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  k) n = UnsafeNat
c500: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
c510: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
c520: 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  on(_sql, ToUTF8(
c530: 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41  strFunction), nA
c540: 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a  rgs, 1, IntPtr.Z
c550: 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ero, func, funcs
c560: 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b  tep, funcfinal);
c570: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
c580: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
c590: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
c5a0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
c5b0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
c5c0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
c5d0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
c5e0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
c5f0: 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28  CreateCollation(
c600: 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74  string strCollat
c610: 69 6f 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61  ion, SQLiteColla
c620: 74 69 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74  tion func, SQLit
c630: 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31  eCollation func1
c640: 36 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  6)..    {..     
c650: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
c660: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
c670: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c680: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
c690: 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  n(_sql, ToUTF8(s
c6a0: 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c  trCollation), 2,
c6b0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
c6c0: 6e 63 31 36 29 3b 0d 0a 20 20 20 20 20 20 69 66  nc16);..      if
c6d0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
c6e0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55  orCode.Ok) n = U
c6f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
c700: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
c710: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c  e_collation(_sql
c720: 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c  , ToUTF8(strColl
c730: 61 74 69 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74  ation), 1, IntPt
c740: 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a  r.Zero, func);..
c750: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
c760: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
c770: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
c780: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
c790: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
c7a0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
c7b0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
c7c0: 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c   int ContextColl
c7d0: 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61  ateCompare(Colla
c7e0: 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
c7f0: 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e   enc, IntPtr con
c800: 74 65 78 74 2c 20 73 74 72 69 6e 67 20 73 31 2c  text, string s1,
c810: 20 73 74 72 69 6e 67 20 73 32 29 0d 0a 20 20 20   string s2)..   
c820: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
c830: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
c840: 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20  byte[] b1;..    
c850: 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20    byte[] b2;..  
c860: 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e      System.Text.
c870: 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74  Encoding convert
c880: 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  er = null;....  
c890: 20 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29      switch (enc)
c8a0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
c8b0: 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
c8c0: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
c8d0: 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  F8:..          c
c8e0: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
c8f0: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
c900: 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  UTF8;..         
c910: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
c920: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
c930: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31  ncodingEnum.UTF1
c940: 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  6LE:..          
c950: 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
c960: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
c970: 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20  .Unicode;..     
c980: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
c990: 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
c9a0: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
c9b0: 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20  UTF16BE:..      
c9c0: 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
c9d0: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
c9e0: 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e  ding.BigEndianUn
c9f0: 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20  icode;..        
ca00: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
ca10: 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20  }....      b1 = 
ca20: 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  converter.GetByt
ca30: 65 73 28 73 31 29 3b 0d 0a 20 20 20 20 20 20 62  es(s1);..      b
ca40: 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65  2 = converter.Ge
ca50: 74 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a 20  tBytes(s2);.... 
ca60: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
ca70: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
ca80: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f  sqlite3_context_
ca90: 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65  collcompare_inte
caa0: 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c  rop(context, b1,
cab0: 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20   b1.Length, b2, 
cac0: 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c  b2.Length);..#el
cad0: 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
cae0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
caf0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
cb00: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
cb10: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
cb20: 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65  erride int Conte
cb30: 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65  xtCollateCompare
cb40: 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69  (CollationEncodi
cb50: 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50  ngEnum enc, IntP
cb60: 74 72 20 63 6f 6e 74 65 78 74 2c 20 63 68 61 72  tr context, char
cb70: 5b 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20 63 32  [] c1, char[] c2
cb80: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
cb90: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
cba0: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b        byte[] b1;
cbb0: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
cbc0: 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d  2;..      System
cbd0: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63  .Text.Encoding c
cbe0: 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b  onverter = null;
cbf0: 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68  ....      switch
cc00: 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d   (enc)..      {.
cc10: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
cc20: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
cc30: 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20  num.UTF8:..     
cc40: 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
cc50: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
cc60: 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20  oding.UTF8;..   
cc70: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
cc80: 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
cc90: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
cca0: 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20  m.UTF16LE:..    
ccb0: 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
ccc0: 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
ccd0: 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d  coding.Unicode;.
cce0: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
ccf0: 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
cd00: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
cd10: 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a  gEnum.UTF16BE:..
cd20: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
cd30: 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
cd40: 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e  t.Encoding.BigEn
cd50: 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20  dianUnicode;..  
cd60: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
cd70: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
cd80: 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e   b1 = converter.
cd90: 47 65 74 42 79 74 65 73 28 63 31 29 3b 0d 0a 20  GetBytes(c1);.. 
cda0: 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72       b2 = conver
cdb0: 74 65 72 2e 47 65 74 42 79 74 65 73 28 63 32 29  ter.GetBytes(c2)
cdc0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
cdd0: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
cde0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
cdf0: 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72  ntext_collcompar
ce00: 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78  e_interop(contex
ce10: 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68  t, b1, b1.Length
ce20: 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29  , b2, b2.Length)
ce30: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
ce40: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
ce50: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
ce60: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
ce70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
ce80: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 43 6f 6c  nal override Col
ce90: 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 47  lationSequence G
cea0: 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65  etCollationSeque
ceb0: 6e 63 65 28 53 51 4c 69 74 65 46 75 6e 63 74 69  nce(SQLiteFuncti
cec0: 6f 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 20  on func, IntPtr 
ced0: 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d  context)..    {.
cee0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
cef0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 43 6f 6c  NDARD..      Col
cf00: 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 73  lationSequence s
cf10: 65 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74 69  eq = new Collati
cf20: 6f 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a 20  onSequence();.. 
cf30: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20       int len;.. 
cf40: 20 20 20 20 20 69 6e 74 20 74 79 70 65 3b 0d 0a       int type;..
cf50: 20 20 20 20 20 20 69 6e 74 20 65 6e 63 3b 0d 0a        int enc;..
cf60: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d        IntPtr p =
cf70: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
cf80: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
cf90: 74 65 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74  text_collseq_int
cfa0: 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 6f 75  erop(context, ou
cfb0: 74 20 74 79 70 65 2c 20 6f 75 74 20 65 6e 63 2c  t type, out enc,
cfc0: 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20   out len);....  
cfd0: 20 20 20 20 69 66 20 28 70 20 21 3d 20 6e 75 6c      if (p != nul
cfe0: 6c 29 20 73 65 71 2e 4e 61 6d 65 20 3d 20 55 54  l) seq.Name = UT
cff0: 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65  F8ToString(p, le
d000: 6e 29 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 54  n);..      seq.T
d010: 79 70 65 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e  ype = (Collation
d020: 54 79 70 65 45 6e 75 6d 29 74 79 70 65 3b 0d 0a  TypeEnum)type;..
d030: 20 20 20 20 20 20 73 65 71 2e 5f 66 75 6e 63 20        seq._func 
d040: 3d 20 66 75 6e 63 3b 0d 0a 20 20 20 20 20 20 73  = func;..      s
d050: 65 71 2e 45 6e 63 6f 64 69 6e 67 20 3d 20 28 43  eq.Encoding = (C
d060: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
d070: 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20 20  Enum)enc;....   
d080: 20 20 20 72 65 74 75 72 6e 20 73 65 71 3b 0d 0a     return seq;..
d090: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
d0a0: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
d0b0: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
d0c0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
d0d0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
d0e0: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
d0f0: 65 74 50 61 72 61 6d 56 61 6c 75 65 42 79 74 65  etParamValueByte
d100: 73 28 49 6e 74 50 74 72 20 70 2c 20 69 6e 74 20  s(IntPtr p, int 
d110: 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74  nDataOffset, byt
d120: 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  e[] bDest, int n
d130: 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
d140: 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
d150: 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73    int nlen = Uns
d160: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d170: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  .sqlite3_value_b
d180: 79 74 65 73 28 70 29 3b 0d 0a 0d 0a 20 20 20 20  ytes(p);....    
d190: 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69    // If no desti
d1a0: 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72  nation buffer, r
d1b0: 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e  eturn the size n
d1c0: 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66  eeded...      if
d1d0: 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29   (bDest == null)
d1e0: 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d   return nlen;...
d1f0: 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69  .      int nCopi
d200: 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d  ed = nLength;...
d210: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
d220: 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44  ed + nStart > bD
d230: 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70  est.Length) nCop
d240: 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67  ied = bDest.Leng
d250: 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20  th - nStart;..  
d260: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
d270: 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20  + nDataOffset > 
d280: 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20  nlen) nCopied = 
d290: 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73  nlen - nDataOffs
d2a0: 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  et;....      if 
d2b0: 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20  (nCopied > 0).. 
d2c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d2d0: 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73  IntPtr ptr = Uns
d2e0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d2f0: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  .sqlite3_value_b
d300: 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20  lob(p);....     
d310: 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28     Marshal.Copy(
d320: 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49  (IntPtr)(ptr.ToI
d330: 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66  nt64() + nDataOf
d340: 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53  fset), bDest, nS
d350: 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d  tart, nCopied);.
d360: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
d370: 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  else..      {.. 
d380: 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d         nCopied =
d390: 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a   0;..      }....
d3a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f        return nCo
d3b0: 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  pied;..    }....
d3c0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d3d0: 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74  rride double Get
d3e0: 50 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65  ParamValueDouble
d3f0: 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
d400: 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c    {..      doubl
d410: 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50  e value;..#if !P
d420: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
d430: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
d440: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
d450: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d460: 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65  te3_value_double
d470: 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53  (ptr);..#elif !S
d480: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
d490: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
d4a0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d4b0: 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69  3_value_double_i
d4c0: 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20  nterop(ptr, out 
d4d0: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
d4e0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
d4f0: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
d500: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
d510: 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  if..      return
d520: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a   value;..    }..
d530: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
d540: 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 50  verride int GetP
d550: 61 72 61 6d 56 61 6c 75 65 49 6e 74 33 32 28 49  aramValueInt32(I
d560: 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
d570: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
d580: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d590: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
d5a0: 65 5f 69 6e 74 28 70 74 72 29 3b 0d 0a 20 20 20  e_int(ptr);..   
d5b0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
d5c0: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
d5d0: 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e   GetParamValueIn
d5e0: 74 36 34 28 49 6e 74 50 74 72 20 70 74 72 29 0d  t64(IntPtr ptr).
d5f0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e  .    {..      In
d600: 74 36 34 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20  t64 value;..#if 
d610: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
d620: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
d630: 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65    value = Unsafe
d640: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d650: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36  lite3_value_int6
d660: 34 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21  4(ptr);..#elif !
d670: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
d680: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
d690: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d6a0: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69  e3_value_int64_i
d6b0: 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20  nterop(ptr, out 
d6c0: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
d6d0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
d6e0: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
d6f0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
d700: 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  if..      return
d710: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a   value;..    }..
d720: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
d730: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
d740: 65 74 50 61 72 61 6d 56 61 6c 75 65 54 65 78 74  etParamValueText
d750: 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
d760: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
d770: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
d780: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
d790: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
d7a0: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
d7b0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
d7c0: 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65  _value_text_inte
d7d0: 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 6c 65 6e  rop(ptr, out len
d7e0: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
d7f0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
d800: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
d810: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
d820: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
d830: 74 28 70 74 72 29 2c 0d 0a 20 20 20 20 20 20 20  t(ptr),..       
d840: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d850: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
d860: 75 65 5f 62 79 74 65 73 28 70 74 72 29 29 3b 0d  ue_bytes(ptr));.
d870: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
d880: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
d890: 76 65 72 72 69 64 65 20 54 79 70 65 41 66 66 69  verride TypeAffi
d8a0: 6e 69 74 79 20 47 65 74 50 61 72 61 6d 56 61 6c  nity GetParamVal
d8b0: 75 65 54 79 70 65 28 49 6e 74 50 74 72 20 70 74  ueType(IntPtr pt
d8c0: 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  r)..    {..     
d8d0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
d8e0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d8f0: 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70  te3_value_type(p
d900: 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
d910: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
d920: 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
d930: 42 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e 74  Blob(IntPtr cont
d940: 65 78 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75  ext, byte[] valu
d950: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
d960: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d970: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
d980: 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e 74 65 78 74  ult_blob(context
d990: 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75 65 2e 4c  , value, value.L
d9a0: 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28  ength, (IntPtr)(
d9b0: 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  -1));..    }....
d9c0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d9d0: 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
d9e0: 6e 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 63  nDouble(IntPtr c
d9f0: 6f 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65 20 76  ontext, double v
da00: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  alue)..    {..#i
da10: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
da20: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
da30: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
da40: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
da50: 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f  result_double(co
da60: 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
da70: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
da80: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e  ANDARD..      Un
da90: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
daa0: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
dab0: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
dac0: 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c  context, ref val
dad0: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
dae0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
daf0: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
db00: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
db10: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
db20: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
db30: 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72 6f 72  void ReturnError
db40: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
db50: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a   string value)..
db60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
db70: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
db80: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
db90: 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 54  error(context, T
dba0: 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20 76 61  oUTF8(value), va
dbb0: 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  lue.Length);..  
dbc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
dbd0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
dbe0: 64 20 52 65 74 75 72 6e 49 6e 74 33 32 28 49 6e  d ReturnInt32(In
dbf0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e  tPtr context, in
dc00: 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  t value)..    {.
dc10: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
dc20: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
dc30: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f  e3_result_int(co
dc40: 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
dc50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
dc60: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
dc70: 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36 34 28  oid ReturnInt64(
dc80: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
dc90: 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  long value)..   
dca0: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
dcb0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
dcc0: 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RK..      Unsafe
dcd0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
dce0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
dcf0: 36 34 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75  64(context, valu
dd00: 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
dd10: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
dd20: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
dd30: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
dd40: 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65  esult_int64_inte
dd50: 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66  rop(context, ref
dd60: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
dd70: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
dd80: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
dd90: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
dda0: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
ddb0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
ddc0: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 4e  ide void ReturnN
ddd0: 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ull(IntPtr conte
dde0: 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  xt)..    {..    
ddf0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
de00: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
de10: 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78  sult_null(contex
de20: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
de30: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
de40: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 54  ide void ReturnT
de50: 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ext(IntPtr conte
de60: 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  xt, string value
de70: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
de80: 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
de90: 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  8(value);..     
dea0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
deb0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
dec0: 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74  ult_text(context
ded0: 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c  , ToUTF8(value),
dee0: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28   b.Length - 1, (
def0: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
df00: 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45     }....#if INTE
df10: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
df20: 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  E..    /// <summ
df30: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61  ary>..    /// Ca
df40: 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53  lls the native S
df50: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
df60: 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  ry in order to c
df70: 72 65 61 74 65 20 61 20 64 69 73 70 6f 73 61 62  reate a disposab
df80: 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 6d 6f 64 75  le..    /// modu
df90: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
dfa0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
dfb0: 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
dfc0: 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ble...    /// </
dfd0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
dfe0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
dff0: 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  odule">..    ///
e000: 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65   The module obje
e010: 63 74 20 74 6f 20 62 65 20 75 73 65 64 20 77 68  ct to be used wh
e020: 65 6e 20 63 72 65 61 74 69 6e 67 20 74 68 65 20  en creating the 
e030: 6e 61 74 69 76 65 20 64 69 73 70 6f 73 61 62 6c  native disposabl
e040: 65 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 2f  e module...    /
e050: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
e060: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
e070: 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f  ="flags">..    /
e080: 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 66 6f 72  // The flags for
e090: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
e0a0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
e0b0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20  eConnection" /> 
e0c0: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
e0d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
e0e0: 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
e0f0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
e100: 72 65 61 74 65 4d 6f 64 75 6c 65 28 53 51 4c 69  reateModule(SQLi
e110: 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c  teModule module,
e120: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
e130: 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20  nFlags flags).. 
e140: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
e150: 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
e160: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
e170: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
e180: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
e190: 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20  module");....   
e1a0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
e1b0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
e1c0: 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64  onFlags.NoLogMod
e1d0: 75 6c 65 29 20 21 3d 20 53 51 4c 69 74 65 43 6f  ule) != SQLiteCo
e1e0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
e1f0: 4c 6f 67 4d 6f 64 75 6c 65 29 0d 0a 20 20 20 20  LogModule)..    
e200: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e210: 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 72 72     module.LogErr
e220: 6f 72 73 20 3d 20 28 28 66 6c 61 67 73 20 26 20  ors = ((flags & 
e230: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
e240: 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45  Flags.LogModuleE
e250: 72 72 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65 43  rror) == SQLiteC
e260: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
e270: 6f 67 4d 6f 64 75 6c 65 45 72 72 6f 72 29 3b 0d  ogModuleError);.
e280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64  .            mod
e290: 75 6c 65 2e 4c 6f 67 45 78 63 65 70 74 69 6f 6e  ule.LogException
e2a0: 73 20 3d 20 28 28 66 6c 61 67 73 20 26 20 53 51  s = ((flags & SQ
e2b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
e2c0: 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63  ags.LogModuleExc
e2d0: 65 70 74 69 6f 6e 29 20 3d 3d 20 53 51 4c 69 74  eption) == SQLit
e2e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
e2f0: 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70 74  .LogModuleExcept
e300: 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ion);..        }
e310: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
e320: 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
e330: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
e340: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
e350: 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e  tion("connection
e360: 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
e370: 68 61 6e 64 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20  handle");....   
e380: 20 20 20 20 20 53 65 74 4c 6f 61 64 45 78 74 65       SetLoadExte
e390: 6e 73 69 6f 6e 28 74 72 75 65 29 3b 0d 0a 20 20  nsion(true);..  
e3a0: 20 20 20 20 20 20 4c 6f 61 64 45 78 74 65 6e 73        LoadExtens
e3b0: 69 6f 6e 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ion(UnsafeNative
e3c0: 4d 65 74 68 6f 64 73 2e 53 51 4c 49 54 45 5f 44  Methods.SQLITE_D
e3d0: 4c 4c 2c 20 22 73 71 6c 69 74 65 33 5f 76 74 73  LL, "sqlite3_vts
e3e0: 68 69 6d 5f 69 6e 69 74 22 29 3b 0d 0a 0d 0a 20  him_init");.... 
e3f0: 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
e400: 65 2e 43 72 65 61 74 65 44 69 73 70 6f 73 61 62  e.CreateDisposab
e410: 6c 65 4d 6f 64 75 6c 65 28 5f 73 71 6c 29 29 0d  leModule(_sql)).
e420: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e430: 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f 64          if (_mod
e440: 75 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ules == null).. 
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
e460: 6d 6f 64 75 6c 65 73 20 3d 20 6e 65 77 20 44 69  modules = new Di
e470: 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
e480: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 28 29   SQLiteModule>()
e490: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
e4a0: 20 5f 6d 6f 64 75 6c 65 73 2e 41 64 64 28 6d 6f   _modules.Add(mo
e4b0: 64 75 6c 65 2e 4e 61 6d 65 2c 20 6d 6f 64 75 6c  dule.Name, modul
e4c0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
e4d0: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
e4e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e4f0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
e500: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 47  QLiteException(G
e510: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
e520: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
e530: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
e540: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
e550: 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65  Calls the native
e560: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
e570: 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f  rary in order to
e580: 20 63 6c 65 61 6e 75 70 20 74 68 65 20 72 65 73   cleanup the res
e590: 6f 75 72 63 65 73 0d 0a 20 20 20 20 2f 2f 2f 20  ources..    /// 
e5a0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
e5b0: 61 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e  a module contain
e5c0: 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  ing the implemen
e5d0: 74 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72 74  tation of a virt
e5e0: 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
e5f0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
e600: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
e610: 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20  ame="module">.. 
e620: 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c     /// The modul
e630: 65 20 6f 62 6a 65 63 74 20 70 72 65 76 69 6f 75  e object previou
e640: 73 6c 79 20 70 61 73 73 65 64 20 74 6f 20 74 68  sly passed to th
e650: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43 72 65  e <see cref="Cre
e660: 61 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20  ateModule" />.. 
e670: 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a     /// method...
e680: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
e690: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
e6a0: 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a   name="flags">..
e6b0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67      /// The flag
e6c0: 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69  s for the associ
e6d0: 61 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22  ated <see cref="
e6e0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
e6f0: 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
e700: 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ance...    /// <
e710: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
e720: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
e730: 6f 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c  oid DisposeModul
e740: 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d  e(SQLiteModule m
e750: 6f 64 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e  odule, SQLiteCon
e760: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
e770: 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  gs)..    {..    
e780: 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
e790: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
e7a0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
e7b0: 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
e7c0: 74 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d  tion("module");.
e7d0: 0a 0d 0a 20 20 20 20 20 20 20 20 6d 6f 64 75 6c  ...        modul
e7e0: 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20  e.Dispose();..  
e7f0: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
e800: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
e810: 72 69 64 65 20 49 6e 74 50 74 72 20 41 67 67 72  ride IntPtr Aggr
e820: 65 67 61 74 65 43 6f 6e 74 65 78 74 28 49 6e 74  egateContext(Int
e830: 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20  Ptr context)..  
e840: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
e850: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
e860: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67  thods.sqlite3_ag
e870: 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28  gregate_context(
e880: 63 6f 6e 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20  context, 1);..  
e890: 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52    }....#if INTER
e8a0: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
e8b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
e8c0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c  ry>..    /// Cal
e8d0: 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51  ls the native SQ
e8e0: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
e8f0: 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 64 65  y in order to de
e900: 63 6c 61 72 65 20 61 20 76 69 72 74 75 61 6c 20  clare a virtual 
e910: 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 69  table..    /// i
e920: 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20  n response to a 
e930: 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73  call into the <s
e940: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
e950: 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72  NativeModule.xCr
e960: 65 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f  eate" />..    //
e970: 2f 20 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22  / or <see cref="
e980: 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
e990: 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e  ule.xConnect" />
e9a0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d   virtual table m
e9b0: 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f  ethods...    ///
e9c0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
e9d0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
e9e0: 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20  ="module">..    
e9f0: 2f 2f 2f 20 54 68 65 20 76 69 72 74 75 61 6c 20  /// The virtual 
ea00: 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61  table module tha
ea10: 74 20 69 73 20 74 6f 20 62 65 20 72 65 73 70 6f  t is to be respo
ea20: 6e 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 76  nsible for the v
ea30: 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
ea40: 20 20 2f 2f 2f 20 62 65 69 6e 67 20 64 65 63 6c    /// being decl
ea50: 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ared...    /// <
ea60: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
ea70: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74   <param name="st
ea80: 72 53 71 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  rSql">..    /// 
ea90: 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  The string conta
eaa0: 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74  ining the SQL st
eab0: 61 74 65 6d 65 6e 74 20 64 65 73 63 72 69 62 69  atement describi
eac0: 6e 67 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ng the virtual t
ead0: 61 62 6c 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f  able to..    ///
eae0: 20 62 65 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20   be declared... 
eaf0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
eb00: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
eb10: 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20  name="error">.. 
eb20: 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
eb30: 65 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74  ess, the content
eb40: 73 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65  s of this parame
eb50: 74 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65  ter are undefine
eb60: 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65  d.  Upon failure
eb70: 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68  ,..    /// it sh
eb80: 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20  ould contain an 
eb90: 61 70 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f  appropriate erro
eba0: 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20  r message...    
ebb0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
ebc0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
ebd0: 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64  .    /// A stand
ebe0: 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
ebf0: 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f  n code...    ///
ec00: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
ec10: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
ec20: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
ec30: 64 65 20 44 65 63 6c 61 72 65 56 69 72 74 75 61  de DeclareVirtua
ec40: 6c 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20  lTable(..       
ec50: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f   SQLiteModule mo
ec60: 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 73  dule,..        s
ec70: 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 0d 0a 20  tring strSql,.. 
ec80: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
ec90: 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
eca0: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
ecb0: 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
ecc0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ull)..        {.
ecd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72  .            err
ece0: 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e  or = "connection
ecf0: 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
ed00: 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20  handle";..      
ed10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
ed20: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72  iteErrorCode.Err
ed30: 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  or;..        }..
ed40: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
ed50: 20 70 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a   pSql = IntPtr.Z
ed60: 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
ed70: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
ed80: 20 20 20 20 20 20 20 20 20 20 20 20 70 53 71 6c              pSql
ed90: 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e   = SQLiteString.
eda0: 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
edb0: 72 69 6e 67 28 73 74 72 53 71 6c 29 3b 0d 0a 0d  ring(strSql);...
edc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
edd0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
ede0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
edf0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 65 63  hods.sqlite3_dec
ee00: 6c 61 72 65 5f 76 74 61 62 28 0d 0a 20 20 20 20  lare_vtab(..    
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
ee20: 2c 20 70 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20  , pSql);....    
ee30: 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d          if ((n =
ee40: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
ee50: 65 2e 4f 6b 29 20 26 26 20 28 6d 6f 64 75 6c 65  e.Ok) && (module
ee60: 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   != null))..    
ee70: 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
ee80: 6c 65 2e 44 65 63 6c 61 72 65 64 20 3d 20 74 72  le.Declared = tr
ee90: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
eea0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
eeb0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
eec0: 65 72 72 6f 72 20 3d 20 47 65 74 4c 61 73 74 45  error = GetLastE
eed0: 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rror();....     
eee0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b         return n;
eef0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
ef00: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
ef10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ef20: 20 20 20 20 20 69 66 20 28 70 53 71 6c 20 21 3d       if (pSql !=
ef30: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
ef40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ef50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
ef60: 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28  LiteMemory.Free(
ef70: 70 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  pSql);..        
ef80: 20 20 20 20 20 20 20 20 70 53 71 6c 20 3d 20 49          pSql = I
ef90: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
efa0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
efb0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
efc0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
efd0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73  >..    /// Calls
efe0: 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69   the native SQLi
eff0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
f000: 69 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c  in order to decl
f010: 61 72 65 20 61 20 76 69 72 74 75 61 6c 20 74 61  are a virtual ta
f020: 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e  ble..    /// fun
f030: 63 74 69 6f 6e 20 69 6e 20 72 65 73 70 6f 6e 73  ction in respons
f040: 65 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f  e to a call into
f050: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
f060: 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
f070: 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d  ule.xCreate" />.
f080: 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65  .    /// or <see
f090: 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
f0a0: 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e  tiveModule.xConn
f0b0: 65 63 74 22 20 2f 3e 20 76 69 72 74 75 61 6c 20  ect" /> virtual 
f0c0: 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a  table methods...
f0d0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
f0e0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
f0f0: 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22  am name="module"
f100: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76  >..    /// The v
f110: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64  irtual table mod
f120: 75 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62  ule that is to b
f130: 65 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  e responsible fo
f140: 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  r the virtual ta
f150: 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e  ble..    /// fun
f160: 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c  ction being decl
f170: 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ared...    /// <
f180: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
f190: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
f1a0: 67 75 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d 0a 20  gumentCount">.. 
f1b0: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65     /// The numbe
f1c0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
f1d0: 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62  o the function b
f1e0: 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a  eing declared...
f1f0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
f200: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
f210: 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20   name="name">.. 
f220: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20     /// The name 
f230: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
f240: 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d  being declared..
f250: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
f260: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
f270: 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d  m name="error">.
f280: 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75  .    /// Upon su
f290: 63 63 65 73 73 2c 20 74 68 65 20 63 6f 6e 74 65  ccess, the conte
f2a0: 6e 74 73 20 6f 66 20 74 68 69 73 20 70 61 72 61  nts of this para
f2b0: 6d 65 74 65 72 20 61 72 65 20 75 6e 64 65 66 69  meter are undefi
f2c0: 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75  ned.  Upon failu
f2d0: 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20  re,..    /// it 
f2e0: 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61  should contain a
f2f0: 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 65 72  n appropriate er
f300: 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20  ror message...  
f310: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
f320: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
f330: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61  >..    /// A sta
f340: 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
f350: 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f  urn code...    /
f360: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
f370: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
f380: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
f390: 43 6f 64 65 20 44 65 63 6c 61 72 65 56 69 72 74  Code DeclareVirt
f3a0: 75 61 6c 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  ualFunction(..  
f3b0: 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75        SQLiteModu
f3c0: 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20  le module,..    
f3d0: 20 20 20 20 69 6e 74 20 61 72 67 75 6d 65 6e 74      int argument
f3e0: 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20  Count,..        
f3f0: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
f400: 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
f410: 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
f420: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
f430: 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75    if (_sql == nu
f440: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ll)..        {..
f450: 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
f460: 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20  r = "connection 
f470: 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
f480: 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20  andle";..       
f490: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
f4a0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
f4b0: 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  r;..        }...
f4c0: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
f4d0: 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a  pName = IntPtr.Z
f4e0: 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
f4f0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
f500: 20 20 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d              pNam
f510: 65 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67  e = SQLiteString
f520: 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53  .Utf8IntPtrFromS
f530: 74 72 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a  tring(name);....
f540: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
f550: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
f560: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f570: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 76 65 72  ods.sqlite3_over
f580: 6c 6f 61 64 5f 66 75 6e 63 74 69 6f 6e 28 0d 0a  load_function(..
f590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5a0: 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c 20 61 72 67  _sql, pName, arg
f5b0: 75 6d 65 6e 74 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  umentCount);....
f5c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
f5d0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
f5e0: 43 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d  Code.Ok) error =
f5f0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3b   GetLastError();
f600: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f610: 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20  return n;..     
f620: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
f630: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b  nally..        {
f640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
f650: 20 28 70 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74   (pName != IntPt
f660: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
f670: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f680: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65          SQLiteMe
f690: 6d 6f 72 79 2e 46 72 65 65 28 70 4e 61 6d 65 29  mory.Free(pName)
f6a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f6b0: 20 20 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74     pName = IntPt
f6c0: 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20  r.Zero;..       
f6d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
f6e0: 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66  }..    }..#endif
f6f0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
f700: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45  mary>..    /// E
f710: 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c  nables or disabl
f720: 65 64 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61  ed extension loa
f730: 64 69 6e 67 20 62 79 20 53 51 4c 69 74 65 2e 0d  ding by SQLite..
f740: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
f750: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
f760: 72 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66  ram name="bOnOff
f770: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65  ">..    /// True
f780: 20 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69   to enable loadi
f790: 6e 67 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73  ng of extensions
f7a0: 2c 20 66 61 6c 73 65 20 74 6f 20 64 69 73 61 62  , false to disab
f7b0: 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  le...    /// </p
f7c0: 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
f7d0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
f7e0: 64 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69  d SetLoadExtensi
f7f0: 6f 6e 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d  on(bool bOnOff).
f800: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
f810: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
f820: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
f830: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
f840: 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65  enable_load_exte
f850: 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  nsion(..        
f860: 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66      _sql, (bOnOf
f870: 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d  f ? -1 : 0));...
f880: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
f890: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
f8a0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
f8b0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
f8c0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
f8d0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
f8e0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
f8f0: 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61  .    /// Loads a
f900: 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f   SQLite extensio
f910: 6e 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 20 74  n library from t
f920: 68 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a  he named file...
f930: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
f940: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
f950: 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d  am name="fileNam
f960: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
f970: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 79 6e   name of the dyn
f980: 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72  amic link librar
f990: 79 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  y file containin
f9a0: 67 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e  g the extension.
f9b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
f9c0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
f9d0: 61 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d  am name="procNam
f9e0: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
f9f0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 65 78 70   name of the exp
fa00: 6f 72 74 65 64 20 66 75 6e 63 74 69 6f 6e 20 75  orted function u
fa10: 73 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a  sed to initializ
fa20: 65 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e  e the extension.
fa30: 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c  ..    /// If nul
fa40: 6c 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 22  l, the default "
fa50: 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f  sqlite3_extensio
fa60: 6e 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62 65 20  n_init" will be 
fa70: 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  used...    /// <
fa80: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
fa90: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
faa0: 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f  oid LoadExtensio
fab0: 6e 28 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d  n(string fileNam
fac0: 65 2c 20 73 74 72 69 6e 67 20 70 72 6f 63 4e 61  e, string procNa
fad0: 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  me)..    {..    
fae0: 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65      if (fileName
faf0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
fb00: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
fb10: 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
fb20: 65 70 74 69 6f 6e 28 22 66 69 6c 65 4e 61 6d 65  eption("fileName
fb30: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49  ");....        I
fb40: 6e 74 50 74 72 20 70 45 72 72 6f 72 20 3d 20 49  ntPtr pError = I
fb50: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
fb60: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
fb70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
fb80: 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38 46 69     byte[] utf8Fi
fb90: 6c 65 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63  leName = UTF8Enc
fba0: 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79  oding.UTF8.GetBy
fbb0: 74 65 73 28 66 69 6c 65 4e 61 6d 65 20 2b 20 27  tes(fileName + '
fbc0: 5c 30 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  \0');..         
fbd0: 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38 50 72     byte[] utf8Pr
fbe0: 6f 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  ocName = null;..
fbf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
fc00: 20 28 70 72 6f 63 4e 61 6d 65 20 21 3d 20 6e 75   (procName != nu
fc10: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
fc20: 20 20 20 20 20 75 74 66 38 50 72 6f 63 4e 61 6d       utf8ProcNam
fc30: 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67  e = UTF8Encoding
fc40: 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73 28 70  .UTF8.GetBytes(p
fc50: 72 6f 63 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b  rocName + '\0');
fc60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fc70: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
fc80: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
fc90: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
fca0: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d  load_extension(.
fcb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fcc0: 20 5f 73 71 6c 2c 20 75 74 66 38 46 69 6c 65 4e   _sql, utf8FileN
fcd0: 61 6d 65 2c 20 75 74 66 38 50 72 6f 63 4e 61 6d  ame, utf8ProcNam
fce0: 65 2c 20 72 65 66 20 70 45 72 72 6f 72 29 3b 0d  e, ref pError);.
fcf0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
fd00: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
fd10: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
fd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
fd30: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
fd40: 65 70 74 69 6f 6e 28 6e 2c 20 55 54 46 38 54 6f  eption(n, UTF8To
fd50: 53 74 72 69 6e 67 28 70 45 72 72 6f 72 2c 20 2d  String(pError, -
fd60: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  1));..        }.
fd70: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
fd80: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
fd90: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 45 72           if (pEr
fda0: 72 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  ror != IntPtr.Ze
fdb0: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
fdc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
fdd0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
fde0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
fdf0: 66 72 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20  free(pError);.. 
fe00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
fe10: 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a  Error = IntPtr.Z
fe20: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
fe30: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
fe40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
fe50: 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61   Enables or disa
fe60: 62 6c 65 64 20 65 78 74 65 6e 64 65 64 20 72 65  bled extended re
fe70: 73 75 6c 74 20 63 6f 64 65 73 20 72 65 74 75 72  sult codes retur
fe80: 6e 65 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20  ned by SQLite.. 
fe90: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
fea0: 72 69 64 65 20 76 6f 69 64 20 53 65 74 45 78 74  ride void SetExt
feb0: 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65 73  endedResultCodes
fec0: 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20  (bool bOnOff).. 
fed0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
fee0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
fef0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
ff00: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65  ods.sqlite3_exte
ff10: 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65  nded_result_code
ff20: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73  s(..          _s
ff30: 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31  ql, (bOnOff ? -1
ff40: 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20   : 0));....     
ff50: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
ff60: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
ff70: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
ff80: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
ff90: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
ffa0: 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73   }..    /// Gets
ffb0: 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65   the last SQLite
ffc0: 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20   error code..   
ffd0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
ffe0: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
fff0: 64 65 20 52 65 73 75 6c 74 43 6f 64 65 28 29 0d  de ResultCode().
10000 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
10010 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
10020 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10030 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d  _errcode(_sql);.
10040 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
10050 47 65 74 73 20 74 68 65 20 6c 61 73 74 20 53 51  Gets the last SQ
10060 4c 69 74 65 20 65 78 74 65 6e 64 65 64 20 65 72  Lite extended er
10070 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e  ror code..    in
10080 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10090 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
100a0 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f  ExtendedResultCo
100b0 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  de()..    {..   
100c0 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
100d0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
100e0 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65  lite3_extended_e
100f0 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20  rrcode(_sql);.. 
10100 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
10110 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67  Add a log messag
10120 65 20 76 69 61 20 74 68 65 20 53 51 4c 69 74 65  e via the SQLite
10130 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74   sqlite3_log int
10140 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74  erface...    int
10150 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
10160 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67 65 28 53  oid LogMessage(S
10170 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 69  QLiteErrorCode i
10180 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20  ErrCode, string 
10190 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20 7b  zMessage)..    {
101a0 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
101b0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
101c0 74 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f 64 65  te3_log(iErrCode
101d0 2c 20 54 6f 55 54 46 38 28 7a 4d 65 73 73 61 67  , ToUTF8(zMessag
101e0 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23  e));..    }....#
101f0 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43  if INTEROP_CODEC
10200 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10210 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
10220 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20  Password(byte[] 
10230 70 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a  passwordBytes)..
10240 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
10250 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
10260 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
10270 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6b 65 79  hods.sqlite3_key
10280 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f 72 64 42  (_sql, passwordB
10290 79 74 65 73 2c 20 70 61 73 73 77 6f 72 64 42 79  ytes, passwordBy
102a0 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  tes.Length);..  
102b0 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
102c0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
102d0 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
102e0 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
102f0 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
10300 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
10310 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
10320 6f 69 64 20 43 68 61 6e 67 65 50 61 73 73 77 6f  oid ChangePasswo
10330 72 64 28 62 79 74 65 5b 5d 20 6e 65 77 50 61 73  rd(byte[] newPas
10340 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20  swordBytes)..   
10350 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
10360 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
10370 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10380 73 2e 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 28  s.sqlite3_rekey(
10390 5f 73 71 6c 2c 20 6e 65 77 50 61 73 73 77 6f 72  _sql, newPasswor
103a0 64 42 79 74 65 73 2c 20 28 6e 65 77 50 61 73 73  dBytes, (newPass
103b0 77 6f 72 64 42 79 74 65 73 20 3d 3d 20 6e 75 6c  wordBytes == nul
103c0 6c 29 20 3f 20 30 20 3a 20 6e 65 77 50 61 73 73  l) ? 0 : newPass
103d0 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68  wordBytes.Length
103e0 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
103f0 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
10400 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
10410 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
10420 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
10430 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e  ());..    }..#en
10440 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  dif....    inter
10450 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
10460 64 20 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28  d SetUpdateHook(
10470 53 51 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c  SQLiteUpdateCall
10480 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
10490 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
104a0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
104b0 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b  ite3_update_hook
104c0 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
104d0 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
104e0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
104f0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
10500 53 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51  SetCommitHook(SQ
10510 4c 69 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  LiteCommitCallba
10520 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
10530 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
10540 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10550 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f  e3_commit_hook(_
10560 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
10570 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
10580 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
10590 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
105a0 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53  tTraceCallback(S
105b0 51 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61  QLiteTraceCallba
105c0 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
105d0 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
105e0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
105f0 65 33 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20 66  e3_trace(_sql, f
10600 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
10610 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
10620 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
10630 64 65 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62  de void SetRollb
10640 61 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f  ackHook(SQLiteRo
10650 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66  llbackCallback f
10660 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  unc)..    {..   
10670 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
10680 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
10690 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71  ollback_hook(_sq
106a0 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
106b0 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
106c0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
106d0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f  y>..    /// Allo
106e0 77 73 20 74 68 65 20 73 65 74 74 69 6e 67 20 6f  ws the setting o
106f0 66 20 61 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c  f a logging call
10700 62 61 63 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20  back invoked by 
10710 53 51 4c 69 74 65 20 77 68 65 6e 20 61 0d 0a 20  SQLite when a.. 
10720 20 20 20 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74     /// log event
10730 20 6f 63 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f   occurs.  Only o
10740 6e 65 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20  ne callback may 
10750 62 65 20 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c  be set.  If NULL
10760 20 69 73 20 70 61 73 73 65 64 2c 0d 0a 20 20 20   is passed,..   
10770 20 2f 2f 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67   /// the logging
10780 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72   callback is unr
10790 65 67 69 73 74 65 72 65 64 2e 0d 0a 20 20 20 20  egistered...    
107a0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
107b0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
107c0 61 6d 65 3d 22 66 75 6e 63 22 3e 54 68 65 20 63  ame="func">The c
107d0 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e  allback function
107e0 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72   to invoke.</par
107f0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
10800 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20  turns>Returns a 
10810 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74  result code</ret
10820 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
10830 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
10840 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74  iteErrorCode Set
10850 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69  LogCallback(SQLi
10860 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75  teLogCallback fu
10870 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nc)..    {..    
10880 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
10890 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e  ode rc = UnsafeN
108a0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
108b0 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28  ite3_config_log(
108c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
108d0 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75  LiteConfigOpsEnu
108e0 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  m.SQLITE_CONFIG_
108f0 4c 4f 47 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  LOG, func, IntPt
10900 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20  r.Zero);....    
10910 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a      return rc;..
10920 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
10930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
10990 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
109a0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74  >..    /// Creat
109b0 65 73 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20  es a new SQLite 
109c0 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 62 61  backup object ba
109d0 73 65 64 20 6f 6e 20 74 68 65 20 70 72 6f 76 69  sed on the provi
109e0 64 65 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d  ded destination.
109f0 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73  .    /// databas
10a00 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
10a10 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
10a20 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
10a30 20 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f   the one..    //
10a40 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  / associated wit
10a50 68 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20  h this object.  
10a60 54 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 64  The source and d
10a70 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62  estination datab
10a80 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e  ase..    /// con
10a90 6e 65 63 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20  nections cannot 
10aa0 62 65 20 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20  be the same...  
10ab0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
10ac0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
10ad0 20 6e 61 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e   name="destCnn">
10ae0 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  The destination 
10af0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
10b00 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ion.</param>..  
10b10 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
10b20 65 3d 22 64 65 73 74 4e 61 6d 65 22 3e 54 68 65  e="destName">The
10b30 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
10b40 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72  abase name.</par
10b50 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
10b60 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65  ram name="source
10b70 4e 61 6d 65 22 3e 54 68 65 20 73 6f 75 72 63 65  Name">The source
10b80 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c   database name.<
10b90 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
10ba0 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 65   <returns>The ne
10bb0 77 6c 79 20 63 72 65 61 74 65 64 20 62 61 63 6b  wly created back
10bc0 75 70 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75  up object.</retu
10bd0 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
10be0 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
10bf0 74 65 42 61 63 6b 75 70 20 49 6e 69 74 69 61 6c  teBackup Initial
10c00 69 7a 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  izeBackup(..    
10c10 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
10c20 74 69 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20  tion destCnn,.. 
10c30 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
10c40 73 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  stName,..       
10c50 20 73 74 72 69 6e 67 20 73 6f 75 72 63 65 4e 61   string sourceNa
10c60 6d 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  me..        ).. 
10c70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
10c80 20 28 64 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c   (destCnn == nul
10c90 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
10ca0 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
10cb0 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
10cc0 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20  "destCnn");.... 
10cd0 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74 4e         if (destN
10ce0 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame == null)..  
10cf0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
10d00 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
10d10 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74 4e  Exception("destN
10d20 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ame");....      
10d30 20 20 69 66 20 28 73 6f 75 72 63 65 4e 61 6d 65    if (sourceName
10d40 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
10d50 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
10d60 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
10d70 65 70 74 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61  eption("sourceNa
10d80 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me");....       
10d90 20 53 51 4c 69 74 65 33 20 64 65 73 74 53 71 6c   SQLite3 destSql
10da0 69 74 65 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f  ite3 = destCnn._
10db0 73 71 6c 20 61 73 20 53 51 4c 69 74 65 33 3b 0d  sql as SQLite3;.
10dc0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  ...        if (d
10dd0 65 73 74 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75  estSqlite3 == nu
10de0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
10df0 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
10e00 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  entException(.. 
10e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
10e20 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e  Destination conn
10e30 65 63 74 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72  ection has no wr
10e40 61 70 70 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20  apper.",..      
10e50 20 20 20 20 20 20 20 20 20 20 22 64 65 73 74 43            "destC
10e60 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nn");....       
10e70 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
10e80 6e 48 61 6e 64 6c 65 20 64 65 73 74 48 61 6e 64  nHandle destHand
10e90 6c 65 20 3d 20 64 65 73 74 53 71 6c 69 74 65 33  le = destSqlite3
10ea0 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20  ._sql;....      
10eb0 20 20 69 66 20 28 64 65 73 74 48 61 6e 64 6c 65    if (destHandle
10ec0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
10ed0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
10ee0 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69   ArgumentExcepti
10ef0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
10f00 20 20 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f       "Destinatio
10f10 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73  n connection has
10f20 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
10f30 6c 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  le.",..         
10f40 20 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22         "destCnn"
10f50 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
10f60 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
10f70 6e 64 6c 65 20 73 6f 75 72 63 65 48 61 6e 64 6c  ndle sourceHandl
10f80 65 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20  e = _sql;....   
10f90 20 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 48       if (sourceH
10fa0 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
10fc0 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
10fd0 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
10fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10ff0 20 20 22 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63    "Source connec
11000 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61  tion has an inva
11010 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
11020 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d  ..        byte[]
11030 20 7a 44 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55   zDestName = ToU
11040 54 46 38 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a  TF8(destName);..
11050 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a          byte[] z
11060 53 6f 75 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55  SourceName = ToU
11070 54 46 38 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b  TF8(sourceName);
11080 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
11090 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 62  teBackupHandle b
110a0 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 75  ackupHandle = nu
110b0 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ll;....        t
110c0 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
110d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
110e0 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
110f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
11100 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54  nally /* NOTE: T
11110 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72  hread.Abort() pr
11120 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20  otection. */..  
11130 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11140 20 20 20 20 20 49 6e 74 50 74 72 20 62 61 63 6b       IntPtr back
11150 75 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  up = UnsafeNativ
11160 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11170 5f 62 61 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20  _backup_init(.. 
11180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
11190 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74  estHandle, zDest
111a0 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64  Name, sourceHand
111b0 6c 65 2c 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29  le, zSourceName)
111c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
111d0 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 49   if (backup == I
111e0 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
111f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11200 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
11210 74 65 45 72 72 6f 72 43 6f 64 65 20 72 65 73 75  teErrorCode resu
11220 6c 74 43 6f 64 65 20 3d 20 52 65 73 75 6c 74 43  ltCode = ResultC
11230 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ode();....      
11240 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
11250 73 75 6c 74 43 6f 64 65 20 21 3d 20 53 51 4c 69  sultCode != SQLi
11260 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
11270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11280 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
11290 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72  QLiteException(r
112a0 65 73 75 6c 74 43 6f 64 65 2c 20 47 65 74 4c 61  esultCode, GetLa
112b0 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
112c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
112d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
112e0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
112f0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
11300 28 22 66 61 69 6c 65 64 20 74 6f 20 69 6e 69 74  ("failed to init
11310 69 61 6c 69 7a 65 20 62 61 63 6b 75 70 22 29 3b  ialize backup");
11320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
11330 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ...            b
11340 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 65  ackupHandle = ne
11350 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61  w SQLiteBackupHa
11360 6e 64 6c 65 28 64 65 73 74 48 61 6e 64 6c 65 2c  ndle(destHandle,
11370 20 62 61 63 6b 75 70 29 3b 0d 0a 20 20 20 20 20   backup);..     
11380 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
11390 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74  return new SQLit
113a0 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  eBackup(..      
113b0 20 20 20 20 20 20 74 68 69 73 2c 20 62 61 63 6b        this, back
113c0 75 70 48 61 6e 64 6c 65 2c 20 64 65 73 74 48 61  upHandle, destHa
113d0 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c  ndle, zDestName,
113e0 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 0d 0a   sourceHandle,..
113f0 20 20 20 20 20 20 20 20 20 20 20 20 7a 53 6f 75              zSou
11400 72 63 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d  rceName);..    }
11410 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
11420 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
11430 6f 70 69 65 73 20 75 70 20 74 6f 20 4e 20 70 61  opies up to N pa
11440 67 65 73 20 66 72 6f 6d 20 74 68 65 20 73 6f 75  ges from the sou
11450 72 63 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  rce database to 
11460 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d  the destination.
11470 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73  .    /// databas
11480 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
11490 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  h the specified 
114a0 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a  backup object...
114b0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
114c0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
114d0 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22  am name="backup"
114e0 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65  >The backup obje
114f0 63 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61  ct to use.</para
11500 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
11510 61 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22 3e  am name="nPage">
11520 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75  ..    /// The nu
11530 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f  mber of pages to
11540 20 63 6f 70 79 2c 20 6e 65 67 61 74 69 76 65 20   copy, negative 
11550 74 6f 20 63 6f 70 79 20 61 6c 6c 20 72 65 6d 61  to copy all rema
11560 69 6e 69 6e 67 20 70 61 67 65 73 2e 0d 0a 20 20  ining pages...  
11570 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
11580 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
11590 61 6d 65 3d 22 72 65 74 72 79 22 3e 0d 0a 20 20  ame="retry">..  
115a0 20 20 2f 2f 2f 20 53 65 74 20 74 6f 20 74 72 75    /// Set to tru
115b0 65 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 69  e if the operati
115c0 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  on needs to be r
115d0 65 74 72 69 65 64 20 64 75 65 20 74 6f 20 64 61  etried due to da
115e0 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20  tabase..    /// 
115f0 6c 6f 63 6b 69 6e 67 20 69 73 73 75 65 73 3b 20  locking issues; 
11600 6f 74 68 65 72 77 69 73 65 2c 20 73 65 74 20 74  otherwise, set t
11610 6f 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f  o false...    //
11620 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
11630 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
11640 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 74     /// True if t
11650 68 65 72 65 20 61 72 65 20 6d 6f 72 65 20 70 61  here are more pa
11660 67 65 73 20 74 6f 20 62 65 20 63 6f 70 69 65 64  ges to be copied
11670 2c 20 66 61 6c 73 65 20 6f 74 68 65 72 77 69 73  , false otherwis
11680 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  e...    /// </re
11690 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
116a0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
116b0 6f 6c 20 53 74 65 70 42 61 63 6b 75 70 28 0d 0a  ol StepBackup(..
116c0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
116d0 63 6b 75 70 20 62 61 63 6b 75 70 2c 0d 0a 20 20  ckup backup,..  
116e0 20 20 20 20 20 20 69 6e 74 20 6e 50 61 67 65 2c        int nPage,
116f0 0d 0a 20 20 20 20 20 20 20 20 6f 75 74 20 62 6f  ..        out bo
11700 6f 6c 20 72 65 74 72 79 0d 0a 20 20 20 20 20 20  ol retry..      
11710 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
11720 20 20 20 20 72 65 74 72 79 20 3d 20 66 61 6c 73      retry = fals
11730 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
11740 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c   (backup == null
11750 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
11760 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
11770 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
11780 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20  backup");....   
11790 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
117a0 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  pHandle handle =
117b0 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f   backup._sqlite_
117c0 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20  backup;....     
117d0 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d     if (handle ==
117e0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
117f0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
11800 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
11810 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
11820 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
11830 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
11840 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
11850 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
11860 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d  tPtr handlePtr =
11870 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
11880 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74      if (handlePt
11890 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r == IntPtr.Zero
118a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
118b0 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
118c0 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
118d0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
118e0 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
118f0 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
11900 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65  id handle pointe
11910 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r.");....       
11920 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
11930 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
11940 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11950 5f 62 61 63 6b 75 70 5f 73 74 65 70 28 68 61 6e  _backup_step(han
11960 64 6c 65 50 74 72 2c 20 6e 50 61 67 65 29 3b 0d  dlePtr, nPage);.
11970 0a 20 20 20 20 20 20 20 20 62 61 63 6b 75 70 2e  .        backup.
11980 5f 73 74 65 70 52 65 73 75 6c 74 20 3d 20 6e 3b  _stepResult = n;
11990 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 76 65 20 66   /* NOTE: Save f
119a0 6f 72 20 75 73 65 20 62 79 20 46 69 6e 69 73 68  or use by Finish
119b0 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20 20  Backup. */....  
119c0 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
119d0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
119e0 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  k)..        {.. 
119f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11a00 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
11a10 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
11a20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
11a30 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d  ErrorCode.Busy).
11a40 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
11a50 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20          retry = 
11a60 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
11a70 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
11a80 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
11a90 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d      else if (n =
11aa0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
11ab0 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20 20 20 20  e.Locked)..     
11ac0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11ad0 20 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b 0d    retry = true;.
11ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
11af0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
11b00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
11b10 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69  se if (n == SQLi
11b20 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65  teErrorCode.Done
11b30 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
11b40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11b50 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
11b60 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
11b70 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
11b80 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
11b90 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
11ba0 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
11bb0 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  or());..        
11bc0 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
11bd0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
11be0 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
11bf0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
11c00 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20  es remaining to 
11c10 62 65 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74  be copied from t
11c20 68 65 20 73 6f 75 72 63 65 0d 0a 20 20 20 20 2f  he source..    /
11c30 2f 2f 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  // database to t
11c40 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  he destination d
11c50 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74  atabase associat
11c60 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63  ed with the spec
11c70 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62  ified..    /// b
11c80 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20  ackup object... 
11c90 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
11ca0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
11cb0 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
11cc0 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
11cd0 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72  t to check.</par
11ce0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
11cf0 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72  turns>The number
11d00 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e   of pages remain
11d10 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64  ing to be copied
11d20 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
11d30 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
11d40 64 65 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e 67  de int Remaining
11d50 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
11d60 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61   SQLiteBackup ba
11d70 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d  ckup..        ).
11d80 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
11d90 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75  if (backup == nu
11da0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
11db0 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
11dc0 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
11dd0 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20  ("backup");.... 
11de0 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
11df0 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  kupHandle handle
11e00 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74   = backup._sqlit
11e10 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20  e_backup;....   
11e20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20       if (handle 
11e30 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
11e40 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
11e50 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
11e60 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
11e70 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
11e80 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
11e90 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
11ea0 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
11eb0 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72  IntPtr handlePtr
11ec0 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
11ed0 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
11ee0 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  Ptr == IntPtr.Ze
11ef0 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
11f00 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
11f10 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
11f20 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
11f30 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
11f40 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
11f50 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e  alid handle poin
11f60 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ter.");....     
11f70 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
11f80 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
11f90 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 72 65 6d  lite3_backup_rem
11fa0 61 69 6e 69 6e 67 28 68 61 6e 64 6c 65 50 74 72  aining(handlePtr
11fb0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
11fc0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
11fd0 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
11fe0 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
11ff0 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
12000 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
12010 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20   associated..   
12020 20 2f 2f 2f 20 77 69 74 68 20 74 68 65 20 73 70   /// with the sp
12030 65 63 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f  ecified backup o
12040 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bject...    /// 
12050 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
12060 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
12070 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63  "backup">The bac
12080 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68  kup object to ch
12090 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  eck.</param>..  
120a0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
120b0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
120c0 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
120d0 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 2e  source database.
120e0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
120f0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
12100 65 20 69 6e 74 20 50 61 67 65 43 6f 75 6e 74 42  e int PageCountB
12110 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
12120 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63  SQLiteBackup bac
12130 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  kup..        )..
12140 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
12150 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c  f (backup == nul
12160 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
12170 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
12180 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
12190 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20  "backup");....  
121a0 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
121b0 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  upHandle handle 
121c0 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65  = backup._sqlite
121d0 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20  _backup;....    
121e0 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d      if (handle =
121f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
12200 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
12210 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
12220 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
12230 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
12240 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
12250 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
12260 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49  ");....        I
12270 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20  ntPtr handlePtr 
12280 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
12290 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50       if (handleP
122a0 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tr == IntPtr.Zer
122b0 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
122c0 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
122d0 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
122e0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
122f0 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
12300 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
12310 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74  lid handle point
12320 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  er.");....      
12330 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
12340 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
12350 69 74 65 33 5f 62 61 63 6b 75 70 5f 70 61 67 65  ite3_backup_page
12360 63 6f 75 6e 74 28 68 61 6e 64 6c 65 50 74 72 29  count(handlePtr)
12370 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
12380 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
12390 20 20 20 2f 2f 2f 20 44 65 73 74 72 6f 79 73 20     /// Destroys 
123a0 74 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  the backup objec
123b0 74 2c 20 72 6f 6c 6c 69 6e 67 20 62 61 63 6b 20  t, rolling back 
123c0 61 6e 79 20 62 61 63 6b 75 70 20 74 68 61 74 20  any backup that 
123d0 6d 61 79 20 62 65 20 69 6e 0d 0a 20 20 20 20 2f  may be in..    /
123e0 2f 2f 20 70 72 6f 67 65 73 73 2e 0d 0a 20 20 20  // progess...   
123f0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
12400 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
12410 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68  name="backup">Th
12420 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
12430 74 6f 20 64 65 73 74 72 6f 79 2e 3c 2f 70 61 72  to destroy.</par
12440 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
12450 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
12460 46 69 6e 69 73 68 42 61 63 6b 75 70 28 0d 0a 20  FinishBackup(.. 
12470 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
12480 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20  kup backup..    
12490 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
124a0 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70        if (backup
124b0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
124c0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
124d0 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
124e0 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29  eption("backup")
124f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
12500 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20  iteBackupHandle 
12510 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e  handle = backup.
12520 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d  _sqlite_backup;.
12530 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
12540 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
12550 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
12560 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
12570 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
12580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12590 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
125a0 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
125b0 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20  handle.");....  
125c0 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
125d0 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  dlePtr = handle;
125e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
125f0 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74  handlePtr == Int
12600 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
12610 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
12620 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
12630 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
12640 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
12650 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
12660 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
12670 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d  e pointer.");...
12680 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
12690 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53  NDARD..        S
126a0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
126b0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
126c0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
126d0 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74  ackup_finish_int
126e0 65 72 6f 70 28 68 61 6e 64 6c 65 50 74 72 29 3b  erop(handlePtr);
126f0 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
12700 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12710 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
12720 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12730 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 68  _backup_finish(h
12740 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6e 64  andlePtr);..#end
12750 69 66 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64  if..        hand
12760 6c 65 2e 53 65 74 48 61 6e 64 6c 65 41 73 49 6e  le.SetHandleAsIn
12770 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a 23 69 66 20  valid();....#if 
12780 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 0d 0a 20 20  COUNT_HANDLE..  
12790 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20        if ((n == 
127a0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
127b0 4f 6b 29 20 7c 7c 20 28 6e 20 3d 3d 20 62 61 63  Ok) || (n == bac
127c0 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29  kup._stepResult)
127d0 29 20 68 61 6e 64 6c 65 2e 57 61 73 52 65 6c 65  ) handle.WasRele
127e0 61 73 65 64 4f 6b 28 29 3b 0d 0a 23 65 6e 64 69  asedOk();..#endi
127f0 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  f....        if 
12800 28 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72  ((n != SQLiteErr
12810 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6e  orCode.Ok) && (n
12820 20 21 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70   != backup._step
12830 52 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 20  Result))..      
12840 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
12850 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
12860 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
12870 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
12880 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
12890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
128a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
128b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
128c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
128d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
128e0 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  /....    /// <su
128f0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
12900 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68  Determines if th
12910 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
12920 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 20 69  brary has been i
12930 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74  nitialized for t
12940 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72  he..    /// curr
12950 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20  ent process...  
12960 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
12970 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
12980 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62  ns>..    /// A b
12990 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e  oolean indicatin
129a0 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
129b0 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
129c0 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65   library has bee
129d0 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69  n..    /// initi
129e0 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63  alized for the c
129f0 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d  urrent process..
12a00 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
12a10 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
12a20 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
12a30 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d  IsInitialized().
12a40 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
12a50 72 65 74 75 72 6e 20 53 74 61 74 69 63 49 73 49  return StaticIsI
12a60 6e 69 74 69 61 6c 69 7a 65 64 28 29 3b 0d 0a 20  nitialized();.. 
12a70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
12a80 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
12a90 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66  // Determines if
12aa0 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
12ab0 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65   library has bee
12ac0 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f  n initialized fo
12ad0 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63  r the..    /// c
12ae0 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d  urrent process..
12af0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
12b00 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
12b10 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
12b20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61  A boolean indica
12b30 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
12b40 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  not the SQLite c
12b50 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20  ore library has 
12b60 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e  been..    /// in
12b70 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68  itialized for th
12b80 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
12b90 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  s...    /// </re
12ba0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
12bb0 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c  rnal static bool
12bc0 20 53 74 61 74 69 63 49 73 49 6e 69 74 69 61 6c   StaticIsInitial
12bd0 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  ized()..    {.. 
12be0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
12bf0 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 50 72     // BUGFIX: Pr
12c00 65 76 65 6e 74 20 72 61 63 65 73 20 77 69 74 68  event races with
12c10 20 6f 74 68 65 72 20 74 68 72 65 61 64 73 20 66   other threads f
12c20 6f 72 20 74 68 69 73 20 65 6e 74 69 72 65 20 62  or this entire b
12c30 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20 20 20 20 20  lock, due..     
12c40 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 74 6f     //         to
12c50 20 74 68 65 20 74 72 79 2f 66 69 6e 61 6c 6c 79   the try/finally
12c60 20 73 65 6d 61 6e 74 69 63 73 2e 20 20 53 65 65   semantics.  See
12c70 20 74 69 63 6b 65 74 20 5b 37 32 39 30 35 63 39   ticket [72905c9
12c80 61 37 37 5d 2e 0d 0a 20 20 20 20 20 20 20 20 2f  a77]...        /
12c90 2f 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20  /..        lock 
12ca0 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20  (syncRoot)..    
12cb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12cc0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
12cd0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 61 76 65     // NOTE: Save
12ce0 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
12cf0 65 20 6c 6f 67 67 69 6e 67 20 63 6c 61 73 73 20  e logging class 
12d00 61 6e 64 20 74 68 65 6e 20 72 65 73 74 6f 72 65  and then restore
12d10 20 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20   it..           
12d20 20 2f 2f 20 20 20 20 20 20 20 61 66 74 65 72 20   //       after 
12d30 77 65 20 61 72 65 20 64 6f 6e 65 20 74 6f 20 61  we are done to a
12d40 76 6f 69 64 20 6c 6f 67 67 69 6e 67 20 74 6f 6f  void logging too
12d50 20 6d 61 6e 79 20 66 61 6c 73 65 20 65 72 72 6f   many false erro
12d60 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs...           
12d70 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
12d80 20 62 6f 6f 6c 20 73 61 76 65 64 45 6e 61 62 6c   bool savedEnabl
12d90 65 64 20 3d 20 53 51 4c 69 74 65 4c 6f 67 2e 45  ed = SQLiteLog.E
12da0 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20  nabled;..       
12db0 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45       SQLiteLog.E
12dc0 6e 61 62 6c 65 64 20 3d 20 66 61 6c 73 65 3b 0d  nabled = false;.
12dd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
12de0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
12df0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12e00 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
12e10 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
12e20 54 68 69 73 20 6d 65 74 68 6f 64 20 5b 61 62 5d  This method [ab]
12e30 75 73 65 73 20 74 68 65 20 66 61 63 74 20 74 68  uses the fact th
12e40 61 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 61  at SQLite will a
12e50 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20 20  lways..         
12e60 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
12e70 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
12e80 52 4f 52 20 66 6f 72 20 61 6e 79 20 75 6e 6b 6e  ROR for any unkn
12e90 6f 77 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  own configuratio
12ea0 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20  n option..      
12eb0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
12ec0 20 20 20 2a 75 6e 6c 65 73 73 2a 20 74 68 65 20     *unless* the 
12ed0 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 68  SQLite library h
12ee0 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
12ef0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0d 0a 20 20  initialized...  
12f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
12f10 20 20 20 20 20 20 20 49 6e 20 74 68 61 74 20 63         In that c
12f20 61 73 65 20 69 74 20 77 69 6c 6c 20 61 6c 77 61  ase it will alwa
12f30 79 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ys return SQLITE
12f40 5f 4d 49 53 55 53 45 2e 0d 0a 20 20 20 20 20 20  _MISUSE...      
12f50 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
12f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
12f70 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
12f80 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
12f90 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
12fa0 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20 20 20  onfig_none(..   
12fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fc0 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73   SQLiteConfigOps
12fd0 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46  Enum.SQLITE_CONF
12fe0 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20 20 20  IG_NONE);....   
12ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
13000 75 72 6e 20 28 72 63 20 3d 3d 20 53 51 4c 69 74  urn (rc == SQLit
13010 65 45 72 72 6f 72 43 6f 64 65 2e 4d 69 73 75 73  eErrorCode.Misus
13020 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
13030 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
13040 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
13050 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13060 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
13070 67 2e 45 6e 61 62 6c 65 64 20 3d 20 73 61 76 65  g.Enabled = save
13080 64 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20  dEnabled;..     
13090 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
130a0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
130b0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
130c0 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20  .    /// Helper 
130d0 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74 72  function to retr
130e0 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66  ieve a column of
130f0 20 64 61 74 61 20 66 72 6f 6d 20 61 6e 20 61 63   data from an ac
13100 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d  tive statement..
13110 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
13120 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
13130 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e  ram name="stmt">
13140 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  The statement be
13150 69 6e 67 20 73 74 65 70 28 29 27 64 20 74 68 72  ing step()'d thr
13160 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ough</param>..  
13170 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
13180 65 3d 22 66 6c 61 67 73 22 3e 54 68 65 20 66 6c  e="flags">The fl
13190 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
131a0 69 74 68 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ith the connecti
131b0 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  on.</param>..   
131c0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
131d0 3d 22 69 6e 64 65 78 22 3e 54 68 65 20 63 6f 6c  ="index">The col
131e0 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72 65 74  umn index to ret
131f0 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20  rieve</param>.. 
13200 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
13210 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70  me="typ">The typ
13220 65 20 6f 66 20 64 61 74 61 20 63 6f 6e 74 61 69  e of data contai
13230 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ned in the colum
13240 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74 69 61 6c  n.  If Uninitial
13250 69 7a 65 64 2c 20 74 68 69 73 20 66 75 6e 63 74  ized, this funct
13260 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69 65 76  ion will retriev
13270 65 20 74 68 65 20 64 61 74 61 74 79 70 65 20 69  e the datatype i
13280 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61 72  nformation.</par
13290 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
132a0 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 74 68  turns>Returns th
132b0 65 20 64 61 74 61 20 69 6e 20 74 68 65 20 63 6f  e data in the co
132c0 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  lumn</returns>..
132d0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
132e0 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74  rride object Get
132f0 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61 74  Value(SQLiteStat
13300 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
13310 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
13320 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
13330 65 78 2c 20 53 51 4c 69 74 65 54 79 70 65 20 74  ex, SQLiteType t
13340 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  yp)..    {..    
13350 20 20 69 66 20 28 49 73 4e 75 6c 6c 28 73 74 6d    if (IsNull(stm
13360 74 2c 20 69 6e 64 65 78 29 29 20 72 65 74 75 72  t, index)) retur
13370 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d  n DBNull.Value;.
13380 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
13390 69 74 79 20 61 66 66 20 3d 20 74 79 70 2e 41 66  ity aff = typ.Af
133a0 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 54  finity;..      T
133b0 79 70 65 20 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  ype t = null;...
133c0 0a 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54  .      if (typ.T
133d0 79 70 65 20 21 3d 20 44 62 54 79 70 65 2e 4f 62  ype != DbType.Ob
133e0 6a 65 63 74 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  ject)..      {..
133f0 20 20 20 20 20 20 20 20 74 20 3d 20 53 51 4c 69          t = SQLi
13400 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65  teConvert.SQLite
13410 54 79 70 65 54 6f 54 79 70 65 28 74 79 70 29 3b  TypeToType(typ);
13420 0d 0a 20 20 20 20 20 20 20 20 61 66 66 20 3d 20  ..        aff = 
13430 54 79 70 65 54 6f 41 66 66 69 6e 69 74 79 28 74  TypeToAffinity(t
13440 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  );..      }.... 
13450 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
13460 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
13470 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73  onFlags.GetAllAs
13480 54 65 78 74 29 20 3d 3d 20 53 51 4c 69 74 65 43  Text) == SQLiteC
13490 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47  onnectionFlags.G
134a0 65 74 41 6c 6c 41 73 54 65 78 74 29 0d 0a 20 20  etAllAsText)..  
134b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
134c0 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64  etText(stmt, ind
134d0 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77  ex);....      sw
134e0 69 74 63 68 20 28 61 66 66 29 0d 0a 20 20 20 20  itch (aff)..    
134f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73    {..        cas
13500 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42  e TypeAffinity.B
13510 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  lob:..          
13520 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20  if (typ.Type == 
13530 44 62 54 79 70 65 2e 47 75 69 64 20 26 26 20 74  DbType.Guid && t
13540 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54  yp.Affinity == T
13550 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74  ypeAffinity.Text
13560 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
13570 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28 47  eturn new Guid(G
13580 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64  etText(stmt, ind
13590 65 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ex));....       
135a0 20 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29     int n = (int)
135b0 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69  GetBytes(stmt, i
135c0 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30  ndex, 0, null, 0
135d0 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  , 0);..         
135e0 20 62 79 74 65 5b 5d 20 62 20 3d 20 6e 65 77 20   byte[] b = new 
135f0 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20  byte[n];..      
13600 20 20 20 20 47 65 74 42 79 74 65 73 28 73 74 6d      GetBytes(stm
13610 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62 2c 20  t, index, 0, b, 
13620 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  0, n);....      
13630 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65      if (typ.Type
13640 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20   == DbType.Guid 
13650 26 26 20 6e 20 3d 3d 20 31 36 29 0d 0a 20 20 20  && n == 16)..   
13660 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
13670 6e 65 77 20 47 75 69 64 28 62 29 3b 0d 0a 0d 0a  new Guid(b);....
13680 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
13690 20 62 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73   b;..        cas
136a0 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44  e TypeAffinity.D
136b0 61 74 65 54 69 6d 65 3a 0d 0a 20 20 20 20 20 20  ateTime:..      
136c0 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 44 61      return GetDa
136d0 74 65 54 69 6d 65 28 73 74 6d 74 2c 20 69 6e 64  teTime(stmt, ind
136e0 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  ex);..        ca
136f0 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
13700 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20  Double:..       
13710 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c     if (t == null
13720 29 20 72 65 74 75 72 6e 20 47 65 74 44 6f 75 62  ) return GetDoub
13730 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  le(stmt, index);
13740 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
13750 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67  rn Convert.Chang
13760 65 54 79 70 65 28 47 65 74 44 6f 75 62 6c 65 28  eType(GetDouble(
13770 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c  stmt, index), t,
13780 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
13790 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
137a0 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20  ty.Int64:..     
137b0 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75       if (t == nu
137c0 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e  ll) return GetIn
137d0 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
137e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
137f0 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 53 42 79  (t == typeof(SBy
13800 74 65 29 29 20 72 65 74 75 72 6e 20 47 65 74 53  te)) return GetS
13810 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  Byte(stmt, index
13820 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
13830 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 42 79   (t == typeof(By
13840 74 65 29 29 20 72 65 74 75 72 6e 20 47 65 74 42  te)) return GetB
13850 79 74 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  yte(stmt, index)
13860 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
13870 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74  (t == typeof(Int
13880 31 36 29 29 20 72 65 74 75 72 6e 20 47 65 74 49  16)) return GetI
13890 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt16(stmt, index
138a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
138b0 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49   (t == typeof(UI
138c0 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20 47 65  nt16)) return Ge
138d0 74 55 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e  tUInt16(stmt, in
138e0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
138f0 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
13900 28 49 6e 74 33 32 29 29 20 72 65 74 75 72 6e 20  (Int32)) return 
13910 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69  GetInt32(stmt, i
13920 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
13930 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
13940 66 28 55 49 6e 74 33 32 29 29 20 72 65 74 75 72  f(UInt32)) retur
13950 6e 20 47 65 74 55 49 6e 74 33 32 28 73 74 6d 74  n GetUInt32(stmt
13960 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
13970 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
13980 70 65 6f 66 28 55 49 6e 74 36 34 29 29 20 72 65  peof(UInt64)) re
13990 74 75 72 6e 20 47 65 74 55 49 6e 74 36 34 28 73  turn GetUInt64(s
139a0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
139b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43          return C
139c0 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70  onvert.ChangeTyp
139d0 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c  e(GetInt64(stmt,
139e0 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c   index), t, null
139f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 64 65 66 61  );..        defa
13a00 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ult:..          
13a10 72 65 74 75 72 6e 20 47 65 74 54 65 78 74 28 73  return GetText(s
13a20 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
13a30 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
13a40 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
13a50 72 72 69 64 65 20 69 6e 74 20 47 65 74 43 75 72  rride int GetCur
13a60 73 6f 72 46 6f 72 54 61 62 6c 65 28 53 51 4c 69  sorForTable(SQLi
13a70 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
13a80 2c 20 69 6e 74 20 64 62 2c 20 69 6e 74 20 72 6f  , int db, int ro
13a90 6f 74 50 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a  otPage)..    {..
13aa0 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
13ab0 44 41 52 44 0d 0a 20 20 20 20 20 20 72 65 74 75  DARD..      retu
13ac0 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
13ad0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74  ethods.sqlite3_t
13ae0 61 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65  able_cursor_inte
13af0 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
13b00 5f 73 74 6d 74 2c 20 64 62 2c 20 72 6f 6f 74 50  _stmt, db, rootP
13b10 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  age);..#else..  
13b20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a      return -1;..
13b30 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
13b40 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
13b50 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 52  erride long GetR
13b60 6f 77 49 64 46 6f 72 43 75 72 73 6f 72 28 53 51  owIdForCursor(SQ
13b70 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
13b80 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f 72 29 0d  mt, int cursor).
13b90 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
13ba0 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
13bb0 20 20 20 20 6c 6f 6e 67 20 72 6f 77 69 64 3b 0d      long rowid;.
13bc0 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
13bd0 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61  orCode rc = Unsa
13be0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13bf0 73 71 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72  sqlite3_cursor_r
13c00 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28 73 74 6d  owid_interop(stm
13c10 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
13c20 63 75 72 73 6f 72 2c 20 6f 75 74 20 72 6f 77 69  cursor, out rowi
13c30 64 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72  d);..      if (r
13c40 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c == SQLiteError
13c50 43 6f 64 65 2e 4f 6b 29 20 72 65 74 75 72 6e 20  Code.Ok) return 
13c60 72 6f 77 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20  rowid;....      
13c70 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65  return 0;..#else
13c80 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30  ..      return 0
13c90 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
13ca0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
13cb0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 47   override void G
13cc0 65 74 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74  etIndexColumnExt
13cd0 65 6e 64 65 64 49 6e 66 6f 28 73 74 72 69 6e 67  endedInfo(string
13ce0 20 64 61 74 61 62 61 73 65 2c 20 73 74 72 69 6e   database, strin
13cf0 67 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20  g index, string 
13d00 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 69 6e 74 20  column, out int 
13d10 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74 20 69 6e  sortMode, out in
13d20 74 20 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20 73  t onError, out s
13d30 74 72 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53  tring collationS
13d40 65 71 75 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d  equence)..    {.
13d50 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
13d60 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74  NDARD..      Int
13d70 50 74 72 20 63 6f 6c 6c 3b 0d 0a 20 20 20 20 20  Ptr coll;..     
13d80 20 69 6e 74 20 63 6f 6c 6c 6c 65 6e 3b 0d 0a 20   int colllen;.. 
13d90 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
13da0 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20 20  Code rc;....    
13db0 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74    rc = UnsafeNat
13dc0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
13dd0 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f  e3_index_column_
13de0 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73 71  info_interop(_sq
13df0 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 62 61  l, ToUTF8(databa
13e00 73 65 29 2c 20 54 6f 55 54 46 38 28 69 6e 64 65  se), ToUTF8(inde
13e10 78 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d  x), ToUTF8(colum
13e20 6e 29 2c 20 6f 75 74 20 73 6f 72 74 4d 6f 64 65  n), out sortMode
13e30 2c 20 6f 75 74 20 6f 6e 45 72 72 6f 72 2c 20 6f  , out onError, o
13e40 75 74 20 63 6f 6c 6c 2c 20 6f 75 74 20 63 6f 6c  ut coll, out col
13e50 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69 66  llen);..      if
13e60 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
13e70 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
13e80 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
13e90 70 74 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29 3b  ption(rc, null);
13ea0 0d 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74  ....      collat
13eb0 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 55 54  ionSequence = UT
13ec0 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 2c  F8ToString(coll,
13ed0 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73   colllen);..#els
13ee0 65 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f 64  e..      sortMod
13ef0 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f 6e  e = 0;..      on
13f00 45 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20 20  Error = 2;..    
13f10 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65    collationSeque
13f20 6e 63 65 20 3d 20 22 42 49 4e 41 52 59 22 3b 0d  nce = "BINARY";.
13f30 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
13f40 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
13f50 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
13f60 72 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e 74  rorCode FileCont
13f70 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e 61  rol(string zDbNa
13f80 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74 50  me, int op, IntP
13f90 74 72 20 70 41 72 67 29 0d 0a 20 20 20 20 7b 0d  tr pArg)..    {.
13fa0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
13fb0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
13fc0 73 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63  s.sqlite3_file_c
13fd0 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44  ontrol(_sql, (zD
13fe0 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 3f  bName != null) ?
13ff0 20 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65 29   ToUTF8(zDbName)
14000 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41 72   : null, op, pAr
14010 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d  g);..    }..  }.
14020 0a 7d 0d 0a                                      .}..