System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 0d239ca4af1e9c469911b50d8c7d8d3d179f028d:


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 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1610: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1620: 49 66 20 61 6e 79 20 6d 6f 64 75 6c 65 73 20 77  If any modules w
1630: 65 72 65 20 63 72 65 61 74 65 64 2c 20 61 74 74  ere created, att
1640: 65 6d 70 74 20 74 6f 20 64 69 73 70 6f 73 65 20  empt to dispose 
1650: 6f 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  of..            
1660: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
1670: 6d 20 6e 6f 77 2e 20 20 54 68 69 73 20 63 6f 64  m now.  This cod
1680: 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f  e is designed to
1690: 20 61 76 6f 69 64 20 74 68 72 6f 77 69 6e 67 0d   avoid throwing.
16a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b0: 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70 74   //       except
16c0: 69 6f 6e 73 20 75 6e 6c 65 73 73 20 74 68 65 20  ions unless the 
16d0: 44 69 73 70 6f 73 65 20 6d 65 74 68 6f 64 20 6f  Dispose method o
16e0: 66 20 74 68 65 20 6d 6f 64 75 6c 65 0d 0a 20 20  f the module..  
16f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1700: 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 74 68         itself th
1710: 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74 69 6f  rows an exceptio
1720: 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n...            
1730: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1740: 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f 64          if (_mod
1750: 75 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  ules != null).. 
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1780: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 4b        foreach (K
1790: 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74 72 69  eyValuePair<stri
17a0: 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ng, SQLiteModule
17b0: 3e 20 70 61 69 72 20 69 6e 20 5f 6d 6f 64 75 6c  > pair in _modul
17c0: 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es)..           
17d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f0: 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65      SQLiteModule
1800: 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69 72 2e 56   module = pair.V
1810: 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
1820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1830: 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
1840: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1860: 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1880: 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69         module.Di
1890: 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  spose();..      
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18c0: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6c                Cl
18e0: 6f 73 65 28 66 61 6c 73 65 29 3b 20 2f 2a 20 44  ose(false); /* D
18f0: 69 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e 6f 74  isposing, cannot
1900: 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a 0d 0a 20 20   throw. */....  
1910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
1920: 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a  sposed = true;..
1930: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1940: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1950: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
1960: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1970: 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28 64    base.Dispose(d
1980: 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 20 20 20 20  isposing);..    
1990: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
19a0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
19b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
19c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a10: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49 74  ///....    // It
1a20: 20 69 73 6e 27 74 20 6e 65 63 65 73 73 61 72 79   isn't necessary
1a30: 20 74 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79 20   to cleanup any 
1a40: 66 75 6e 63 74 69 6f 6e 73 20 77 65 27 76 65 20  functions we've 
1a50: 72 65 67 69 73 74 65 72 65 64 2e 20 20 49 66 20  registered.  If 
1a60: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  the connection..
1a70: 20 20 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20 74      // goes to t
1a80: 68 65 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20 72  he pool and is r
1a90: 65 73 75 72 72 65 63 74 65 64 20 6c 61 74 65 72  esurrected later
1aa0: 2c 20 72 65 2d 72 65 67 69 73 74 65 72 65 64 20  , re-registered 
1ab0: 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 6f  functions will o
1ac0: 76 65 72 77 72 69 74 65 20 74 68 65 0d 0a 20 20  verwrite the..  
1ad0: 20 20 2f 2f 20 70 72 65 76 69 6f 75 73 20 66 75    // previous fu
1ae0: 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 53 51  nctions.  The SQ
1af0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b  LiteFunctionCook
1b00: 69 65 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74 61  ieHandle will ta
1b10: 6b 65 20 63 61 72 65 20 6f 66 20 66 72 65 65 69  ke care of freei
1b20: 6e 67 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20 20  ng unmanaged..  
1b30: 20 20 2f 2f 20 72 65 73 6f 75 72 63 65 73 20 62    // resources b
1b40: 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20  elonging to the 
1b50: 70 72 65 76 69 6f 75 73 6c 79 2d 72 65 67 69 73  previously-regis
1b60: 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e  tered functions.
1b70: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1b80: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c 6f  verride void Clo
1b90: 73 65 28 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77  se(bool canThrow
1ba0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1bb0: 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c  if (_sql != null
1bc0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
1bd0: 20 20 20 20 20 20 69 66 20 28 21 5f 73 71 6c 2e        if (!_sql.
1be0: 4f 77 6e 48 61 6e 64 6c 65 29 0d 0a 20 20 20 20  OwnHandle)..    
1bf0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c00: 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75         _sql = nu
1c10: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
1c20: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20     return;..    
1c30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1c40: 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f       if (_usePoo
1c50: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  l)..          {.
1c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1c70: 66 20 28 53 51 4c 69 74 65 42 61 73 65 2e 52 65  f (SQLiteBase.Re
1c80: 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f 73  setConnection(_s
1c90: 71 6c 2c 20 5f 73 71 6c 2c 20 63 61 6e 54 68 72  ql, _sql, canThr
1ca0: 6f 77 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ow))..          
1cb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1cc0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
1cd0: 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41 64  onnectionPool.Ad
1ce0: 64 28 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 73 71  d(_fileName, _sq
1cf0: 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29  l, _poolVersion)
1d00: 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  ;....#if !NET_CO
1d10: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
1d20: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d40: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
1d50: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43  String.Format("C
1d60: 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 53 75 63 63  lose (Pool) Succ
1d70: 65 73 73 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29  ess: {0}", _sql)
1d80: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
1d90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66            }..#if
1da0: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
1db0: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
1dc0: 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
1dd0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
1de0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1e00: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72  ce.WriteLine(Str
1e10: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43 6c 6f 73  ing.Format("Clos
1e20: 65 20 28 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65  e (Pool) Failure
1e30: 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29 29 3b 0d  : {0}", _sql));.
1e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
1e50: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
1e60: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1e70: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
1e80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e90: 20 20 5f 73 71 6c 2e 44 69 73 70 6f 73 65 28 29    _sql.Dispose()
1ea0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
1eb0: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d            _sql =
1ec0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d   null;..      }.
1ed0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
1ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1f40: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1f50: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65  y>..    /// Atte
1f60: 6d 70 74 73 20 74 6f 20 69 6e 74 65 72 72 75 70  mpts to interrup
1f70: 74 20 74 68 65 20 71 75 65 72 79 20 63 75 72 72  t the query curr
1f80: 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
1f90: 6f 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  on the associate
1fa0: 64 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76  d..    /// nativ
1fb0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
1fc0: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
1fd0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1fe0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
1ff0: 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28 29 0d  e void Cancel().
2000: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
2010: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
2020: 73 2e 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  s.sqlite3_interr
2030: 75 70 74 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  upt(_sql);..    
2040: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
2050: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
2060: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 62 69  This function bi
2070: 6e 64 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e  nds a user-defin
2080: 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74  ed function to t
2090: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  he connection...
20a0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
20b0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
20c0: 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f  am name="functio
20d0: 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20 20  nAttribute">..  
20e0: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
20f0: 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74  ref="SQLiteFunct
2100: 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f 3e 20  ionAttribute"/> 
2110: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
2120: 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20  containing..    
2130: 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61 74 61  /// the metadata
2140: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
2150: 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a  n to be bound...
2160: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2170: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
2180: 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 22   name="function"
2190: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  >..    /// The <
21a0: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
21b0: 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62 6a 65  Function"/> obje
21c0: 63 74 20 69 6e 73 74 61 6e 63 65 20 74 68 61 74  ct instance that
21d0: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0d   implements the.
21e0: 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f  .    /// functio
21f0: 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a  n to be bound...
2200: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2210: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
2220: 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a   name="flags">..
2230: 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67      /// The flag
2240: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
2250: 68 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e  h the parent con
2260: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 0d  nection object..
2270: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
2280: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
2290: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
22a0: 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  ndFunction(..   
22b0: 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74       SQLiteFunct
22c0: 69 6f 6e 41 74 74 72 69 62 75 74 65 20 66 75 6e  ionAttribute fun
22d0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 0d  ctionAttribute,.
22e0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46  .        SQLiteF
22f0: 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  unction function
2300: 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ,..        SQLit
2310: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
2320: 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20   flags..        
2330: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
2340: 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e    SQLiteFunction
2350: 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 74 68  .BindFunction(th
2360: 69 73 2c 20 66 75 6e 63 74 69 6f 6e 41 74 74 72  is, functionAttr
2370: 69 62 75 74 65 2c 20 66 75 6e 63 74 69 6f 6e 2c  ibute, function,
2380: 20 66 6c 61 67 73 29 3b 0d 0a 0d 0a 20 20 20 20   flags);....    
2390: 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f      if (_functio
23a0: 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
23b0: 20 20 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69           _functi
23c0: 6f 6e 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 53  ons = new List<S
23d0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 28 29  QLiteFunction>()
23e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 66 75  ;....        _fu
23f0: 6e 63 74 69 6f 6e 73 2e 41 64 64 28 66 75 6e 63  nctions.Add(func
2400: 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  tion);..    }...
2410: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
2420: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 56 65  erride string Ve
2430: 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20  rsion..    {..  
2440: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
2450: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2460: 20 53 51 4c 69 74 65 33 2e 53 51 4c 69 74 65 56   SQLite3.SQLiteV
2470: 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 7d  ersion;..      }
2480: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
2490: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
24a0: 20 69 6e 74 20 56 65 72 73 69 6f 6e 4e 75 6d 62   int VersionNumb
24b0: 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  er..    {..     
24c0: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
24d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
24e0: 4c 69 74 65 33 2e 53 51 4c 69 74 65 56 65 72 73  Lite3.SQLiteVers
24f0: 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20  ionNumber;..    
2500: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
2510: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
2520: 63 20 73 74 72 69 6e 67 20 44 65 66 69 6e 65 43  c string DefineC
2530: 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 7b 0d  onstants..    {.
2540: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
2550: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2560: 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64       StringBuild
2570: 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  er result = new 
2580: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b  StringBuilder();
2590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4c  ..            IL
25a0: 69 73 74 3c 73 74 72 69 6e 67 3e 20 6c 69 73 74  ist<string> list
25b0: 20 3d 20 53 51 4c 69 74 65 44 65 66 69 6e 65 43   = SQLiteDefineC
25c0: 6f 6e 73 74 61 6e 74 73 2e 4f 70 74 69 6f 6e 4c  onstants.OptionL
25d0: 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ist;....        
25e0: 20 20 20 20 69 66 20 28 6c 69 73 74 20 21 3d 20      if (list != 
25f0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2600: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2610: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 73        foreach (s
2620: 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 20 69 6e  tring element in
2630: 20 6c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20   list)..        
2640: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2660: 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75  f (element == nu
2670: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2680: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2690: 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
26b0: 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20   (result.Length 
26c0: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
26e0: 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29  sult.Append(' ')
26f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2700: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
2710: 41 70 70 65 6e 64 28 65 6c 65 6d 65 6e 74 29 3b  Append(element);
2720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2730: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2740: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2750: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e    return result.
2760: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
2770: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2780: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
2790: 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69  atic string SQLi
27a0: 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b  teVersion..    {
27b0: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
27c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
27d0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
27e0: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
27f0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69  thods.sqlite3_li
2800: 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b  bversion(), -1);
2810: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2820: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2830: 20 73 74 61 74 69 63 20 69 6e 74 20 53 51 4c 69   static int SQLi
2840: 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 0d  teVersionNumber.
2850: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
2860: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2870: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
2880: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
2890: 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f  qlite3_libversio
28a0: 6e 5f 6e 75 6d 62 65 72 28 29 3b 0d 0a 20 20 20  n_number();..   
28b0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
28c0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
28d0: 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65  ic string SQLite
28e0: 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d  SourceId..    {.
28f0: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
2900: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
2910: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
2920: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
2930: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 6f 75  hods.sqlite3_sou
2940: 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 20  rceid(), -1);.. 
2950: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2960: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
2970: 65 72 72 69 64 65 20 62 6f 6f 6c 20 41 75 74 6f  erride bool Auto
2980: 43 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d 0a 20  Commit..    {.. 
2990: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
29a0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
29b0: 6e 20 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28 5f  n IsAutocommit(_
29c0: 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20  sql, _sql);..   
29d0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
29e0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
29f0: 72 69 64 65 20 6c 6f 6e 67 20 4c 61 73 74 49 6e  ride long LastIn
2a00: 73 65 72 74 52 6f 77 49 64 0d 0a 20 20 20 20 7b  sertRowId..    {
2a10: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
2a20: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
2a30: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
2a40: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 72 65  WORK..        re
2a50: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
2a60: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
2a70: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
2a80: 69 64 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 69 66  id(_sql);..#elif
2a90: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
2aa0: 44 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67 20  D..        long 
2ab0: 72 6f 77 49 64 20 3d 20 30 3b 0d 0a 20 20 20 20  rowId = 0;..    
2ac0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
2ad0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2ae0: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
2af0: 64 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  d_interop(_sql, 
2b00: 72 65 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20  ref rowId);..   
2b10: 20 20 20 20 20 72 65 74 75 72 6e 20 72 6f 77 49       return rowI
2b20: 64 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  d;..#else..     
2b30: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
2b40: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
2b50: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
2b60: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
2b70: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2b80: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 68 61  override int Cha
2b90: 6e 67 65 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  nges..    {..   
2ba0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
2bb0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
2bc0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 72  NDARD..        r
2bd0: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
2be0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
2bf0: 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f  3_changes_intero
2c00: 70 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 73 65 0d  p(_sql);..#else.
2c10: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
2c20: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2c30: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e  ods.sqlite3_chan
2c40: 67 65 73 28 5f 73 71 6c 29 3b 0d 0a 23 65 6e 64  ges(_sql);..#end
2c50: 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  if..      }..   
2c60: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
2c70: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
2c80: 20 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20   MemoryUsed..   
2c90: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
2ca0: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
2cb0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
2cc0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
2cd0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
2ce0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2cf0: 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 28 29  e3_memory_used()
2d00: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
2d10: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
2d20: 20 20 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20     long bytes = 
2d30: 30 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61  0;..        Unsa
2d40: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2d50: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75  sqlite3_memory_u
2d60: 73 65 64 5f 69 6e 74 65 72 6f 70 28 72 65 66 20  sed_interop(ref 
2d70: 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20  bytes);..       
2d80: 20 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a   return bytes;..
2d90: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74  #else..        t
2da0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
2db0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
2dc0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
2dd0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
2de0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
2df0: 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79  ride long Memory
2e00: 48 69 67 68 77 61 74 65 72 0d 0a 20 20 20 20 7b  Highwater..    {
2e10: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
2e20: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
2e30: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
2e40: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 72 65  WORK..        re
2e50: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
2e60: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
2e70: 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65  _memory_highwate
2e80: 72 28 30 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  r(0);..#elif !SQ
2e90: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
2ea0: 20 20 20 20 20 20 20 6c 6f 6e 67 20 62 79 74 65         long byte
2eb0: 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  s = 0;..        
2ec0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2ed0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f  ods.sqlite3_memo
2ee0: 72 79 5f 68 69 67 68 77 61 74 65 72 5f 69 6e 74  ry_highwater_int
2ef0: 65 72 6f 70 28 30 2c 20 72 65 66 20 62 79 74 65  erop(0, ref byte
2f00: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  s);..        ret
2f10: 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23 65 6c 73  urn bytes;..#els
2f20: 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  e..        throw
2f30: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
2f40: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
2f50: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d  .#endif..      }
2f60: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
2f70: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2f80: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f    /// Returns no
2f90: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 75 6e  n-zero if the un
2fa0: 64 65 72 6c 79 69 6e 67 20 6e 61 74 69 76 65 20  derlying native 
2fb0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
2fc0: 65 20 69 73 20 6f 77 6e 65 64 0d 0a 20 20 20 20  e is owned..    
2fd0: 2f 2f 2f 20 62 79 20 74 68 69 73 20 69 6e 73 74  /// by this inst
2fe0: 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ance...    /// <
2ff0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
3000: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
3010: 20 62 6f 6f 6c 20 4f 77 6e 48 61 6e 64 6c 65 0d   bool OwnHandle.
3020: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
3030: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  get..        {..
3040: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3050: 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
3060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
3070: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
3080: 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e  xception("no con
3090: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61  nection handle a
30a0: 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 0d 0a 20  vailable");.... 
30b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
30c0: 6e 20 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c 65  n _sql.OwnHandle
30d0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
30e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
30f0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
3100: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74  iteErrorCode Set
3110: 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 62 6f 6f  MemoryStatus(boo
3120: 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  l value)..    {.
3130: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
3140: 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53  StaticSetMemoryS
3150: 74 61 74 75 73 28 76 61 6c 75 65 29 3b 0d 0a 20  tatus(value);.. 
3160: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
3170: 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69  rnal static SQLi
3180: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74  teErrorCode Stat
3190: 69 63 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75  icSetMemoryStatu
31a0: 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20  s(bool value).. 
31b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
31c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
31d0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
31e0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
31f0: 6f 6e 66 69 67 5f 69 6e 74 28 0d 0a 20 20 20 20  onfig_int(..    
3200: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
3210: 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  nfigOpsEnum.SQLI
3220: 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41  TE_CONFIG_MEMSTA
3230: 54 55 53 2c 20 76 61 6c 75 65 20 3f 20 31 20 3a  TUS, value ? 1 :
3240: 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   0);....        
3250: 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
3260: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
3270: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3280: 53 68 75 74 64 6f 77 6e 20 74 68 65 20 53 51 4c  Shutdown the SQL
3290: 69 74 65 20 65 6e 67 69 6e 65 20 73 6f 20 74 68  ite engine so th
32a0: 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
32b0: 74 61 72 74 65 64 20 77 69 74 68 20 64 69 66 66  tarted with diff
32c0: 65 72 65 6e 74 20 63 6f 6e 66 69 67 20 6f 70 74  erent config opt
32d0: 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57  ions...    /// W
32e0: 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f  e depend on auto
32f0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
3300: 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20  to recover...   
3310: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
3320: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
3330: 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65 73 75  s>Returns a resu
3340: 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73  lt code</returns
3350: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
3360: 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
3370: 72 72 6f 72 43 6f 64 65 20 53 68 75 74 64 6f 77  rrorCode Shutdow
3380: 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  n()..    {..    
3390: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
33a0: 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e  ode rc = UnsafeN
33b0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
33c0: 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 3b  ite3_shutdown();
33d0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
33e0: 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   rc;..    }.... 
33f0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3400: 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d  ..    /// Determ
3410: 69 6e 65 73 20 69 66 20 74 68 65 20 61 73 73 6f  ines if the asso
3420: 63 69 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f  ciated native co
3430: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
3440: 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f  is open...    //
3450: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
3460: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
3470: 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72  .    /// Non-zer
3480: 6f 20 69 66 20 74 68 65 20 61 73 73 6f 63 69 61  o if the associa
3490: 74 65 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65  ted native conne
34a0: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20  ction handle is 
34b0: 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  open...    /// <
34c0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
34d0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
34e0: 20 62 6f 6f 6c 20 49 73 4f 70 65 6e 28 29 0d 0a   bool IsOpen()..
34f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
3500: 65 74 75 72 6e 20 28 5f 73 71 6c 20 21 3d 20 6e  eturn (_sql != n
3510: 75 6c 6c 29 20 26 26 20 21 5f 73 71 6c 2e 49 73  ull) && !_sql.Is
3520: 49 6e 76 61 6c 69 64 20 26 26 20 21 5f 73 71 6c  Invalid && !_sql
3530: 2e 49 73 43 6c 6f 73 65 64 3b 0d 0a 20 20 20 20  .IsClosed;..    
3540: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
3550: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
3560: 4f 70 65 6e 28 73 74 72 69 6e 67 20 73 74 72 46  Open(string strF
3570: 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 69 74 65 43  ilename, SQLiteC
3580: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 63  onnectionFlags c
3590: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20  onnectionFlags, 
35a0: 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73 45  SQLiteOpenFlagsE
35b0: 6e 75 6d 20 6f 70 65 6e 46 6c 61 67 73 2c 20 69  num openFlags, i
35c0: 6e 74 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20  nt maxPoolSize, 
35d0: 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29 0d 0a 20  bool usePool).. 
35e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a     {..      //..
35f0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
3600: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
3610: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72  onnection is cur
3620: 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 61 74 74  rently open, att
3630: 65 6d 70 74 20 74 6f 0d 0a 20 20 20 20 20 20 2f  empt to..      /
3640: 2f 20 20 20 20 20 20 20 63 6c 6f 73 65 20 69 74  /       close it
3650: 20 6e 6f 77 2e 20 20 54 68 69 73 20 6d 75 73 74   now.  This must
3660: 20 62 65 20 64 6f 6e 65 20 62 65 63 61 75 73 65   be done because
3670: 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f   the file name o
3680: 72 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  r..      //     
3690: 20 20 6f 74 68 65 72 20 70 61 72 61 6d 65 74 65    other paramete
36a0: 72 73 20 74 68 61 74 20 6d 61 79 20 69 6d 70 61  rs that may impa
36b0: 63 74 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  ct the underlyin
36c0: 67 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  g database..    
36d0: 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 6e 65    //       conne
36e0: 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63  ction may have c
36f0: 68 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 2f  hanged...      /
3700: 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71  /..      if (_sq
3710: 6c 20 21 3d 20 6e 75 6c 6c 29 20 43 6c 6f 73 65  l != null) Close
3720: 28 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  (true);....     
3730: 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f   //..      // NO
3740: 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6e 6e 65  TE: If the conne
3750: 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 63 6c  ction was not cl
3760: 6f 73 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c  osed successfull
3770: 79 2c 20 74 68 72 6f 77 20 61 6e 0d 0a 20 20 20  y, throw an..   
3780: 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65     //       exce
3790: 70 74 69 6f 6e 20 6e 6f 77 2e 0d 0a 20 20 20 20  ption now...    
37a0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28    //..      if (
37b0: 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql != null).. 
37c0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
37d0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
37e0: 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  on("connection h
37f0: 61 6e 64 6c 65 20 69 73 20 73 74 69 6c 6c 20 61  andle is still a
3800: 63 74 69 76 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  ctive");....    
3810: 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 75 73 65    _usePool = use
3820: 50 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 5f 66 69  Pool;..      _fi
3830: 6c 65 4e 61 6d 65 20 3d 20 73 74 72 46 69 6c 65  leName = strFile
3840: 6e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  name;....      i
3850: 66 20 28 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20  f (usePool)..   
3860: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 73     {..        _s
3870: 71 6c 20 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ql = SQLiteConne
3880: 63 74 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65  ctionPool.Remove
3890: 28 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61  (strFilename, ma
38a0: 78 50 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f  xPoolSize, out _
38b0: 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d  poolVersion);...
38c0: 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
38d0: 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
38e0: 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
38f0: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
3900: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
3910: 22 4f 70 65 6e 20 28 50 6f 6f 6c 29 3a 20 7b 30  "Open (Pool): {0
3920: 7d 22 2c 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c  }", (_sql != nul
3930: 6c 29 20 3f 20 5f 73 71 6c 2e 54 6f 53 74 72 69  l) ? _sql.ToStri
3940: 6e 67 28 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29  ng() : "<null>")
3950: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
3960: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if 
3970: 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (_sql == null)..
3980: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3990: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
39a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
39b0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
39c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
39d0: 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a  finally /* NOTE:
39e0: 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20   Thread.Abort() 
39f0: 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a  protection. */..
3a00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3a10: 20 20 20 20 20 49 6e 74 50 74 72 20 64 62 3b 0d       IntPtr db;.
3a20: 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74  .          SQLit
3a30: 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d  eErrorCode n;...
3a40: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
3a50: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
3a60: 20 69 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e   if ((connection
3a70: 46 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  Flags & SQLiteCo
3a80: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
3a90: 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f  ExtensionFunctio
3aa0: 6e 73 29 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e  ns) != SQLiteCon
3ab0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45  nectionFlags.NoE
3ac0: 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e  xtensionFunction
3ad0: 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  s)..          {.
3ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
3af0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
3b00: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65  hods.sqlite3_ope
3b10: 6e 5f 69 6e 74 65 72 6f 70 28 54 6f 55 54 46 38  n_interop(ToUTF8
3b20: 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 6f  (strFilename), o
3b30: 70 65 6e 46 6c 61 67 73 2c 20 6f 75 74 20 64 62  penFlags, out db
3b40: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
3b50: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d  .          else.
3b60: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
3b70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3b80: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
3b90: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
3ba0: 33 5f 6f 70 65 6e 5f 76 32 28 54 6f 55 54 46 38  3_open_v2(ToUTF8
3bb0: 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 6f  (strFilename), o
3bc0: 75 74 20 64 62 2c 20 6f 70 65 6e 46 6c 61 67 73  ut db, openFlags
3bd0: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
3be0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
3bf0: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
3c00: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
3c10: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
3c20: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
3c30: 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ne(String.Format
3c40: 28 22 4f 70 65 6e 3a 20 7b 30 7d 22 2c 20 64 62  ("Open: {0}", db
3c50: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  ));..#endif.... 
3c60: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
3c70: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
3c80: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
3c90: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
3ca0: 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  n, null);..     
3cb0: 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20       _sql = new 
3cc0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
3cd0: 48 61 6e 64 6c 65 28 64 62 2c 20 74 72 75 65 29  Handle(db, true)
3ce0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
3cf0: 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f 73 71 6c        lock (_sql
3d00: 29 20 7b 20 2f 2a 20 48 41 43 4b 3a 20 46 6f 72  ) { /* HACK: For
3d10: 63 65 20 74 68 65 20 53 79 6e 63 42 6c 6f 63 6b  ce the SyncBlock
3d20: 20 74 6f 20 62 65 20 22 63 72 65 61 74 65 64 22   to be "created"
3d30: 20 6e 6f 77 2e 20 2a 2f 20 7d 0d 0a 20 20 20 20   now. */ }..    
3d40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20    }....      // 
3d50: 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 74  Bind functions t
3d60: 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f  o this connectio
3d70: 6e 2e 20 20 49 66 20 61 6e 79 20 70 72 65 76 69  n.  If any previ
3d80: 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66  ous functions of
3d90: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 0d 0a   the same name..
3da0: 20 20 20 20 20 20 2f 2f 20 77 65 72 65 20 61 6c        // were al
3db0: 72 65 61 64 79 20 62 6f 75 6e 64 2c 20 74 68 65  ready bound, the
3dc0: 6e 20 74 68 65 20 6e 65 77 20 62 69 6e 64 69 6e  n the new bindin
3dd0: 67 73 20 72 65 70 6c 61 63 65 20 74 68 65 20 6f  gs replace the o
3de0: 6c 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 28  ld...      if ((
3df0: 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  connectionFlags 
3e00: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
3e10: 6f 6e 46 6c 61 67 73 2e 4e 6f 46 75 6e 63 74 69  onFlags.NoFuncti
3e20: 6f 6e 73 29 20 21 3d 20 53 51 4c 69 74 65 43 6f  ons) != SQLiteCo
3e30: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
3e40: 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20  Functions)..    
3e50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69    {..          i
3e60: 66 20 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d  f (_functions ==
3e70: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
3e80: 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73        _functions
3e90: 20 3d 20 6e 65 77 20 4c 69 73 74 3c 53 51 4c 69   = new List<SQLi
3ea0: 74 65 46 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a  teFunction>();..
3eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 66 75 6e  ..          _fun
3ec0: 63 74 69 6f 6e 73 2e 41 64 64 52 61 6e 67 65 28  ctions.AddRange(
3ed0: 6e 65 77 20 4c 69 73 74 3c 53 51 4c 69 74 65 46  new List<SQLiteF
3ee0: 75 6e 63 74 69 6f 6e 3e 28 53 51 4c 69 74 65 46  unction>(SQLiteF
3ef0: 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63  unction.BindFunc
3f00: 74 69 6f 6e 73 28 74 68 69 73 2c 20 63 6f 6e 6e  tions(this, conn
3f10: 65 63 74 69 6f 6e 46 6c 61 67 73 29 29 29 3b 0d  ectionFlags)));.
3f20: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
3f30: 20 20 53 65 74 54 69 6d 65 6f 75 74 28 30 29 3b    SetTimeout(0);
3f40: 0d 0a 20 20 20 20 20 20 47 43 2e 4b 65 65 70 41  ..      GC.KeepA
3f50: 6c 69 76 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20  live(_sql);..   
3f60: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3f70: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
3f80: 20 43 6c 65 61 72 50 6f 6f 6c 28 29 0d 0a 20 20   ClearPool()..  
3f90: 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
3fa0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e  eConnectionPool.
3fb0: 43 6c 65 61 72 50 6f 6f 6c 28 5f 66 69 6c 65 4e  ClearPool(_fileN
3fc0: 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ame);..    }....
3fd0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3fe0: 72 72 69 64 65 20 69 6e 74 20 43 6f 75 6e 74 50  rride int CountP
3ff0: 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ool()..    {..  
4000: 20 20 20 20 20 20 44 69 63 74 69 6f 6e 61 72 79        Dictionary
4010: 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e 20 63 6f  <string, int> co
4020: 75 6e 74 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  unts = null;..  
4030: 20 20 20 20 20 20 69 6e 74 20 6f 70 65 6e 43 6f        int openCo
4040: 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  unt = 0;..      
4050: 20 20 69 6e 74 20 63 6c 6f 73 65 43 6f 75 6e 74    int closeCount
4060: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 69   = 0;..        i
4070: 6e 74 20 74 6f 74 61 6c 43 6f 75 6e 74 20 3d 20  nt totalCount = 
4080: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  0;....        SQ
4090: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f  LiteConnectionPo
40a0: 6f 6c 2e 47 65 74 43 6f 75 6e 74 73 28 5f 66 69  ol.GetCounts(_fi
40b0: 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
40c0: 20 20 20 20 20 72 65 66 20 63 6f 75 6e 74 73 2c       ref counts,
40d0: 20 72 65 66 20 6f 70 65 6e 43 6f 75 6e 74 2c 20   ref openCount, 
40e0: 72 65 66 20 63 6c 6f 73 65 43 6f 75 6e 74 2c 0d  ref closeCount,.
40f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
4100: 20 74 6f 74 61 6c 43 6f 75 6e 74 29 3b 0d 0a 0d   totalCount);...
4110: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4120: 74 6f 74 61 6c 43 6f 75 6e 74 3b 0d 0a 20 20 20  totalCount;..   
4130: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
4140: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
4150: 20 53 65 74 54 69 6d 65 6f 75 74 28 69 6e 74 20   SetTimeout(int 
4160: 6e 54 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20  nTimeoutMS)..   
4170: 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
4180: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
4190: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
41a0: 73 2e 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74  s.sqlite3_busy_t
41b0: 69 6d 65 6f 75 74 28 5f 73 71 6c 2c 20 6e 54 69  imeout(_sql, nTi
41c0: 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20 20 20 20 20  meoutMS);..     
41d0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
41e0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
41f0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
4200: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
4210: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
4220: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
4230: 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
4240: 20 53 74 65 70 28 53 51 4c 69 74 65 53 74 61 74   Step(SQLiteStat
4250: 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20  ement stmt)..   
4260: 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
4270: 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20  ErrorCode n;..  
4280: 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d      Random rnd =
4290: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69   null;..      ui
42a0: 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28  nt starttick = (
42b0: 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74  uint)Environment
42c0: 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 20 20 20  .TickCount;..   
42d0: 20 20 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 20     uint timeout 
42e0: 3d 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63  = (uint)(stmt._c
42f0: 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54  ommand._commandT
4300: 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 3b 0d  imeout * 1000);.
4310: 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28  ...      while (
4320: 74 72 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  true)..      {..
4330: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
4340: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4350: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 73 74 6d  sqlite3_step(stm
4360: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b  t._sqlite_stmt);
4370: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
4380: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
4390: 43 6f 64 65 2e 52 6f 77 29 20 72 65 74 75 72 6e  Code.Row) return
43a0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
43b0: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
43c0: 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 20 72  rrorCode.Done) r
43d0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
43e0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
43f0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
4400: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  .Ok)..        {.
4410: 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74  .          SQLit
4420: 65 45 72 72 6f 72 43 6f 64 65 20 72 3b 0d 0a 0d  eErrorCode r;...
4430: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 41 6e  .          // An
4440: 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 2c   error occurred,
4450: 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65 73 65   attempt to rese
4460: 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 2e  t the statement.
4470: 20 20 49 66 20 74 68 65 20 72 65 73 65 74 20 77    If the reset w
4480: 6f 72 6b 65 64 20 62 65 63 61 75 73 65 20 74 68  orked because th
4490: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  e..          // 
44a0: 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67  schema has chang
44b0: 65 64 2c 20 72 65 2d 74 72 79 20 74 68 65 20 73  ed, re-try the s
44c0: 74 65 70 20 61 67 61 69 6e 2e 20 20 49 66 20 69  tep again.  If i
44d0: 74 20 65 72 72 6f 72 65 64 20 6f 75 72 20 62 65  t errored our be
44e0: 63 61 75 73 65 20 74 68 65 20 64 61 74 61 62 61  cause the databa
44f0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  se..          //
4500: 20 69 73 20 6c 6f 63 6b 65 64 2c 20 74 68 65 6e   is locked, then
4510: 20 6b 65 65 70 20 72 65 74 72 79 69 6e 67 20 75   keep retrying u
4520: 6e 74 69 6c 20 74 68 65 20 63 6f 6d 6d 61 6e 64  ntil the command
4530: 20 74 69 6d 65 6f 75 74 20 6f 63 63 75 72 73 2e   timeout occurs.
4540: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 20 3d 20  ..          r = 
4550: 52 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a  Reset(stmt);....
4560: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 20            if (r 
4570: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
4580: 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
4590: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
45a0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
45b0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
45c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 65  ;....          e
45d0: 6c 73 65 20 69 66 20 28 28 72 20 3d 3d 20 53 51  lse if ((r == SQ
45e0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f  LiteErrorCode.Lo
45f0: 63 6b 65 64 20 7c 7c 20 72 20 3d 3d 20 53 51 4c  cked || r == SQL
4600: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73  iteErrorCode.Bus
4610: 79 29 20 26 26 20 73 74 6d 74 2e 5f 63 6f 6d 6d  y) && stmt._comm
4620: 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  and != null)..  
4630: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4640: 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74         // Keep t
4650: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
4660: 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75     if (rnd == nu
4670: 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d  ll) // First tim
4680: 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65  e we've encounte
4690: 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20  red the lock..  
46a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64 20              rnd 
46b0: 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d  = new Random();.
46c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
46d0: 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65 65  / If we've excee
46e0: 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27  ded the command'
46f0: 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20  s timeout, give 
4700: 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20  up and throw an 
4710: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
4720: 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76     if ((uint)Env
4730: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
4740: 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e  nt - starttick >
4750: 20 74 69 6d 65 6f 75 74 29 0d 0a 20 20 20 20 20   timeout)..     
4760: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4770: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
4780: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
4790: 6e 28 72 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(r, GetLastErro
47a0: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
47b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
47c0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
47d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
47e0: 20 20 20 20 20 2f 2f 20 4f 74 68 65 72 77 69 73       // Otherwis
47f0: 65 20 73 6c 65 65 70 20 66 6f 72 20 61 20 72 61  e sleep for a ra
4800: 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74  ndom amount of t
4810: 69 6d 65 20 75 70 20 74 6f 20 31 35 30 6d 73 0d  ime up to 150ms.
4820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
4830: 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e  ystem.Threading.
4840: 54 68 72 65 61 64 2e 53 6c 65 65 70 28 72 6e 64  Thread.Sleep(rnd
4850: 2e 4e 65 78 74 28 31 2c 20 31 35 30 29 29 3b 0d  .Next(1, 150));.
4860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4870: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4880: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
4890: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
48a0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
48b0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
48c0: 52 65 73 65 74 28 53 51 4c 69 74 65 53 74 61 74  Reset(SQLiteStat
48d0: 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20  ement stmt)..   
48e0: 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
48f0: 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a  ErrorCode n;....
4900: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
4910: 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20  DARD..      n = 
4920: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4930: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65  ods.sqlite3_rese
4940: 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  t_interop(stmt._
4950: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23  sqlite_stmt);..#
4960: 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20  else..      n = 
4970: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4980: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65  ods.sqlite3_rese
4990: 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
49a0: 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  tmt);..#endif...
49b0: 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65  .      // If the
49c0: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 64 2c   schema changed,
49d0: 20 74 72 79 20 61 6e 64 20 72 65 2d 70 72 65 70   try and re-prep
49e0: 61 72 65 20 69 74 0d 0a 20 20 20 20 20 20 69 66  are it..      if
49f0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
4a00: 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 29 0d 0a  orCode.Schema)..
4a10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4a20: 20 2f 2f 20 52 65 63 72 65 61 74 65 20 61 20 64   // Recreate a d
4a30: 75 6d 6d 79 20 73 74 61 74 65 6d 65 6e 74 0d 0a  ummy statement..
4a40: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
4a50: 74 72 3b 0d 0a 20 20 20 20 20 20 20 20 75 73 69  tr;..        usi
4a60: 6e 67 20 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ng (SQLiteStatem
4a70: 65 6e 74 20 74 6d 70 20 3d 20 50 72 65 70 61 72  ent tmp = Prepar
4a80: 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73 71  e(null, stmt._sq
4a90: 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c 6c  lStatement, null
4aa0: 2c 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63  , (uint)(stmt._c
4ab0: 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54  ommand._commandT
4ac0: 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 2c 20  imeout * 1000), 
4ad0: 6f 75 74 20 73 74 72 29 29 0d 0a 20 20 20 20 20  out str))..     
4ae0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4af0: 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74 68 65 20  // Finalize the 
4b00: 65 78 69 73 74 69 6e 67 20 73 74 61 74 65 6d 65  existing stateme
4b10: 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  nt..          st
4b20: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2e  mt._sqlite_stmt.
4b30: 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20  Dispose();..    
4b40: 20 20 20 20 20 20 2f 2f 20 52 65 61 73 73 69 67        // Reassig
4b50: 6e 20 61 20 6e 65 77 20 73 74 61 74 65 6d 65 6e  n a new statemen
4b60: 74 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  t pointer to the
4b70: 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e 74 20 61   old statement a
4b80: 6e 64 20 63 6c 65 61 72 20 74 68 65 20 74 65 6d  nd clear the tem
4b90: 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20 20  porary one..    
4ba0: 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69        stmt._sqli
4bb0: 74 65 5f 73 74 6d 74 20 3d 20 74 6d 70 2e 5f 73  te_stmt = tmp._s
4bc0: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20  qlite_stmt;..   
4bd0: 20 20 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c 69         tmp._sqli
4be0: 74 65 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d  te_stmt = null;.
4bf0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  ...          // 
4c00: 52 65 61 70 70 6c 79 20 70 61 72 61 6d 65 74 65  Reapply paramete
4c10: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  rs..          st
4c20: 6d 74 2e 42 69 6e 64 50 61 72 61 6d 65 74 65 72  mt.BindParameter
4c30: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  s();..        }.
4c40: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4c50: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
4c60: 55 6e 6b 6e 6f 77 6e 3b 20 2f 2f 20 52 65 73 65  Unknown; // Rese
4c70: 74 20 77 61 73 20 4f 4b 2c 20 77 69 74 68 20 73  t was OK, with s
4c80: 63 68 65 6d 61 20 63 68 61 6e 67 65 0d 0a 20 20  chema change..  
4c90: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73      }..      els
4ca0: 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
4cb0: 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65  eErrorCode.Locke
4cc0: 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65  d || n == SQLite
4cd0: 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d  ErrorCode.Busy).
4ce0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4cf0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  n;....      if (
4d00: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
4d10: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
4d20: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
4d30: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
4d40: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
4d50: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
4d60: 6e 3b 20 2f 2f 20 57 65 20 72 65 73 65 74 20 4f  n; // We reset O
4d70: 4b 2c 20 6e 6f 20 73 63 68 65 6d 61 20 63 68 61  K, no schema cha
4d80: 6e 67 65 73 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  nges..    }.... 
4d90: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
4da0: 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 4c  ride string GetL
4db0: 61 73 74 45 72 72 6f 72 28 29 0d 0a 20 20 20 20  astError()..    
4dc0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
4dd0: 53 51 4c 69 74 65 42 61 73 65 2e 47 65 74 4c 61  SQLiteBase.GetLa
4de0: 73 74 45 72 72 6f 72 28 5f 73 71 6c 2c 20 5f 73  stError(_sql, _s
4df0: 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ql);..    }.... 
4e00: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
4e10: 72 69 64 65 20 53 51 4c 69 74 65 53 74 61 74 65  ride SQLiteState
4e20: 6d 65 6e 74 20 50 72 65 70 61 72 65 28 53 51 4c  ment Prepare(SQL
4e30: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e  iteConnection cn
4e40: 6e 2c 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c  n, string strSql
4e50: 2c 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  , SQLiteStatemen
4e60: 74 20 70 72 65 76 69 6f 75 73 2c 20 75 69 6e 74  t previous, uint
4e70: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20   timeoutMS, out 
4e80: 73 74 72 69 6e 67 20 73 74 72 52 65 6d 61 69 6e  string strRemain
4e90: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
4ea0: 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
4eb0: 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 53 71 6c  llOrEmpty(strSql
4ec0: 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ))..      {..   
4ed0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
4ee0: 20 2f 2f 20 4e 4f 54 45 3a 20 53 51 4c 69 74 65   // NOTE: SQLite
4ef0: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
4f00: 74 20 74 68 65 20 63 6f 6e 63 65 70 74 20 6f 66  t the concept of
4f10: 20 73 65 70 61 72 61 74 65 20 73 63 68 65 6d 61   separate schema
4f20: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  s..        //   
4f30: 20 20 20 20 69 6e 20 6f 6e 65 20 64 61 74 61 62      in one datab
4f40: 61 73 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  ase; therefore, 
4f50: 72 65 6d 6f 76 65 20 74 68 65 20 62 61 73 65 20  remove the base 
4f60: 73 63 68 65 6d 61 20 6e 61 6d 65 0d 0a 20 20 20  schema name..   
4f70: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 73       //       us
4f80: 65 64 20 74 6f 20 73 6d 6f 6f 74 68 20 69 6e 74  ed to smooth int
4f90: 65 67 72 61 74 69 6f 6e 20 77 69 74 68 20 74 68  egration with th
4fa0: 65 20 62 61 73 65 20 2e 4e 45 54 20 46 72 61 6d  e base .NET Fram
4fb0: 65 77 6f 72 6b 0d 0a 20 20 20 20 20 20 20 20 2f  ework..        /
4fc0: 2f 20 20 20 20 20 20 20 64 61 74 61 20 63 6c 61  /       data cla
4fd0: 73 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  sses...        /
4fe0: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
4ff0: 67 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  g baseSchemaName
5000: 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29   = (cnn != null)
5010: 20 3f 20 63 6e 6e 2e 5f 62 61 73 65 53 63 68 65   ? cnn._baseSche
5020: 6d 61 4e 61 6d 65 20 3a 20 6e 75 6c 6c 3b 0d 0a  maName : null;..
5030: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 53  ..        if (!S
5040: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
5050: 70 74 79 28 62 61 73 65 53 63 68 65 6d 61 4e 61  pty(baseSchemaNa
5060: 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  me))..        {.
5070: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71  .          strSq
5080: 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c 61  l = strSql.Repla
5090: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
50a0: 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
50b0: 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76  (CultureInfo.Inv
50c0: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  ariantCulture,..
50d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5b                "[
50e0: 7b 30 7d 5d 2e 22 2c 20 62 61 73 65 53 63 68 65  {0}].", baseSche
50f0: 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e  maName), String.
5100: 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  Empty);....     
5110: 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74       strSql = st
5120: 72 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20  rSql.Replace(.. 
5130: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
5140: 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75  ing.Format(Cultu
5150: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
5160: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
5170: 20 20 20 20 20 20 20 20 22 7b 30 7d 2e 22 2c 20          "{0}.", 
5180: 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c  baseSchemaName),
5190: 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d   String.Empty);.
51a0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
51b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 53 51 4c    }....      SQL
51c0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
51d0: 67 73 20 66 6c 61 67 73 20 3d 0d 0a 20 20 20 20  gs flags =..    
51e0: 20 20 20 20 20 20 28 63 6e 6e 20 21 3d 20 6e 75        (cnn != nu
51f0: 6c 6c 29 20 3f 20 63 6e 6e 2e 46 6c 61 67 73 20  ll) ? cnn.Flags 
5200: 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  : SQLiteConnecti
5210: 6f 6e 46 6c 61 67 73 2e 44 65 66 61 75 6c 74 3b  onFlags.Default;
5220: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 28 66  ....      if ((f
5230: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
5240: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
5250: 50 72 65 70 61 72 65 29 20 3d 3d 20 53 51 4c 69  Prepare) == SQLi
5260: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
5270: 73 2e 4c 6f 67 50 72 65 70 61 72 65 29 0d 0a 20  s.LogPrepare).. 
5280: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5290: 20 20 69 66 20 28 28 73 74 72 53 71 6c 20 3d 3d    if ((strSql ==
52a0: 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 74 72 53 71   null) || (strSq
52b0: 6c 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 20 7c  l.Length == 0) |
52c0: 7c 20 28 73 74 72 53 71 6c 2e 54 72 69 6d 28 29  | (strSql.Trim()
52d0: 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 29 0d 0a  .Length == 0))..
52e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
52f0: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
5300: 67 65 28 22 50 72 65 70 61 72 69 6e 67 20 7b 3c  ge("Preparing {<
5310: 6e 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d  nothing>}...");.
5320: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d  .          else.
5330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
5340: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
5350: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
5360: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
5370: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
5380: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
5390: 2c 20 22 50 72 65 70 61 72 69 6e 67 20 7b 7b 7b  , "Preparing {{{
53a0: 30 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72 53 71 6c  0}}}...", strSql
53b0: 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ));..      }....
53c0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 73 74 6d        IntPtr stm
53d0: 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  t = IntPtr.Zero;
53e0: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
53f0: 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  tr = IntPtr.Zero
5400: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  ;..      int len
5410: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c   = 0;..      SQL
5420: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
5430: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
5440: 2e 53 63 68 65 6d 61 3b 0d 0a 20 20 20 20 20 20  .Schema;..      
5450: 69 6e 74 20 72 65 74 72 69 65 73 20 3d 20 30 3b  int retries = 0;
5460: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
5470: 20 3d 20 54 6f 55 54 46 38 28 73 74 72 53 71 6c   = ToUTF8(strSql
5480: 29 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67  );..      string
5490: 20 74 79 70 65 64 65 66 73 20 3d 20 6e 75 6c 6c   typedefs = null
54a0: 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53  ;..      SQLiteS
54b0: 74 61 74 65 6d 65 6e 74 20 63 6d 64 20 3d 20 6e  tatement cmd = n
54c0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64  ull;..      Rand
54d0: 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a  om rnd = null;..
54e0: 20 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74        uint start
54f0: 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76  tick = (uint)Env
5500: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
5510: 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 47 43 48  nt;....      GCH
5520: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 47  andle handle = G
5530: 43 48 61 6e 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c  CHandle.Alloc(b,
5540: 20 47 43 48 61 6e 64 6c 65 54 79 70 65 2e 50 69   GCHandleType.Pi
5550: 6e 6e 65 64 29 3b 0d 0a 20 20 20 20 20 20 49 6e  nned);..      In
5560: 74 50 74 72 20 70 73 71 6c 20 3d 20 68 61 6e 64  tPtr psql = hand
5570: 6c 65 2e 41 64 64 72 4f 66 50 69 6e 6e 65 64 4f  le.AddrOfPinnedO
5580: 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20  bject();..      
5590: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
55a0: 61 6e 64 6c 65 20 73 74 61 74 65 6d 65 6e 74 48  andle statementH
55b0: 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  andle = null;.. 
55c0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
55d0: 7b 0d 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  {..        while
55e0: 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72   ((n == SQLiteEr
55f0: 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 20 7c  rorCode.Schema |
5600: 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  | n == SQLiteErr
5610: 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c  orCode.Locked ||
5620: 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   n == SQLiteErro
5630: 72 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20 72  rCode.Busy) && r
5640: 65 74 72 69 65 73 20 3c 20 33 29 0d 0a 20 20 20  etries < 3)..   
5650: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5660: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
5670: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5680: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
5690: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
56a0: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f         finally /
56b0: 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41  * NOTE: Thread.A
56c0: 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f  bort() protectio
56d0: 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  n. */..         
56e0: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
56f0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
5700: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
5710: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
5720: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e  lite3_prepare_in
5730: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 70 73 71 6c  terop(_sql, psql
5740: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
5750: 6f 75 74 20 73 74 6d 74 2c 20 6f 75 74 20 70 74  out stmt, out pt
5760: 72 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23 65  r, out len);..#e
5770: 6c 73 65 0d 0a 23 69 66 20 55 53 45 5f 50 52 45  lse..#if USE_PRE
5780: 50 41 52 45 5f 56 32 0d 0a 20 20 20 20 20 20 20  PARE_V2..       
5790: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
57a0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
57b0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
57c0: 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65  _sql, psql, b.Le
57d0: 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20 73 74  ngth - 1, out st
57e0: 6d 74 2c 20 6f 75 74 20 70 74 72 29 3b 0d 0a 23  mt, out ptr);..#
57f0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
5800: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
5810: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5820: 33 5f 70 72 65 70 61 72 65 28 5f 73 71 6c 2c 20  3_prepare(_sql, 
5830: 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  psql, b.Length -
5840: 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75   1, out stmt, ou
5850: 74 20 70 74 72 29 3b 0d 0a 23 65 6e 64 69 66 0d  t ptr);..#endif.
5860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e  .            len
5870: 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a   = -1;..#endif..
5880: 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
5890: 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 53  CT_20 && TRACE_S
58a0: 54 41 54 45 4d 45 4e 54 0d 0a 20 20 20 20 20 20  TATEMENT..      
58b0: 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
58c0: 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72  eLine(String.For
58d0: 6d 61 74 28 22 50 72 65 70 61 72 65 20 28 7b 30  mat("Prepare ({0
58e0: 7d 29 3a 20 7b 31 7d 22 2c 20 6e 2c 20 73 74 6d  }): {1}", n, stm
58f0: 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  t));..#endif....
5900: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5910: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
5920: 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 73 74  rCode.Ok) && (st
5930: 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  mt != IntPtr.Zer
5940: 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  o))..           
5950: 20 20 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64     statementHand
5960: 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53  le = new SQLiteS
5970: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 28 5f  tatementHandle(_
5980: 73 71 6c 2c 20 73 74 6d 74 29 3b 0d 0a 20 20 20  sql, stmt);..   
5990: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
59a0: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
59b0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53  QLiteErrorCode.S
59c0: 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 20 20  chema)..        
59d0: 20 20 20 20 72 65 74 72 69 65 73 2b 2b 3b 0d 0a      retries++;..
59e0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
59f0: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
5a00: 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 29 0d 0a  rorCode.Error)..
5a10: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5a20: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
5a30: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c  ing.Compare(GetL
5a40: 61 73 74 45 72 72 6f 72 28 29 2c 20 22 6e 65 61  astError(), "nea
5a50: 72 20 5c 22 54 59 50 45 53 5c 22 3a 20 73 79 6e  r \"TYPES\": syn
5a60: 74 61 78 20 65 72 72 6f 72 22 2c 20 53 74 72 69  tax error", Stri
5a70: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
5a80: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
5a90: 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
5aa0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5ab0: 20 20 20 20 69 6e 74 20 70 6f 73 20 3d 20 73 74      int pos = st
5ac0: 72 53 71 6c 2e 49 6e 64 65 78 4f 66 28 27 3b 27  rSql.IndexOf(';'
5ad0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
5ae0: 20 20 69 66 20 28 70 6f 73 20 3d 3d 20 2d 31 29    if (pos == -1)
5af0: 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 4c 65   pos = strSql.Le
5b00: 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20  ngth - 1;....   
5b10: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 64             typed
5b20: 65 66 73 20 3d 20 73 74 72 53 71 6c 2e 53 75 62  efs = strSql.Sub
5b30: 73 74 72 69 6e 67 28 30 2c 20 70 6f 73 20 2b 20  string(0, pos + 
5b40: 31 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  1);..           
5b50: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53     strSql = strS
5b60: 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 70 6f 73  ql.Substring(pos
5b70: 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   + 1);....      
5b80: 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61 69          strRemai
5b90: 6e 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20 20 20 20  n = "";....     
5ba0: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
5bb0: 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73  cmd == null && s
5bc0: 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30  trSql.Length > 0
5bd0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5be0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5bf0: 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72      cmd = Prepar
5c00: 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70  e(cnn, strSql, p
5c10: 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74  revious, timeout
5c20: 4d 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61 69  MS, out strRemai
5c30: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
5c40: 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74       strSql = st
5c50: 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20  rRemain;..      
5c60: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5c70: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
5c80: 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  md != null)..   
5c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64               cmd
5ca0: 2e 53 65 74 54 79 70 65 73 28 74 79 70 65 64 65  .SetTypes(typede
5cb0: 66 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  fs);....        
5cc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64        return cmd
5cd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
5ce0: 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35 20 7c 7c  ..#if (NET_35 ||
5cf0: 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34   NET_40 || NET_4
5d00: 35 29 20 26 26 20 21 50 4c 41 54 46 4f 52 4d 5f  5) && !PLATFORM_
5d10: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
5d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
5d30: 73 65 20 69 66 20 28 5f 62 75 69 6c 64 69 6e 67  se if (_building
5d40: 53 63 68 65 6d 61 20 3d 3d 20 66 61 6c 73 65 20  Schema == false 
5d50: 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  && String.Compar
5d60: 65 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  e(GetLastError()
5d70: 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68 20 74 61  , 0, "no such ta
5d80: 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48 45 4d 41  ble: TEMP.SCHEMA
5d90: 22 2c 20 30 2c 20 32 36 2c 20 53 74 72 69 6e 67  ", 0, 26, String
5da0: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
5db0: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
5dc0: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
5dd0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5de0: 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22    strRemain = ""
5df0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5e00: 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61   _buildingSchema
5e10: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
5e20: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
5e30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 53                IS
5e50: 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e  QLiteSchemaExten
5e60: 73 69 6f 6e 73 20 65 78 74 20 3d 20 28 28 49 53  sions ext = ((IS
5e70: 65 72 76 69 63 65 50 72 6f 76 69 64 65 72 29 53  erviceProvider)S
5e80: 51 4c 69 74 65 46 61 63 74 6f 72 79 2e 49 6e 73  QLiteFactory.Ins
5e90: 74 61 6e 63 65 29 2e 47 65 74 53 65 72 76 69 63  tance).GetServic
5ea0: 65 28 74 79 70 65 6f 66 28 49 53 51 4c 69 74 65  e(typeof(ISQLite
5eb0: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
5ec0: 29 29 20 61 73 20 49 53 51 4c 69 74 65 53 63 68  )) as ISQLiteSch
5ed0: 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 3b 0d 0a  emaExtensions;..
5ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5ef0: 20 20 69 66 20 28 65 78 74 20 21 3d 20 6e 75 6c    if (ext != nul
5f00: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
5f10: 20 20 20 20 20 20 65 78 74 2e 42 75 69 6c 64 54        ext.BuildT
5f20: 65 6d 70 53 63 68 65 6d 61 28 63 6e 6e 29 3b 0d  empSchema(cnn);.
5f30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5f40: 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d     while (cmd ==
5f50: 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e   null && strSql.
5f60: 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20  Length > 0)..   
5f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
5f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f90: 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28    cmd = Prepare(
5fa0: 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65  cnn, strSql, pre
5fb0: 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53  vious, timeoutMS
5fc0: 2c 20 6f 75 74 20 73 74 72 52 65 6d 61 69 6e 29  , out strRemain)
5fd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5fe0: 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74       strSql = st
5ff0: 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20  rRemain;..      
6000: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
6010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
6020: 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20  eturn cmd;..    
6030: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6040: 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
6050: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
6060: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6070: 20 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63       _buildingSc
6080: 68 65 6d 61 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  hema = false;.. 
6090: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
60a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
60b0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
60c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c   }..          el
60d0: 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69  se if (n == SQLi
60e0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b  teErrorCode.Lock
60f0: 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74  ed || n == SQLit
6100: 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29  eErrorCode.Busy)
6110: 20 2f 2f 20 4c 6f 63 6b 65 64 20 2d 2d 20 64 65   // Locked -- de
6120: 6c 61 79 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75  lay a small amou
6130: 6e 74 20 62 65 66 6f 72 65 20 72 65 74 72 79 69  nt before retryi
6140: 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ng..          {.
6150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
6160: 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20  Keep trying..   
6170: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6e 64           if (rnd
6180: 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72   == null) // Fir
6190: 73 74 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e  st time we've en
61a0: 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f  countered the lo
61b0: 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ck..            
61c0: 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64    rnd = new Rand
61d0: 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  om();....       
61e0: 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65       // If we've
61f0: 20 65 78 63 65 65 64 65 64 20 74 68 65 20 63 6f   exceeded the co
6200: 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c  mmand's timeout,
6210: 20 67 69 76 65 20 75 70 20 61 6e 64 20 74 68 72   give up and thr
6220: 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20  ow an error..   
6230: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 75 69           if ((ui
6240: 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54  nt)Environment.T
6250: 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74  ickCount - start
6260: 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 4d 53  tick > timeoutMS
6270: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
6280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6290: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
62a0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
62b0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
62c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
62d0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
62e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
62f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
6300: 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65 70 20  Otherwise sleep 
6310: 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f  for a random amo
6320: 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74  unt of time up t
6330: 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20  o 150ms..       
6340: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68         System.Th
6350: 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53  reading.Thread.S
6360: 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c  leep(rnd.Next(1,
6370: 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20   150));..       
6380: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6390: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
63a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
63b0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
63c0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
63d0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
63e0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
63f0: 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ());....        
6400: 73 74 72 52 65 6d 61 69 6e 20 3d 20 55 54 46 38  strRemain = UTF8
6410: 54 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 6c 65  ToString(ptr, le
6420: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  n);....        i
6430: 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e 64  f (statementHand
6440: 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 63 6d 64 20  le != null) cmd 
6450: 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74  = new SQLiteStat
6460: 65 6d 65 6e 74 28 74 68 69 73 2c 20 66 6c 61 67  ement(this, flag
6470: 73 2c 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64  s, statementHand
6480: 6c 65 2c 20 73 74 72 53 71 6c 2e 53 75 62 73 74  le, strSql.Subst
6490: 72 69 6e 67 28 30 2c 20 73 74 72 53 71 6c 2e 4c  ring(0, strSql.L
64a0: 65 6e 67 74 68 20 2d 20 73 74 72 52 65 6d 61 69  ength - strRemai
64b0: 6e 2e 4c 65 6e 67 74 68 29 2c 20 70 72 65 76 69  n.Length), previ
64c0: 6f 75 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ous);....       
64d0: 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20   return cmd;..  
64e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 66 69 6e      }..      fin
64f0: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ally..      {.. 
6500: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 46 72         handle.Fr
6510: 65 65 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  ee();..      }..
6520: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f      }....    pro
6530: 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f  tected static vo
6540: 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74  id LogBind(SQLit
6550: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
6560: 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64   handle, int ind
6570: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
6580: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
6590: 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65  eIntPtr = handle
65a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
65b0: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
65c0: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
65d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 75  ..            Cu
65e0: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
65f0: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
6600: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
6610: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
6620: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 4e  ramter #{1} as N
6630: 55 4c 4c 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  ULL...",..      
6640: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
6650: 74 72 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20  tr, index));..  
6660: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
6670: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
6680: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
6690: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
66a0: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
66b0: 2c 20 56 61 6c 75 65 54 79 70 65 20 76 61 6c 75  , ValueType valu
66c0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
66d0: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
66e0: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
66f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
6700: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
6710: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
6720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69  .            "Bi
6730: 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  nding statement 
6740: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31  {0} paramter #{1
6750: 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69  } as type {2} wi
6760: 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d  th value {{{3}}}
6770: 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
6780: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
6790: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 2e 47 65   index, value.Ge
67a0: 74 54 79 70 65 28 29 2c 20 76 61 6c 75 65 29 29  tType(), value))
67b0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
67c0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
67d0: 74 72 69 6e 67 20 46 6f 72 6d 61 74 44 61 74 65  tring FormatDate
67e0: 54 69 6d 65 28 44 61 74 65 54 69 6d 65 20 76 61  Time(DateTime va
67f0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
6800: 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64       StringBuild
6810: 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  er result = new 
6820: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b  StringBuilder();
6830: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  ....        resu
6840: 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e  lt.Append(value.
6850: 54 6f 53 74 72 69 6e 67 28 22 79 79 79 79 2d 4d  ToString("yyyy-M
6860: 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46 46  M-ddTHH:mm:ss.FF
6870: 46 46 46 46 46 4b 22 29 29 3b 0d 0a 20 20 20 20  FFFFFK"));..    
6880: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
6890: 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20 20 20  d(' ');..       
68a0: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76   result.Append(v
68b0: 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d 0a 20 20 20  alue.Kind);..   
68c0: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
68d0: 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20 20  nd(' ');..      
68e0: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
68f0: 76 61 6c 75 65 2e 54 69 63 6b 73 29 3b 0d 0a 0d  value.Ticks);...
6900: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6910: 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28  result.ToString(
6920: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
6930: 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69   protected stati
6940: 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53  c void LogBind(S
6950: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
6960: 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74  ndle handle, int
6970: 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65   index, DateTime
6980: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
6990: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
69a0: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
69b0: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
69c0: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
69d0: 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72  ssage(String.For
69e0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
69f0: 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65    "Binding state
6a00: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
6a10: 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b  r #{1} as type {
6a20: 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b  2} with value {{
6a30: 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20  {3}}}...",..    
6a40: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
6a50: 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70  tPtr, index, typ
6a60: 65 6f 66 28 44 61 74 65 54 69 6d 65 29 2c 20 46  eof(DateTime), F
6a70: 6f 72 6d 61 74 44 61 74 65 54 69 6d 65 28 76 61  ormatDateTime(va
6a80: 6c 75 65 29 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  lue)));..    }..
6a90: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
6aa0: 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42  static void LogB
6ab0: 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ind(SQLiteStatem
6ac0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
6ad0: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72  , int index, str
6ae0: 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ing value)..    
6af0: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
6b00: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
6b10: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
6b20: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
6b30: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
6b40: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
6b50: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
6b60: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
6b70: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
6b80: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
6b90: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
6ba0: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
6bb0: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
6bc0: 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 2c 20  typeof(String), 
6bd0: 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20  (value != null) 
6be0: 3f 20 76 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c  ? value : "<null
6bf0: 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  >"));..    }....
6c00: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
6c10: 69 63 20 73 74 72 69 6e 67 20 54 6f 48 65 78 61  ic string ToHexa
6c20: 64 65 63 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a  decimalString(..
6c30: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 61          byte[] a
6c40: 72 72 61 79 0d 0a 20 20 20 20 20 20 20 20 29 0d  rray..        ).
6c50: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
6c60: 69 66 20 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c  if (array == nul
6c70: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
6c80: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
6c90: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75          StringBu
6ca0: 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e  ilder result = n
6cb0: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
6cc0: 28 61 72 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20  (array.Length * 
6cd0: 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  2);....        i
6ce0: 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61 72 72 61  nt length = arra
6cf0: 79 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20  y.Length;....   
6d00: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
6d10: 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
6d20: 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b   length; index++
6d30: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
6d40: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 61 72 72  esult.Append(arr
6d50: 61 79 5b 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69  ay[index].ToStri
6d60: 6e 67 28 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20  ng("x2"));....  
6d70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
6d80: 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  ult.ToString();.
6d90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
6da0: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
6db0: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
6dc0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
6dd0: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
6de0: 64 65 78 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75  dex, byte[] valu
6df0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
6e00: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
6e10: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
6e20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
6e30: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
6e40: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
6e50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69  .            "Bi
6e60: 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  nding statement 
6e70: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31  {0} paramter #{1
6e80: 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69  } as type {2} wi
6e90: 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d  th value {{{3}}}
6ea0: 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
6eb0: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
6ec0: 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 42   index, typeof(B
6ed0: 79 74 65 5b 5d 29 2c 20 28 76 61 6c 75 65 20 21  yte[]), (value !
6ee0: 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 48 65 78 61  = null) ? ToHexa
6ef0: 64 65 63 69 6d 61 6c 53 74 72 69 6e 67 28 76 61  decimalString(va
6f00: 6c 75 65 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29  lue) : "<null>")
6f10: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
6f20: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
6f30: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 6f 75  de void Bind_Dou
6f40: 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
6f50: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
6f60: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
6f70: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
6f80: 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d  , double value).
6f90: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
6fa0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
6fb0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
6fc0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
6fd0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
6fe0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
6ff0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7000: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
7010: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7020: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
7030: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7040: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
7050: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
7060: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
7070: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
7080: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
7090: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
70a0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
70b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
70c0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75  sqlite3_bind_dou
70d0: 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ble(handle, inde
70e0: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69  x, value);..#eli
70f0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
7100: 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  RD..        SQLi
7110: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
7120: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7130: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
7140: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
7150: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
7160: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
7170: 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  e..        throw
7180: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
7190: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
71a0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
71b0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
71c0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
71d0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
71e0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
71f0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
7200: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
7210: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
7220: 20 42 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69   Bind_Int32(SQLi
7230: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
7240: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
7250: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
7260: 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 76 61  nt index, int va
7270: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
7280: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
7290: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
72a0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
72b0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  _stmt;....      
72c0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
72d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
72e0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
72f0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7300: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
7310: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
7320: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
7330: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
7340: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
7350: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
7360: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
7370: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
7380: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
7390: 64 5f 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e  d_int(handle, in
73a0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
73b0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
73c0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
73d0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
73e0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
73f0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
7400: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
7410: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
7420: 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 33   void Bind_UInt3
7430: 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  2(SQLiteStatemen
7440: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
7450: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
7460: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
7470: 75 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20  uint value)..   
7480: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
7490: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
74a0: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
74b0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
74c0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
74d0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
74e0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
74f0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
7500: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
7510: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
7520: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
7530: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
7540: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
7550: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
7560: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
7570: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
7580: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
7590: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a  teErrorCode n;..
75a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
75b0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
75c0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e  nectionFlags.Bin
75d0: 64 55 49 6e 74 33 32 41 73 49 6e 74 36 34 29 20  dUInt32AsInt64) 
75e0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
75f0: 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e  ionFlags.BindUIn
7600: 74 33 32 41 73 49 6e 74 36 34 29 0d 0a 20 20 20  t32AsInt64)..   
7610: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7620: 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 32 20      long value2 
7630: 3d 20 76 61 6c 75 65 3b 0d 0a 0d 0a 23 69 66 20  = value;....#if 
7640: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
7650: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
7660: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
7670: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
7680: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
7690: 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  64(handle, index
76a0: 2c 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 69  , value2);..#eli
76b0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
76c0: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
76d0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
76e0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
76f0: 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72  bind_int64_inter
7700: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
7710: 2c 20 72 65 66 20 76 61 6c 75 65 32 29 3b 0d 0a  , ref value2);..
7720: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
7730: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
7740: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
7750: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
7760: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
7770: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
7780: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7790: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
77a0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
77b0: 5f 62 69 6e 64 5f 75 69 6e 74 28 68 61 6e 64 6c  _bind_uint(handl
77c0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
77d0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
77e0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
77f0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
7800: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
7810: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
7820: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
7830: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
7840: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
7850: 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74 36 34   void Bind_Int64
7860: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
7870: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
7880: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
7890: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 6c  gs, int index, l
78a0: 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ong value)..    
78b0: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
78c0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
78d0: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
78e0: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
78f0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
7900: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
7910: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
7920: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
7930: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
7940: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
7950: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
7960: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
7970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
7980: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
7990: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
79a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
79b0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
79c0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
79d0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
79e0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61  e3_bind_int64(ha
79f0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
7a00: 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
7a10: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
7a20: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
7a30: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
7a40: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
7a50: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
7a60: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
7a70: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
7a80: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
7a90: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
7aa0: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
7ab0: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
7ac0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
7ad0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
7ae0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
7af0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
7b00: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
7b10: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
7b20: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
7b30: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55  ride void Bind_U
7b40: 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74  Int64(SQLiteStat
7b50: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
7b60: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7b70: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
7b80: 65 78 2c 20 75 6c 6f 6e 67 20 76 61 6c 75 65 29  ex, ulong value)
7b90: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
7ba0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
7bb0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
7bc0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
7bd0: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
7be0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
7bf0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
7c00: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
7c10: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7c20: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
7c30: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7c40: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
7c50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7c60: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
7c70: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
7c80: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
7c90: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
7ca0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
7cb0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7cc0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69  .sqlite3_bind_ui
7cd0: 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64  nt64(handle, ind
7ce0: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ex, value);..#el
7cf0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
7d00: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ARD..        SQL
7d10: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
7d20: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
7d30: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
7d40: 64 5f 75 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  d_uint64_interop
7d50: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
7d60: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
7d70: 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  se..        thro
7d80: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
7d90: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
7da0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
7db0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
7dc0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
7dd0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
7de0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
7df0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
7e00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
7e10: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
7e20: 64 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c 69  d Bind_Text(SQLi
7e30: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
7e40: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
7e50: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
7e60: 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67  nt index, string
7e70: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
7e80: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
7e90: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
7ea0: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
7eb0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
7ec0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
7ed0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
7ee0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
7ef0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
7f00: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
7f10: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
7f20: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
7f30: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
7f40: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
7f50: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
7f60: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
7f70: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
7f80: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
7f90: 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29   = ToUTF8(value)
7fa0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
7fb0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
7fc0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
7fd0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
7fe0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7ff0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
8000: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8010: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
8020: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8030: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
8040: 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20  e, index, b);.. 
8050: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
8060: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
8070: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
8080: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8090: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
80a0: 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e  _text(handle, in
80b0: 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68  dex, b, b.Length
80c0: 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d   - 1, (IntPtr)(-
80d0: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  1));..        if
80e0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
80f0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
8100: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
8110: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
8120: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
8130: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
8140: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
8150: 6e 64 5f 44 61 74 65 54 69 6d 65 28 53 51 4c 69  nd_DateTime(SQLi
8160: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
8170: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
8180: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
8190: 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69  nt index, DateTi
81a0: 6d 65 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  me dt)..    {.. 
81b0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
81c0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
81d0: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
81e0: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
81f0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
8200: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
8210: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
8220: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8230: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
8240: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
8250: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
8260: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
8270: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
8280: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
8290: 20 64 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d   dt);..        }
82a0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
82b0: 20 20 20 20 73 77 69 74 63 68 20 28 5f 64 61 74      switch (_dat
82c0: 65 74 69 6d 65 46 6f 72 6d 61 74 29 0d 0a 20 20  etimeFormat)..  
82d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
82e0: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
82f0: 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b  DateFormats.Tick
8300: 73 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s:..            
8310: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8320: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
8330: 76 61 6c 75 65 20 3d 20 64 74 2e 54 69 63 6b 73  value = dt.Ticks
8340: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
8350: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
8360: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
8370: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c           if ((fl
8380: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
8390: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
83a0: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
83b0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
83c0: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
83d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83f0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
8400: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
8410: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
8420: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8440: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
8450: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
8460: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
8470: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68  te3_bind_int64(h
8480: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
8490: 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
84a0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84c0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
84d0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
84e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
84f0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e  e3_bind_int64_in
8500: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
8510: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
8520: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
8530: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
8540: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
8550: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
8560: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
8570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
8580: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
8590: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
85a0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
85b0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
85c0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
85d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
85e0: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  reak;..         
85f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
8600: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74        case SQLit
8610: 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c  eDateFormats.Jul
8620: 69 61 6e 44 61 79 3a 0d 0a 20 20 20 20 20 20 20  ianDay:..       
8630: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8650: 64 6f 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 54  double value = T
8660: 6f 4a 75 6c 69 61 6e 44 61 79 28 64 74 29 3b 0d  oJulianDay(dt);.
8670: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
8680: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
8690: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  K..             
86a0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
86b0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
86c0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
86d0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
86e0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
86f0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ind)..          
8700: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8720: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
8730: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
8740: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
8750: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8770: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
8780: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
8790: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
87a0: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61  3_bind_double(ha
87b0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
87c0: 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
87d0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
87e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87f0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
8800: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
8810: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
8820: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e  3_bind_double_in
8830: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
8840: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
8850: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
8860: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
8870: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
8880: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
8890: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
88a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
88b0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
88c0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
88d0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
88e0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
88f0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
8900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
8910: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  reak;..         
8920: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
8930: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74        case SQLit
8940: 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69  eDateFormats.Uni
8950: 78 45 70 6f 63 68 3a 0d 0a 20 20 20 20 20 20 20  xEpoch:..       
8960: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8980: 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20 43 6f 6e  long value = Con
8990: 76 65 72 74 2e 54 6f 49 6e 74 36 34 28 64 74 2e  vert.ToInt64(dt.
89a0: 53 75 62 74 72 61 63 74 28 55 6e 69 78 45 70 6f  Subtract(UnixEpo
89b0: 63 68 29 2e 54 6f 74 61 6c 53 65 63 6f 6e 64 73  ch).TotalSeconds
89c0: 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  );....#if !PLATF
89d0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
89e0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
89f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66            if ((f
8a00: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
8a10: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
8a20: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
8a30: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
8a40: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
8a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
8a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a70: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
8a80: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
8a90: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
8aa0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
8ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ac0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
8ad0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
8ae0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8af0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28  ite3_bind_int64(
8b00: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
8b10: 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53  alue);..#elif !S
8b20: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
8b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b40: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
8b50: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
8b60: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
8b70: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69  te3_bind_int64_i
8b80: 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69  nterop(handle, i
8b90: 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29  ndex, ref value)
8ba0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
8bc0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
8bd0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
8be0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
8bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c00: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
8c10: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
8c20: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
8c30: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
8c40: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
8c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c60: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
8c70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8c80: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d         default:.
8c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ca0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8cb0: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
8cc0: 20 3d 20 54 6f 55 54 46 38 28 64 74 29 3b 0d 0a   = ToUTF8(dt);..
8cd0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
8ce0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
8cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d00: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
8d10: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
8d20: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
8d30: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
8d40: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
8d50: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nd)..           
8d60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d80: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
8d90: 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a  le, index, b);..
8da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8db0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
8dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8dd0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
8de0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
8df0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8e00: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68  ite3_bind_text(h
8e10: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c  andle, index, b,
8e20: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28   b.Length - 1, (
8e30: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
8e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e50: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
8e60: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
8e70: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
8e80: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
8e90: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8eb0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
8ec0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8ed0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
8ee0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
8ef0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
8f00: 64 5f 42 6c 6f 62 28 53 51 4c 69 74 65 53 74 61  d_Blob(SQLiteSta
8f10: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
8f20: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
8f30: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
8f40: 64 65 78 2c 20 62 79 74 65 5b 5d 20 62 6c 6f 62  dex, byte[] blob
8f50: 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Data)..    {..  
8f60: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
8f70: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
8f80: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
8f90: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21  e_stmt;....#if !
8fa0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
8fb0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
8fc0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
8fd0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8fe0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
8ff0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
9000: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
9010: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
9020: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
9030: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
9040: 62 6c 6f 62 44 61 74 61 29 3b 0d 0a 20 20 20 20  blobData);..    
9050: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
9060: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
9070: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
9080: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9090: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c  .sqlite3_bind_bl
90a0: 6f 62 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  ob(handle, index
90b0: 2c 20 62 6c 6f 62 44 61 74 61 2c 20 62 6c 6f 62  , blobData, blob
90c0: 44 61 74 61 2e 4c 65 6e 67 74 68 2c 20 28 49 6e  Data.Length, (In
90d0: 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20  tPtr)(-1));..   
90e0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
90f0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
9100: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
9110: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
9120: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
9130: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
9140: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
9150: 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c 6c 28 53  void Bind_Null(S
9160: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
9170: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
9180: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
9190: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
91a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
91b0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
91c0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
91d0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
91e0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
91f0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
9200: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
9210: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
9220: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
9230: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
9240: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
9250: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
9260: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9270: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
9280: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
9290: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
92a0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
92b0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
92c0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
92d0: 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28  lite3_bind_null(
92e0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d  handle, index);.
92f0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
9300: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
9310: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
9320: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
9330: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
9340: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
9350: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
9360: 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61 72  ide int Bind_Par
9370: 61 6d 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74  amCount(SQLiteSt
9380: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
9390: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
93a0: 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20  ags flags)..    
93b0: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
93c0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
93d0: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
93e0: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20  sqlite_stmt;..  
93f0: 20 20 20 20 20 20 69 6e 74 20 76 61 6c 75 65 20        int value 
9400: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
9410: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
9420: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75  nd_parameter_cou
9430: 6e 74 28 68 61 6e 64 6c 65 29 3b 0d 0a 0d 0a 20  nt(handle);.... 
9440: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
9450: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
9460: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
9470: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
9480: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
9490: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
94a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
94b0: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
94c0: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
94d0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
94e0: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
94f0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
9500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9510: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
9520: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
9530: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61              "Sta
9540: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
9550: 74 65 72 20 63 6f 75 6e 74 20 69 73 20 7b 31 7d  ter count is {1}
9560: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
9570: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
9580: 72 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20  r, value));..   
9590: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
95a0: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
95b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
95c0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
95d0: 73 74 72 69 6e 67 20 42 69 6e 64 5f 50 61 72 61  string Bind_Para
95e0: 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  mName(SQLiteStat
95f0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
9600: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
9610: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
9620: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
9630: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
9640: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
9650: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
9660: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 73  stmt;..        s
9670: 74 72 69 6e 67 20 6e 61 6d 65 3b 0d 0a 0d 0a 23  tring name;....#
9680: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
9690: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ARD..        int
96a0: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 6e   len;..        n
96b0: 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ame = UTF8ToStri
96c0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
96d0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
96e0: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
96f0: 6d 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  me_interop(handl
9700: 65 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65  e, index, out le
9710: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
9720: 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d  ..        name =
9730: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
9740: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9750: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  s.sqlite3_bind_p
9760: 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 68 61  arameter_name(ha
9770: 6e 64 6c 65 2c 20 69 6e 64 65 78 29 2c 20 2d 31  ndle, index), -1
9780: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
9790: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
97a0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
97b0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
97c0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
97d0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
97e0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
97f0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
9800: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
9810: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
9820: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
9830: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
9840: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
9850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
9860: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
9870: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
9880: 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61 74             "Stat
9890: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
98a0: 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20 69 73 20  er #{1} name is 
98b0: 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20  {{{2}}}.",..    
98c0: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
98d0: 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c  leIntPtr, index,
98e0: 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20   name));..      
98f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
9900: 65 74 75 72 6e 20 6e 61 6d 65 3b 0d 0a 20 20 20  eturn name;..   
9910: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
9920: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
9930: 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78 28  Bind_ParamIndex(
9940: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
9950: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
9960: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
9970: 73 2c 20 73 74 72 69 6e 67 20 70 61 72 61 6d 4e  s, string paramN
9980: 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ame)..    {..   
9990: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
99a0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
99b0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
99c0: 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20  _stmt;..        
99d0: 69 6e 74 20 69 6e 64 65 78 20 3d 20 55 6e 73 61  int index = Unsa
99e0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
99f0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
9a00: 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 68 61 6e  ameter_index(han
9a10: 64 6c 65 2c 20 54 6f 55 54 46 38 28 70 61 72 61  dle, ToUTF8(para
9a20: 6d 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20  mName));....    
9a30: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
9a40: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
9a50: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
9a60: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
9a70: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
9a80: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
9a90: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
9aa0: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
9ab0: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
9ac0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
9ad0: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
9ae0: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
9b00: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
9b10: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
9b20: 20 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d           "Statem
9b30: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
9b40: 20 69 6e 64 65 78 20 6f 66 20 6e 61 6d 65 20 7b   index of name {
9b50: 7b 7b 31 7d 7d 7d 20 69 73 20 23 7b 32 7d 2e 22  {{1}}} is #{2}."
9b60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9b70: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
9b80: 20 70 61 72 61 6d 4e 61 6d 65 2c 20 69 6e 64 65   paramName, inde
9b90: 78 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  x));..        }.
9ba0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
9bb0: 6e 20 69 6e 64 65 78 3b 0d 0a 20 20 20 20 7d 0d  n index;..    }.
9bc0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
9bd0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c  override int Col
9be0: 75 6d 6e 43 6f 75 6e 74 28 53 51 4c 69 74 65 53  umnCount(SQLiteS
9bf0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a  tatement stmt)..
9c00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
9c10: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
9c20: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9c30: 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73 74 6d  column_count(stm
9c40: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b  t._sqlite_stmt);
9c50: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
9c60: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
9c70: 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61   string ColumnNa
9c80: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
9c90: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
9ca0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
9cb0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
9cc0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
9cd0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
9ce0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
9cf0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9d00: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
9d10: 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ame_interop(stmt
9d20: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
9d30: 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20  ndex, out len), 
9d40: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
9d50: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
9d60: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
9d70: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9d80: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28  te3_column_name(
9d90: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
9da0: 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  t, index), -1);.
9db0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
9dc0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
9dd0: 76 65 72 72 69 64 65 20 54 79 70 65 41 66 66 69  verride TypeAffi
9de0: 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66 66 69 6e  nity ColumnAffin
9df0: 69 74 79 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ity(SQLiteStatem
9e00: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
9e10: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
9e20: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
9e30: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9e40: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70  lite3_column_typ
9e50: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
9e60: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
9e70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
9e80: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
9e90: 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70 65 28 53  ing ColumnType(S
9ea0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
9eb0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
9ec0: 6f 75 74 20 54 79 70 65 41 66 66 69 6e 69 74 79  out TypeAffinity
9ed0: 20 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20   nAffinity)..   
9ee0: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65   {..      int le
9ef0: 6e 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  n;..#if !SQLITE_
9f00: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
9f10: 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66  IntPtr p = Unsaf
9f20: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9f30: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
9f40: 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f 70 28 73  cltype_interop(s
9f50: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
9f60: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e  , index, out len
9f70: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
9f80: 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20   len = -1;..    
9f90: 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73    IntPtr p = Uns
9fa0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9fb0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
9fc0: 64 65 63 6c 74 79 70 65 28 73 74 6d 74 2e 5f 73  decltype(stmt._s
9fd0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
9fe0: 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  x);..#endif..   
9ff0: 20 20 20 6e 41 66 66 69 6e 69 74 79 20 3d 20 43     nAffinity = C
a000: 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74  olumnAffinity(st
a010: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20  mt, index);.... 
a020: 20 20 20 20 20 69 66 20 28 70 20 21 3d 20 49 6e       if (p != In
a030: 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72  tPtr.Zero) retur
a040: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  n UTF8ToString(p
a050: 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 65  , len);..      e
a060: 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  lse..      {..  
a070: 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
a080: 72 20 3d 20 73 74 6d 74 2e 54 79 70 65 44 65 66  r = stmt.TypeDef
a090: 69 6e 69 74 69 6f 6e 73 3b 0d 0a 20 20 20 20 20  initions;..     
a0a0: 20 20 20 69 66 20 28 61 72 20 21 3d 20 6e 75 6c     if (ar != nul
a0b0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
a0c0: 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e 64           if (ind
a0d0: 65 78 20 3c 20 61 72 2e 4c 65 6e 67 74 68 20 26  ex < ar.Length &
a0e0: 26 20 61 72 5b 69 6e 64 65 78 5d 20 21 3d 20 6e  & ar[index] != n
a0f0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
a100: 20 20 72 65 74 75 72 6e 20 61 72 5b 69 6e 64 65    return ar[inde
a110: 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  x];..        }..
a120: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
a130: 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a  tring.Empty;....
a140: 20 20 20 20 20 20 20 20 2f 2f 73 77 69 74 63 68          //switch
a150: 20 28 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20 20   (nAffinity)..  
a160: 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20        //{..     
a170: 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65     //  case Type
a180: 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d  Affinity.Int64:.
a190: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72  .        //    r
a1a0: 65 74 75 72 6e 20 22 42 49 47 49 4e 54 22 3b 0d  eturn "BIGINT";.
a1b0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73  .        //  cas
a1c0: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44  e TypeAffinity.D
a1d0: 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20  ouble:..        
a1e0: 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 44 4f  //    return "DO
a1f0: 55 42 4c 45 22 3b 0d 0a 20 20 20 20 20 20 20 20  UBLE";..        
a200: 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41 66 66  //  case TypeAff
a210: 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20  inity.Blob:..   
a220: 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72       //    retur
a230: 6e 20 22 42 4c 4f 42 22 3b 0d 0a 20 20 20 20 20  n "BLOB";..     
a240: 20 20 20 2f 2f 20 20 64 65 66 61 75 6c 74 3a 0d     //  default:.
a250: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72  .        //    r
a260: 65 74 75 72 6e 20 22 54 45 58 54 22 3b 0d 0a 20  eturn "TEXT";.. 
a270: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 20 20 20 20         //}..    
a280: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
a290: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
a2a0: 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 49 6e  ide int ColumnIn
a2b0: 64 65 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d  dex(SQLiteStatem
a2c0: 65 6e 74 20 73 74 6d 74 2c 20 73 74 72 69 6e 67  ent stmt, string
a2d0: 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 0d 0a 20 20   columnName)..  
a2e0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 78    {..      int x
a2f0: 20 3d 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73   = ColumnCount(s
a300: 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66  tmt);....      f
a310: 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e  or (int n = 0; n
a320: 20 3c 20 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20   < x; n++)..    
a330: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
a340: 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28  (String.Compare(
a350: 63 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 43 6f 6c 75  columnName, Colu
a360: 6d 6e 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 2c  mnName(stmt, n),
a370: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
a380: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
a390: 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20  ase) == 0)..    
a3a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d        return n;.
a3b0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
a3c0: 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20  return -1;..    
a3d0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
a3e0: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
a3f0: 67 20 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c  g ColumnOriginal
a400: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
a410: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
a420: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
a430: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
a440: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
a450: 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n;..      return
a460: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
a470: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a480: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
a490: 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74  _origin_name_int
a4a0: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
a4b0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
a4c0: 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ut len), len);..
a4d0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
a4e0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
a4f0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
a500: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
a510: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28  umn_origin_name(
a520: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
a530: 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  t, index), -1);.
a540: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
a550: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
a560: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
a570: 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d  olumnDatabaseNam
a580: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
a590: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
a5a0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
a5b0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
a5c0: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
a5d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
a5e0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
a5f0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a600: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
a610: 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69 6e 74 65  tabase_name_inte
a620: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
a630: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
a640: 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  t len), len);..#
a650: 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
a660: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
a670: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a680: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
a690: 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
a6a0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
a6b0: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b  mt, index), -1);
a6c0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
a6d0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
a6e0: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
a6f0: 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28  ColumnTableName(
a700: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
a710: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
a720: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
a730: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
a740: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20       int len;.. 
a750: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
a760: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
a770: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a780: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c  ite3_column_tabl
a790: 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  e_name_interop(s
a7a0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
a7b0: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e  , index, out len
a7c0: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
a7d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
a7e0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
a7f0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a800: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61  qlite3_column_ta
a810: 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73  ble_name(stmt._s
a820: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
a830: 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  x), -1);..#endif
a840: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
a850: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
a860: 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d 65 74 61   void ColumnMeta
a870: 44 61 74 61 28 73 74 72 69 6e 67 20 64 61 74 61  Data(string data
a880: 42 61 73 65 2c 20 73 74 72 69 6e 67 20 74 61 62  Base, string tab
a890: 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d  le, string colum
a8a0: 6e 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 64 61  n, out string da
a8b0: 74 61 54 79 70 65 2c 20 6f 75 74 20 73 74 72 69  taType, out stri
a8c0: 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e  ng collateSequen
a8d0: 63 65 2c 20 6f 75 74 20 62 6f 6f 6c 20 6e 6f 74  ce, out bool not
a8e0: 4e 75 6c 6c 2c 20 6f 75 74 20 62 6f 6f 6c 20 70  Null, out bool p
a8f0: 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20 62  rimaryKey, out b
a900: 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e  ool autoIncremen
a910: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
a920: 20 49 6e 74 50 74 72 20 64 61 74 61 54 79 70 65   IntPtr dataType
a930: 50 74 72 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50  Ptr;..      IntP
a940: 74 72 20 63 6f 6c 6c 53 65 71 50 74 72 3b 0d 0a  tr collSeqPtr;..
a950: 20 20 20 20 20 20 69 6e 74 20 6e 6e 6f 74 4e 75        int nnotNu
a960: 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  ll;..      int n
a970: 70 72 69 6d 61 72 79 4b 65 79 3b 0d 0a 20 20 20  primaryKey;..   
a980: 20 20 20 69 6e 74 20 6e 61 75 74 6f 49 6e 63 3b     int nautoInc;
a990: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
a9a0: 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20 20  rorCode n;..    
a9b0: 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d 0a 20 20    int dtLen;..  
a9c0: 20 20 20 20 69 6e 74 20 63 73 4c 65 6e 3b 0d 0a      int csLen;..
a9d0: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
a9e0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20  ANDARD..      n 
a9f0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
aa00: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61  thods.sqlite3_ta
aa10: 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64  ble_column_metad
aa20: 61 74 61 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  ata_interop(_sql
aa30: 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42 61 73  , ToUTF8(dataBas
aa40: 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65  e), ToUTF8(table
aa50: 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e  ), ToUTF8(column
aa60: 29 2c 20 6f 75 74 20 64 61 74 61 54 79 70 65 50  ), out dataTypeP
aa70: 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71 50  tr, out collSeqP
aa80: 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c 6c  tr, out nnotNull
aa90: 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72 79 4b 65  , out nprimaryKe
aaa0: 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e 63 2c  y, out nautoInc,
aab0: 20 6f 75 74 20 64 74 4c 65 6e 2c 20 6f 75 74 20   out dtLen, out 
aac0: 63 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  csLen);..#else..
aad0: 20 20 20 20 20 20 64 74 4c 65 6e 20 3d 20 2d 31        dtLen = -1
aae0: 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e 20 3d  ;..      csLen =
aaf0: 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 20   -1;....      n 
ab00: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
ab10: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61  thods.sqlite3_ta
ab20: 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64  ble_column_metad
ab30: 61 74 61 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  ata(_sql, ToUTF8
ab40: 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54  (dataBase), ToUT
ab50: 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46  F8(table), ToUTF
ab60: 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 64  8(column), out d
ab70: 61 74 61 54 79 70 65 50 74 72 2c 20 6f 75 74 20  ataTypePtr, out 
ab80: 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75 74 20  collSeqPtr, out 
ab90: 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e 70  nnotNull, out np
aba0: 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20 6e  rimaryKey, out n
abb0: 61 75 74 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64 69  autoInc);..#endi
abc0: 66 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  f..      if (n !
abd0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
abe0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
abf0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
ac00: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
ac10: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 64 61 74  ));....      dat
ac20: 61 54 79 70 65 20 3d 20 55 54 46 38 54 6f 53 74  aType = UTF8ToSt
ac30: 72 69 6e 67 28 64 61 74 61 54 79 70 65 50 74 72  ring(dataTypePtr
ac40: 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20 20 20 20 20  , dtLen);..     
ac50: 20 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65   collateSequence
ac60: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
ac70: 63 6f 6c 6c 53 65 71 50 74 72 2c 20 63 73 4c 65  collSeqPtr, csLe
ac80: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6f 74  n);....      not
ac90: 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75 6c 6c  Null = (nnotNull
aca0: 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 70   == 1);..      p
acb0: 72 69 6d 61 72 79 4b 65 79 20 3d 20 28 6e 70 72  rimaryKey = (npr
acc0: 69 6d 61 72 79 4b 65 79 20 3d 3d 20 31 29 3b 0d  imaryKey == 1);.
acd0: 0a 20 20 20 20 20 20 61 75 74 6f 49 6e 63 72 65  .      autoIncre
ace0: 6d 65 6e 74 20 3d 20 28 6e 61 75 74 6f 49 6e 63  ment = (nautoInc
acf0: 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a   == 1);..    }..
ad00: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ad10: 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47  verride double G
ad20: 65 74 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53  etDouble(SQLiteS
ad30: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
ad40: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
ad50: 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76  ..      double v
ad60: 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54  alue;..#if !PLAT
ad70: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
ad80: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c  EWORK..      val
ad90: 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ue = UnsafeNativ
ada0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
adb0: 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73  _column_double(s
adc0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
add0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 69 66  , index);..#elif
ade0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
adf0: 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  D..      UnsafeN
ae00: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
ae10: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
ae20: 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  le_interop(stmt.
ae30: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
ae40: 64 65 78 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b  dex, out value);
ae50: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
ae60: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
ae70: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
ae80: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
ae90: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b     return value;
aea0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
aeb0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
aec0: 20 73 62 79 74 65 20 47 65 74 53 42 79 74 65 28   sbyte GetSByte(
aed0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
aee0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
aef0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
af00: 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28  eturn unchecked(
af10: 28 73 62 79 74 65 29 28 47 65 74 49 6e 74 33 32  (sbyte)(GetInt32
af20: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20  (stmt, index) & 
af30: 62 79 74 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b  byte.MaxValue));
af40: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
af50: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
af60: 20 62 79 74 65 20 47 65 74 42 79 74 65 28 53 51   byte GetByte(SQ
af70: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
af80: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
af90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
afa0: 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 62  urn unchecked((b
afb0: 79 74 65 29 28 47 65 74 49 6e 74 33 32 28 73 74  yte)(GetInt32(st
afc0: 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 62 79 74  mt, index) & byt
afd0: 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20  e.MaxValue));.. 
afe0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
aff0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 68  rnal override sh
b000: 6f 72 74 20 47 65 74 49 6e 74 31 36 28 53 51 4c  ort GetInt16(SQL
b010: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
b020: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
b030: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
b040: 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 73 68  rn unchecked((sh
b050: 6f 72 74 29 28 47 65 74 49 6e 74 33 32 28 73 74  ort)(GetInt32(st
b060: 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 75 73 68  mt, index) & ush
b070: 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d  ort.MaxValue));.
b080: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
b090: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
b0a0: 75 73 68 6f 72 74 20 47 65 74 55 49 6e 74 31 36  ushort GetUInt16
b0b0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
b0c0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
b0d0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
b0e0: 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
b0f0: 28 28 75 73 68 6f 72 74 29 28 47 65 74 49 6e 74  ((ushort)(GetInt
b100: 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  32(stmt, index) 
b110: 26 20 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75  & ushort.MaxValu
b120: 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  e));..    }.... 
b130: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
b140: 72 69 64 65 20 69 6e 74 20 47 65 74 49 6e 74 33  ride int GetInt3
b150: 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  2(SQLiteStatemen
b160: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
b170: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
b180: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
b190: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b1a0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 73  te3_column_int(s
b1b0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
b1c0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d  , index);..    }
b1d0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
b1e0: 20 6f 76 65 72 72 69 64 65 20 75 69 6e 74 20 47   override uint G
b1f0: 65 74 55 49 6e 74 33 32 28 53 51 4c 69 74 65 53  etUInt32(SQLiteS
b200: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
b210: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
b220: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75  ..      return u
b230: 6e 63 68 65 63 6b 65 64 28 28 75 69 6e 74 29 47  nchecked((uint)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 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  dex));..    }...
b260: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b270: 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 49  erride long GetI
b280: 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65  nt64(SQLiteState
b290: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
b2a0: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
b2b0: 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 3b 0d      long value;.
b2c0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
b2d0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
b2e0: 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55  .      value = U
b2f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b300: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
b310: 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e 5f 73 71  n_int64(stmt._sq
b320: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
b330: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
b340: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
b350: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
b360: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
b370: 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74 65 72  lumn_int64_inter
b380: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
b390: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74  stmt, index, out
b3a0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
b3b0: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
b3c0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
b3d0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
b3e0: 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72  dif..      retur
b3f0: 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d  n value;..    }.
b400: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
b410: 6f 76 65 72 72 69 64 65 20 75 6c 6f 6e 67 20 47  override ulong G
b420: 65 74 55 49 6e 74 36 34 28 53 51 4c 69 74 65 53  etUInt64(SQLiteS
b430: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
b440: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
b450: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75  ..      return u
b460: 6e 63 68 65 63 6b 65 64 28 28 75 6c 6f 6e 67 29  nchecked((ulong)
b470: 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
b480: 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ndex));..    }..
b490: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
b4a0: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
b4b0: 65 74 54 65 78 74 28 53 51 4c 69 74 65 53 74 61  etText(SQLiteSta
b4c0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
b4d0: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
b4e0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
b4f0: 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
b500: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  len;..      retu
b510: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
b520: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
b530: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
b540: 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28  mn_text_interop(
b550: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
b560: 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65  t, index, out le
b570: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
b580: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
b590: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
b5a0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b5b0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
b5c0: 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ext(stmt._sqlite
b5d0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a  _stmt, index),..
b5e0: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
b5f0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b600: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
b610: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
b620: 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65  mt, index));..#e
b630: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
b640: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
b650: 72 69 64 65 20 44 61 74 65 54 69 6d 65 20 47 65  ride DateTime Ge
b660: 74 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65  tDateTime(SQLite
b670: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
b680: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
b690: 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 64 61  {..      if (_da
b6a0: 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20  tetimeFormat == 
b6b0: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
b6c0: 73 2e 54 69 63 6b 73 29 0d 0a 20 20 20 20 20 20  s.Ticks)..      
b6d0: 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54    return ToDateT
b6e0: 69 6d 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d  ime(GetInt64(stm
b6f0: 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65  t, index), _date
b700: 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20  timeKind);..    
b710: 20 20 65 6c 73 65 20 69 66 20 28 5f 64 61 74 65    else if (_date
b720: 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51  timeFormat == SQ
b730: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
b740: 4a 75 6c 69 61 6e 44 61 79 29 0d 0a 20 20 20 20  JulianDay)..    
b750: 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74      return ToDat
b760: 65 54 69 6d 65 28 47 65 74 44 6f 75 62 6c 65 28  eTime(GetDouble(
b770: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64  stmt, index), _d
b780: 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20  atetimeKind);.. 
b790: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64       else if (_d
b7a0: 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d  atetimeFormat ==
b7b0: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
b7c0: 74 73 2e 55 6e 69 78 45 70 6f 63 68 29 0d 0a 20  ts.UnixEpoch).. 
b7d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f         return To
b7e0: 44 61 74 65 54 69 6d 65 28 47 65 74 49 6e 74 33  DateTime(GetInt3
b7f0: 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  2(stmt, index), 
b800: 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d  _datetimeKind);.
b810: 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
b820: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
b830: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72  nt len;..      r
b840: 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65  eturn ToDateTime
b850: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
b860: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
b870: 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70  umn_text_interop
b880: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
b890: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c  mt, index, out l
b8a0: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
b8b0: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
b8c0: 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66  ToDateTime(Unsaf
b8d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b8e0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
b8f0: 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  xt(stmt._sqlite_
b900: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20  stmt, index),.. 
b910: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
b920: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b930: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28  e3_column_bytes(
b940: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
b950: 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e  t, index));..#en
b960: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
b970: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
b980: 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65  ide long GetByte
b990: 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  s(SQLiteStatemen
b9a0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
b9b0: 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73  x, int nDataOffs
b9c0: 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74  et, byte[] bDest
b9d0: 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e  , int nStart, in
b9e0: 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20  t nLength)..    
b9f0: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65  {..      int nle
ba00: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
ba10: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
ba20: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d  column_bytes(stm
ba30: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
ba40: 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  index);....     
ba50: 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e   // If no destin
ba60: 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65  ation buffer, re
ba70: 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65  turn the size ne
ba80: 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20  eded...      if 
ba90: 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20  (bDest == null) 
baa0: 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a  return nlen;....
bab0: 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65        int nCopie
bac0: 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  d = nLength;....
bad0: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
bae0: 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65  d + nStart > bDe
baf0: 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69  st.Length) nCopi
bb00: 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74  ed = bDest.Lengt
bb10: 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20  h - nStart;..   
bb20: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
bb30: 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e   nDataOffset > n
bb40: 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e  len) nCopied = n
bb50: 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65  len - nDataOffse
bb60: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  t;....      if (
bb70: 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20  nCopied > 0)..  
bb80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
bb90: 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61  ntPtr ptr = Unsa
bba0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
bbb0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
bbc0: 6c 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  lob(stmt._sqlite
bbd0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
bbe0: 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68 61  ..        Marsha
bbf0: 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28  l.Copy((IntPtr)(
bc00: 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20  ptr.ToInt64() + 
bc10: 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44  nDataOffset), bD
bc20: 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f  est, nStart, nCo
bc30: 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  pied);..      }.
bc40: 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20  .      else..   
bc50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43     {..        nC
bc60: 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20  opied = 0;..    
bc70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
bc80: 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20  urn nCopied;..  
bc90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
bca0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
bcb0: 67 20 47 65 74 43 68 61 72 73 28 53 51 4c 69 74  g GetChars(SQLit
bcc0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
bcd0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20   int index, int 
bce0: 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 63 68 61  nDataOffset, cha
bcf0: 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  r[] bDest, int n
bd00: 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
bd10: 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
bd20: 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20    int nlen;..   
bd30: 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d     int nCopied =
bd40: 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20   nLength;....   
bd50: 20 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d 20     string str = 
bd60: 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
bd70: 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e 6c 65  dex);..      nle
bd80: 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68 3b 0d  n = str.Length;.
bd90: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65  ...      if (bDe
bda0: 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75  st == null) retu
bdb0: 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20  rn nlen;....    
bdc0: 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20    if (nCopied + 
bdd0: 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c  nStart > bDest.L
bde0: 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d  ength) nCopied =
bdf0: 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20   bDest.Length - 
be00: 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69  nStart;..      i
be10: 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61  f (nCopied + nDa
be20: 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29  taOffset > nlen)
be30: 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20   nCopied = nlen 
be40: 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a  - nDataOffset;..
be50: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
be60: 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  ied > 0)..      
be70: 20 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e 44 61    str.CopyTo(nDa
be80: 74 61 4f 66 66 73 65 74 2c 20 62 44 65 73 74 2c  taOffset, bDest,
be90: 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64   nStart, nCopied
bea0: 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 6e  );..      else n
beb0: 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a 20  Copied = 0;.... 
bec0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70       return nCop
bed0: 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ied;..    }.... 
bee0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
bef0: 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c  ride bool IsNull
bf00: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
bf10: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
bf20: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
bf30: 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e 41 66  return (ColumnAf
bf40: 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64  finity(stmt, ind
bf50: 65 78 29 20 3d 3d 20 54 79 70 65 41 66 66 69 6e  ex) == TypeAffin
bf60: 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20 20  ity.Null);..    
bf70: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
bf80: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 41  l override int A
bf90: 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28 49 6e  ggregateCount(In
bfa0: 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20  tPtr context).. 
bfb0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
bfc0: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
bfd0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61  ethods.sqlite3_a
bfe0: 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74 28 63  ggregate_count(c
bff0: 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d  ontext);..    }.
c000: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
c010: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 72  override void Cr
c020: 65 61 74 65 46 75 6e 63 74 69 6f 6e 28 73 74 72  eateFunction(str
c030: 69 6e 67 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c  ing strFunction,
c040: 20 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f 6f 6c   int nArgs, bool
c050: 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20 53 51   needCollSeq, SQ
c060: 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e  LiteCallback fun
c070: 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63  c, SQLiteCallbac
c080: 6b 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c 69  k funcstep, SQLi
c090: 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 20  teFinalCallback 
c0a0: 66 75 6e 63 66 69 6e 61 6c 29 0d 0a 20 20 20 20  funcfinal)..    
c0b0: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
c0c0: 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23  rrorCode n;....#
c0d0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
c0e0: 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  ARD..      n = U
c0f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
c100: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
c110: 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72  e_function_inter
c120: 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  op(_sql, ToUTF8(
c130: 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41  strFunction), nA
c140: 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a  rgs, 4, IntPtr.Z
c150: 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ero, func, funcs
c160: 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20  tep, funcfinal, 
c170: 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20  (needCollSeq == 
c180: 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d  true) ? 1 : 0);.
c190: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20  .      if (n == 
c1a0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
c1b0: 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  Ok) n = UnsafeNa
c1c0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
c1d0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
c1e0: 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  ion_interop(_sql
c1f0: 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63  , ToUTF8(strFunc
c200: 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c  tion), nArgs, 1,
c210: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
c220: 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75  nc, funcstep, fu
c230: 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f  ncfinal, (needCo
c240: 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f  llSeq == true) ?
c250: 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c 73 65 0d   1 : 0);..#else.
c260: 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
c270: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c280: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
c290: 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55  nction(_sql, ToU
c2a0: 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29  TF8(strFunction)
c2b0: 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50  , nArgs, 4, IntP
c2c0: 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66  tr.Zero, func, f
c2d0: 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
c2e0: 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  al);..      if (
c2f0: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
c300: 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73  Code.Ok) n = Uns
c310: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c320: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
c330: 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54  function(_sql, T
c340: 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f  oUTF8(strFunctio
c350: 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e  n), nArgs, 1, In
c360: 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c  tPtr.Zero, func,
c370: 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66   funcstep, funcf
c380: 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  inal);..#endif..
c390: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
c3a0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
c3b0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
c3c0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
c3d0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
c3e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
c3f0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
c400: 20 76 6f 69 64 20 43 72 65 61 74 65 43 6f 6c 6c   void CreateColl
c410: 61 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72  ation(string str
c420: 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c 69 74  Collation, SQLit
c430: 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 2c  eCollation func,
c440: 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e   SQLiteCollation
c450: 20 66 75 6e 63 31 36 29 0d 0a 20 20 20 20 7b 0d   func16)..    {.
c460: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
c470: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
c480: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c490: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
c4a0: 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f  llation(_sql, To
c4b0: 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f  UTF8(strCollatio
c4c0: 6e 29 2c 20 32 2c 20 49 6e 74 50 74 72 2e 5a 65  n), 2, IntPtr.Ze
c4d0: 72 6f 2c 20 66 75 6e 63 31 36 29 3b 0d 0a 20 20  ro, func16);..  
c4e0: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
c4f0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
c500: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
c510: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c520: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
c530: 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  n(_sql, ToUTF8(s
c540: 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 31 2c  trCollation), 1,
c550: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
c560: 6e 63 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  nc);..      if (
c570: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
c580: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
c590: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
c5a0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
c5b0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
c5c0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
c5d0: 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65  erride int Conte
c5e0: 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65  xtCollateCompare
c5f0: 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69  (CollationEncodi
c600: 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50  ngEnum enc, IntP
c610: 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69  tr context, stri
c620: 6e 67 20 73 31 2c 20 73 74 72 69 6e 67 20 73 32  ng s1, string s2
c630: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
c640: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
c650: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b        byte[] b1;
c660: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
c670: 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d  2;..      System
c680: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63  .Text.Encoding c
c690: 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b  onverter = null;
c6a0: 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68  ....      switch
c6b0: 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d   (enc)..      {.
c6c0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
c6d0: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
c6e0: 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20  num.UTF8:..     
c6f0: 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
c700: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
c710: 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20  oding.UTF8;..   
c720: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
c730: 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
c740: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
c750: 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20  m.UTF16LE:..    
c760: 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
c770: 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
c780: 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d  coding.Unicode;.
c790: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
c7a0: 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
c7b0: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
c7c0: 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a  gEnum.UTF16BE:..
c7d0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
c7e0: 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
c7f0: 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e  t.Encoding.BigEn
c800: 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20  dianUnicode;..  
c810: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
c820: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
c830: 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e   b1 = converter.
c840: 47 65 74 42 79 74 65 73 28 73 31 29 3b 0d 0a 20  GetBytes(s1);.. 
c850: 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72       b2 = conver
c860: 74 65 72 2e 47 65 74 42 79 74 65 73 28 73 32 29  ter.GetBytes(s2)
c870: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
c880: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
c890: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
c8a0: 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72  ntext_collcompar
c8b0: 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78  e_interop(contex
c8c0: 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68  t, b1, b1.Length
c8d0: 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29  , b2, b2.Length)
c8e0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
c8f0: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
c900: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
c910: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
c920: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
c930: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
c940: 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43   ContextCollateC
c950: 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e  ompare(Collation
c960: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63  EncodingEnum enc
c970: 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  , IntPtr context
c980: 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20 63 68 61  , char[] c1, cha
c990: 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d 0a  r[] c2)..    {..
c9a0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
c9b0: 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65  DARD..      byte
c9c0: 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79  [] b1;..      by
c9d0: 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20  te[] b2;..      
c9e0: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
c9f0: 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d  ding converter =
ca00: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
ca10: 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20  switch (enc)..  
ca20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63      {..        c
ca30: 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
ca40: 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d  odingEnum.UTF8:.
ca50: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
ca60: 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
ca70: 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38  xt.Encoding.UTF8
ca80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
ca90: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
caa0: 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
cab0: 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a  ingEnum.UTF16LE:
cac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
cad0: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
cae0: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69  ext.Encoding.Uni
caf0: 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
cb00: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
cb10: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
cb20: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31  ncodingEnum.UTF1
cb30: 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  6BE:..          
cb40: 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
cb50: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
cb60: 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64  .BigEndianUnicod
cb70: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  e;..          br
cb80: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  eak;..      }...
cb90: 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76  .      b1 = conv
cba0: 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 63  erter.GetBytes(c
cbb0: 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20  1);..      b2 = 
cbc0: 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  converter.GetByt
cbd0: 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20 20 20  es(c2);....     
cbe0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
cbf0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
cc00: 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c  te3_context_coll
cc10: 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  compare_interop(
cc20: 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e  context, b1, b1.
cc30: 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c  Length, b2, b2.L
cc40: 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ength);..#else..
cc50: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
cc60: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
cc70: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
cc80: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
cc90: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
cca0: 64 65 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  de CollationSequ
ccb0: 65 6e 63 65 20 47 65 74 43 6f 6c 6c 61 74 69 6f  ence GetCollatio
ccc0: 6e 53 65 71 75 65 6e 63 65 28 53 51 4c 69 74 65  nSequence(SQLite
ccd0: 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 2c 20 49  Function func, I
cce0: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a  ntPtr context)..
ccf0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
cd00: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
cd10: 20 20 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75     CollationSequ
cd20: 65 6e 63 65 20 73 65 71 20 3d 20 6e 65 77 20 43  ence seq = new C
cd30: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
cd40: 28 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ();..      int l
cd50: 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 74  en;..      int t
cd60: 79 70 65 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ype;..      int 
cd70: 65 6e 63 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50  enc;..      IntP
cd80: 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  tr p = UnsafeNat
cd90: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
cda0: 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 73  e3_context_colls
cdb0: 65 71 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65  eq_interop(conte
cdc0: 78 74 2c 20 6f 75 74 20 74 79 70 65 2c 20 6f 75  xt, out type, ou
cdd0: 74 20 65 6e 63 2c 20 6f 75 74 20 6c 65 6e 29 3b  t enc, out len);
cde0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20  ....      if (p 
cdf0: 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e 61 6d  != null) seq.Nam
ce00: 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
ce10: 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20  (p, len);..     
ce20: 20 73 65 71 2e 54 79 70 65 20 3d 20 28 43 6f 6c   seq.Type = (Col
ce30: 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d 29 74  lationTypeEnum)t
ce40: 79 70 65 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e  ype;..      seq.
ce50: 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a 20  _func = func;.. 
ce60: 20 20 20 20 20 73 65 71 2e 45 6e 63 6f 64 69 6e       seq.Encodin
ce70: 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e  g = (CollationEn
ce80: 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d  codingEnum)enc;.
ce90: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
cea0: 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  seq;..#else..   
ceb0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
cec0: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
ced0: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
cee0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
cef0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
cf00: 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c  long GetParamVal
cf10: 75 65 42 79 74 65 73 28 49 6e 74 50 74 72 20 70  ueBytes(IntPtr p
cf20: 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65  , int nDataOffse
cf30: 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c  t, byte[] bDest,
cf40: 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74   int nStart, int
cf50: 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b   nLength)..    {
cf60: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e  ..      int nlen
cf70: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
cf80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
cf90: 61 6c 75 65 5f 62 79 74 65 73 28 70 29 3b 0d 0a  alue_bytes(p);..
cfa0: 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f  ..      // If no
cfb0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66   destination buf
cfc0: 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20  fer, return the 
cfd0: 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20  size needed...  
cfe0: 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d      if (bDest ==
cff0: 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c   null) return nl
d000: 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74  en;....      int
d010: 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67   nCopied = nLeng
d020: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  th;....      if 
d030: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72  (nCopied + nStar
d040: 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  t > bDest.Length
d050: 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73  ) nCopied = bDes
d060: 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72  t.Length - nStar
d070: 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  t;..      if (nC
d080: 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66  opied + nDataOff
d090: 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70  set > nlen) nCop
d0a0: 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61  ied = nlen - nDa
d0b0: 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20  taOffset;....   
d0c0: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e     if (nCopied >
d0d0: 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20   0)..      {..  
d0e0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72        IntPtr ptr
d0f0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
d100: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
d110: 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d  alue_blob(p);...
d120: 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c  .        Marshal
d130: 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70  .Copy((IntPtr)(p
d140: 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e  tr.ToInt64() + n
d150: 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65  DataOffset), bDe
d160: 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70  st, nStart, nCop
d170: 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  ied);..      }..
d180: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
d190: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f    {..        nCo
d1a0: 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  pied = 0;..     
d1b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
d1c0: 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20  rn nCopied;..   
d1d0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
d1e0: 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62  al override doub
d1f0: 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  le GetParamValue
d200: 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 70 74  Double(IntPtr pt
d210: 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  r)..    {..     
d220: 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a   double value;..
d230: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
d240: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
d250: 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e        value = Un
d260: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d270: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
d280: 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a 23 65  double(ptr);..#e
d290: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
d2a0: 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61  DARD..      Unsa
d2b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
d2c0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f  sqlite3_value_do
d2d0: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70 74 72  uble_interop(ptr
d2e0: 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23  , out value);..#
d2f0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
d300: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
d310: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
d320: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
d330: 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20  return value;.. 
d340: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d350: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
d360: 74 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49  t GetParamValueI
d370: 6e 74 33 32 28 49 6e 74 50 74 72 20 70 74 72 29  nt32(IntPtr ptr)
d380: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
d390: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
d3a0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d3b0: 33 5f 76 61 6c 75 65 5f 69 6e 74 28 70 74 72 29  3_value_int(ptr)
d3c0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
d3d0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
d3e0: 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56  e long GetParamV
d3f0: 61 6c 75 65 49 6e 74 36 34 28 49 6e 74 50 74 72  alueInt64(IntPtr
d400: 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   ptr)..    {..  
d410: 20 20 20 20 49 6e 74 36 34 20 76 61 6c 75 65 3b      Int64 value;
d420: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
d430: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
d440: 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
d450: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d460: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
d470: 65 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d 0a 23  e_int64(ptr);..#
d480: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
d490: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73  NDARD..      Uns
d4a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d4b0: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69  .sqlite3_value_i
d4c0: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 70 74 72  nt64_interop(ptr
d4d0: 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23  , out value);..#
d4e0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
d4f0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
d500: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
d510: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
d520: 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20  return value;.. 
d530: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d540: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
d550: 72 69 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c  ring GetParamVal
d560: 75 65 54 65 78 74 28 49 6e 74 50 74 72 20 70 74  ueText(IntPtr pt
d570: 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  r)..    {..#if !
d580: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
d590: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
d5a0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
d5b0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
d5c0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
d5d0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
d5e0: 74 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f  t_interop(ptr, o
d5f0: 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ut len), len);..
d600: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
d610: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
d620: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
d630: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
d640: 75 65 5f 74 65 78 74 28 70 74 72 29 2c 0d 0a 20  ue_text(ptr),.. 
d650: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
d660: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d670: 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70  e3_value_bytes(p
d680: 74 72 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  tr));..#endif.. 
d690: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d6a0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54 79  rnal override Ty
d6b0: 70 65 41 66 66 69 6e 69 74 79 20 47 65 74 50 61  peAffinity GetPa
d6c0: 72 61 6d 56 61 6c 75 65 54 79 70 65 28 49 6e 74  ramValueType(Int
d6d0: 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
d6e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
d6f0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d700: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
d710: 74 79 70 65 28 70 74 72 29 3b 0d 0a 20 20 20 20  type(ptr);..    
d720: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
d730: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
d740: 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e 74 50 74  ReturnBlob(IntPt
d750: 72 20 63 6f 6e 74 65 78 74 2c 20 62 79 74 65 5b  r context, byte[
d760: 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  ] value)..    {.
d770: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
d780: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d790: 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 63  e3_result_blob(c
d7a0: 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 2c 20 76  ontext, value, v
d7b0: 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20 28 49 6e  alue.Length, (In
d7c0: 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20  tPtr)(-1));..   
d7d0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
d7e0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
d7f0: 20 52 65 74 75 72 6e 44 6f 75 62 6c 65 28 49 6e   ReturnDouble(In
d800: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 64 6f  tPtr context, do
d810: 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  uble value)..   
d820: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
d830: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
d840: 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RK..      Unsafe
d850: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d860: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
d870: 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c  ble(context, val
d880: 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
d890: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
d8a0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
d8b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
d8c0: 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e  result_double_in
d8d0: 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72  terop(context, r
d8e0: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
d8f0: 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
d900: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
d910: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
d920: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
d930: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d940: 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
d950: 6e 45 72 72 6f 72 28 49 6e 74 50 74 72 20 63 6f  nError(IntPtr co
d960: 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61  ntext, string va
d970: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
d980: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
d990: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
d9a0: 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74  esult_error(cont
d9b0: 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75  ext, ToUTF8(valu
d9c0: 65 29 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68  e), value.Length
d9d0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
d9e0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
d9f0: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e  de void ReturnIn
da00: 74 33 32 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  t32(IntPtr conte
da10: 78 74 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a  xt, int value)..
da20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
da30: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
da40: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
da50: 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c  int(context, val
da60: 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ue);..    }.... 
da70: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
da80: 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
da90: 49 6e 74 36 34 28 49 6e 74 50 74 72 20 63 6f 6e  Int64(IntPtr con
daa0: 74 65 78 74 2c 20 6c 6f 6e 67 20 76 61 6c 75 65  text, long value
dab0: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50  )..    {..#if !P
dac0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
dad0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
dae0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
daf0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
db00: 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74  lt_int64(context
db10: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66  , value);..#elif
db20: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
db30: 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  D..      UnsafeN
db40: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
db50: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36  ite3_result_int6
db60: 34 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78  4_interop(contex
db70: 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  t, ref value);..
db80: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
db90: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
dba0: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
dbb0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
dbc0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
dbd0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
dbe0: 65 74 75 72 6e 4e 75 6c 6c 28 49 6e 74 50 74 72  eturnNull(IntPtr
dbf0: 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b   context)..    {
dc00: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
dc10: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
dc20: 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28  te3_result_null(
dc30: 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d  context);..    }
dc40: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
dc50: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
dc60: 65 74 75 72 6e 54 65 78 74 28 49 6e 74 50 74 72  eturnText(IntPtr
dc70: 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67   context, string
dc80: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
dc90: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d        byte[] b =
dca0: 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d   ToUTF8(value);.
dcb0: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
dcc0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
dcd0: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63  e3_result_text(c
dce0: 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76  ontext, ToUTF8(v
dcf0: 61 6c 75 65 29 2c 20 62 2e 4c 65 6e 67 74 68 20  alue), b.Length 
dd00: 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31  - 1, (IntPtr)(-1
dd10: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69  ));..    }....#i
dd20: 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  f INTEROP_VIRTUA
dd30: 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f  L_TABLE..    ///
dd40: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
dd50: 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61  /// Calls the na
dd60: 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65  tive SQLite core
dd70: 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65   library in orde
dd80: 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 64 69  r to create a di
dd90: 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 2f 2f  sposable..    //
dda0: 2f 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e  / module contain
ddb0: 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  ing the implemen
ddc0: 74 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72 74  tation of a virt
ddd0: 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
dde0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
ddf0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
de00: 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20  ame="module">.. 
de10: 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c     /// The modul
de20: 65 20 6f 62 6a 65 63 74 20 74 6f 20 62 65 20 75  e object to be u
de30: 73 65 64 20 77 68 65 6e 20 63 72 65 61 74 69 6e  sed when creatin
de40: 67 20 74 68 65 20 6e 61 74 69 76 65 20 64 69 73  g the native dis
de50: 70 6f 73 61 62 6c 65 20 6d 6f 64 75 6c 65 2e 0d  posable module..
de60: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
de70: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
de80: 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d  m name="flags">.
de90: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61  .    /// The fla
dea0: 67 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63  gs for the assoc
deb0: 69 61 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d  iated <see cref=
dec0: 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  "SQLiteConnectio
ded0: 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  n" /> object ins
dee0: 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  tance...    /// 
def0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
df00: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
df10: 76 6f 69 64 20 43 72 65 61 74 65 4d 6f 64 75 6c  void CreateModul
df20: 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d  e(SQLiteModule m
df30: 6f 64 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e  odule, SQLiteCon
df40: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
df50: 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  gs)..    {..    
df60: 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
df70: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
df80: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
df90: 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
dfa0: 74 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d  tion("module");.
dfb0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
dfc0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
dfd0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
dfe0: 4c 6f 67 4d 6f 64 75 6c 65 29 20 21 3d 20 53 51  LogModule) != SQ
dff0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
e000: 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 29  ags.NoLogModule)
e010: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
e020: 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
e030: 4c 6f 67 45 72 72 6f 72 73 20 3d 20 28 28 66 6c  LogErrors = ((fl
e040: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
e050: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d  ectionFlags.LogM
e060: 6f 64 75 6c 65 45 72 72 6f 72 29 20 3d 3d 20 53  oduleError) == S
e070: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
e080: 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 72  lags.LogModuleEr
e090: 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
e0a0: 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 78 63     module.LogExc
e0b0: 65 70 74 69 6f 6e 73 20 3d 20 28 28 66 6c 61 67  eptions = ((flag
e0c0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
e0d0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64  tionFlags.LogMod
e0e0: 75 6c 65 45 78 63 65 70 74 69 6f 6e 29 20 3d 3d  uleException) ==
e0f0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
e100: 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65  nFlags.LogModule
e110: 45 78 63 65 70 74 69 6f 6e 29 3b 0d 0a 20 20 20  Exception);..   
e120: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
e130: 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75    if (_sql == nu
e140: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
e150: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
e160: 65 45 78 63 65 70 74 69 6f 6e 28 22 63 6f 6e 6e  eException("conn
e170: 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e  ection has an in
e180: 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 29 3b 0d  valid handle");.
e190: 0a 0d 0a 20 20 20 20 20 20 20 20 53 65 74 4c 6f  ...        SetLo
e1a0: 61 64 45 78 74 65 6e 73 69 6f 6e 28 74 72 75 65  adExtension(true
e1b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 4c 6f 61 64  );..        Load
e1c0: 45 78 74 65 6e 73 69 6f 6e 28 55 6e 73 61 66 65  Extension(Unsafe
e1d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53 51  NativeMethods.SQ
e1e0: 4c 49 54 45 5f 44 4c 4c 2c 20 22 73 71 6c 69 74  LITE_DLL, "sqlit
e1f0: 65 33 5f 76 74 73 68 69 6d 5f 69 6e 69 74 22 29  e3_vtshim_init")
e200: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
e210: 50 74 72 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50  Ptr pName = IntP
e220: 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
e230: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
e240: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e250: 70 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53 74  pName = SQLiteSt
e260: 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46  ring.Utf8IntPtrF
e270: 72 6f 6d 53 74 72 69 6e 67 28 6d 6f 64 75 6c 65  romString(module
e280: 2e 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  .Name);....     
e290: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
e2a0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
e2b0: 65 33 5f 6d 6f 64 75 6c 65 20 6e 61 74 69 76 65  e3_module native
e2c0: 4d 6f 64 75 6c 65 20 3d 0d 0a 20 20 20 20 20 20  Module =..      
e2d0: 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
e2e0: 2e 43 72 65 61 74 65 4e 61 74 69 76 65 4d 6f 64  .CreateNativeMod
e2f0: 75 6c 65 28 29 3b 0d 0a 0d 0a 23 69 66 20 21 50  ule();....#if !P
e300: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
e310: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
e320: 20 20 20 20 20 20 69 66 20 28 55 6e 73 61 66 65        if (Unsafe
e330: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e340: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 64 69 73  lite3_create_dis
e350: 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 28 0d  posable_module(.
e360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e370: 20 20 20 20 20 5f 73 71 6c 2c 20 70 4e 61 6d 65       _sql, pName
e380: 2c 20 72 65 66 20 6e 61 74 69 76 65 4d 6f 64 75  , ref nativeModu
e390: 6c 65 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c  le, IntPtr.Zero,
e3a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e3b0: 20 20 20 20 20 20 6e 75 6c 6c 29 20 21 3d 20 49        null) != I
e3c0: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 23 65 6c  ntPtr.Zero)..#el
e3d0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
e3e0: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ARD..           
e3f0: 20 69 66 20 28 55 6e 73 61 66 65 4e 61 74 69 76   if (UnsafeNativ
e400: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
e410: 5f 63 72 65 61 74 65 5f 64 69 73 70 6f 73 61 62  _create_disposab
e420: 6c 65 5f 6d 6f 64 75 6c 65 5f 69 6e 74 65 72 6f  le_module_intero
e430: 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p(..            
e440: 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70 4e          _sql, pN
e450: 61 6d 65 2c 20 6d 6f 64 75 6c 65 2e 43 72 65 61  ame, module.Crea
e460: 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 49 6e  teNativeModuleIn
e470: 74 65 72 6f 70 28 29 2c 0d 0a 20 20 20 20 20 20  terop(),..      
e480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
e490: 74 69 76 65 4d 6f 64 75 6c 65 2e 69 56 65 72 73  tiveModule.iVers
e4a0: 69 6f 6e 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c  ion, nativeModul
e4b0: 65 2e 78 43 72 65 61 74 65 2c 0d 0a 20 20 20 20  e.xCreate,..    
e4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4d0: 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  nativeModule.xCo
e4e0: 6e 6e 65 63 74 2c 20 6e 61 74 69 76 65 4d 6f 64  nnect, nativeMod
e4f0: 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 2c 0d  ule.xBestIndex,.
e500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e510: 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
e520: 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 2c 20 6e  e.xDisconnect, n
e530: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73  ativeModule.xDes
e540: 74 72 6f 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  troy,..         
e550: 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
e560: 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 2c 20 6e  eModule.xOpen, n
e570: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f  ativeModule.xClo
e580: 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
e590: 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
e5a0: 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 2c 20 6e  odule.xFilter, n
e5b0: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65 78  ativeModule.xNex
e5c0: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
e5d0: 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
e5e0: 64 75 6c 65 2e 78 45 6f 66 2c 20 6e 61 74 69 76  dule.xEof, nativ
e5f0: 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 2c  eModule.xColumn,
e600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e610: 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
e620: 6c 65 2e 78 52 6f 77 49 64 2c 20 6e 61 74 69 76  le.xRowId, nativ
e630: 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 2c  eModule.xUpdate,
e640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e650: 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
e660: 6c 65 2e 78 42 65 67 69 6e 2c 20 6e 61 74 69 76  le.xBegin, nativ
e670: 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 2c 0d 0a  eModule.xSync,..
e680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e690: 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
e6a0: 2e 78 43 6f 6d 6d 69 74 2c 20 6e 61 74 69 76 65  .xCommit, native
e6b0: 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b  Module.xRollback
e6c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e6d0: 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
e6e0: 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f  ule.xFindFunctio
e6f0: 6e 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  n, nativeModule.
e700: 78 52 65 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  xRename,..      
e710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
e720: 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65  tiveModule.xSave
e730: 70 6f 69 6e 74 2c 20 6e 61 74 69 76 65 4d 6f 64  point, nativeMod
e740: 75 6c 65 2e 78 52 65 6c 65 61 73 65 2c 0d 0a 20  ule.xRelease,.. 
e750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e760: 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
e770: 78 52 6f 6c 6c 62 61 63 6b 54 6f 2c 20 49 6e 74  xRollbackTo, Int
e780: 50 74 72 2e 5a 65 72 6f 2c 20 6e 75 6c 6c 29 20  Ptr.Zero, null) 
e790: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
e7a0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
e7b0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
e7c0: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
e7d0: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
e7e0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
e7f0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
e800: 20 7c 7c 20 21 53 51 4c 49 54 45 5f 53 54 41 4e   || !SQLITE_STAN
e810: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
e820: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e830: 20 20 20 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65       if (_module
e840: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
e850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e860: 5f 6d 6f 64 75 6c 65 73 20 3d 20 6e 65 77 20 44  _modules = new D
e870: 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67  ictionary<string
e880: 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 28  , SQLiteModule>(
e890: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
e8a0: 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73 2e 41        _modules.A
e8b0: 64 64 28 6d 6f 64 75 6c 65 2e 4e 61 6d 65 2c 20  dd(module.Name, 
e8c0: 6d 6f 64 75 6c 65 29 3b 0d 0a 20 20 20 20 20 20  module);..      
e8d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
e8e0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
e8f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e900: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
e910: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
e920: 69 6f 6e 28 47 65 74 4c 61 73 74 45 72 72 6f 72  ion(GetLastError
e930: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
e940: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20    }..#endif..   
e950: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e960: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
e970: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e980: 69 66 20 28 70 4e 61 6d 65 20 21 3d 20 49 6e 74  if (pName != Int
e990: 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
e9a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e9b0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
e9c0: 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 4e 61 6d  Memory.Free(pNam
e9d0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
e9e0: 20 20 20 20 20 70 4e 61 6d 65 20 3d 20 49 6e 74       pName = Int
e9f0: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
ea00: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ea10: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
ea20: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
ea30: 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74  .    /// Calls t
ea40: 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65  he native SQLite
ea50: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e   core library in
ea60: 20 6f 72 64 65 72 20 74 6f 20 63 6c 65 61 6e 75   order to cleanu
ea70: 70 20 74 68 65 20 72 65 73 6f 75 72 63 65 73 0d  p the resources.
ea80: 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61  .    /// associa
ea90: 74 65 64 20 77 69 74 68 20 61 20 6d 6f 64 75 6c  ted with a modul
eaa0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
eab0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
eac0: 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
ead0: 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  le...    /// </s
eae0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
eaf0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f   <param name="mo
eb00: 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  dule">..    /// 
eb10: 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63  The module objec
eb20: 74 20 70 72 65 76 69 6f 75 73 6c 79 20 70 61 73  t previously pas
eb30: 73 65 64 20 74 6f 20 74 68 65 20 3c 73 65 65 20  sed to the <see 
eb40: 63 72 65 66 3d 22 43 72 65 61 74 65 4d 6f 64 75  cref="CreateModu
eb50: 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20  le" />..    /// 
eb60: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f  method...    ///
eb70: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
eb80: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
eb90: 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f  flags">..    ///
eba0: 20 54 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74   The flags for t
ebb0: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 3c 73  he associated <s
ebc0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
ebd0: 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62  onnection" /> ob
ebe0: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
ebf0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
ec00: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ec10: 76 65 72 72 69 64 65 20 76 6f 69 64 20 44 69 73  verride void Dis
ec20: 70 6f 73 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74  poseModule(SQLit
ec30: 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 20  eModule module, 
ec40: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
ec50: 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20  Flags flags)..  
ec60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
ec70: 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (module == null)
ec80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
ec90: 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
eca0: 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 6d  NullException("m
ecb0: 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  odule");....    
ecc0: 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f      module.Dispo
ecd0: 73 65 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65  se();..    }..#e
ece0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ndif....    inte
ecf0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 49 6e  rnal override In
ed00: 74 50 74 72 20 41 67 67 72 65 67 61 74 65 43 6f  tPtr AggregateCo
ed10: 6e 74 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e  ntext(IntPtr con
ed20: 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  text)..    {..  
ed30: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
ed40: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
ed50: 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65  qlite3_aggregate
ed60: 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74  _context(context
ed70: 2c 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  , 1);..    }....
ed80: 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54  #if INTEROP_VIRT
ed90: 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f  UAL_TABLE..    /
eda0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
edb0: 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20    /// Calls the 
edc0: 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f  native SQLite co
edd0: 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72  re library in or
ede0: 64 65 72 20 74 6f 20 64 65 63 6c 61 72 65 20 61  der to declare a
edf0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
ee00: 20 20 20 20 2f 2f 2f 20 69 6e 20 72 65 73 70 6f      /// in respo
ee10: 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e  nse to a call in
ee20: 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  to the <see cref
ee30: 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
ee40: 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f  odule.xCreate" /
ee50: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73  >..    /// or <s
ee60: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
ee70: 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
ee80: 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72 74 75 61  nnect" /> virtua
ee90: 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e  l table methods.
eea0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
eeb0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
eec0: 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c  aram name="modul
eed0: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
eee0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d   virtual table m
eef0: 6f 64 75 6c 65 20 74 68 61 74 20 69 73 20 74 6f  odule that is to
ef00: 20 62 65 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   be responsible 
ef10: 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  for the virtual 
ef20: 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 62  table..    /// b
ef30: 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a  eing declared...
ef40: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
ef50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
ef60: 20 6e 61 6d 65 3d 22 73 74 72 53 71 6c 22 3e 0d   name="strSql">.
ef70: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 74 72  .    /// The str
ef80: 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
ef90: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
efa0: 20 64 65 73 63 72 69 62 69 6e 67 20 74 68 65 20   describing the 
efb0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74 6f  virtual table to
efc0: 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20 64 65 63  ..    /// be dec
efd0: 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lared...    /// 
efe0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
eff0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65  / <param name="e
f000: 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  rror">..    /// 
f010: 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68  Upon success, th
f020: 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  e contents of th
f030: 69 73 20 70 61 72 61 6d 65 74 65 72 20 61 72 65  is parameter are
f040: 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 55 70 6f   undefined.  Upo
f050: 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20 20  n failure,..    
f060: 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20 63 6f  /// it should co
f070: 6e 74 61 69 6e 20 61 6e 20 61 70 70 72 6f 70 72  ntain an appropr
f080: 69 61 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61  iate error messa
f090: 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ge...    /// </p
f0a0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
f0b0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
f0c0: 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
f0d0: 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
f0e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
f0f0: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
f100: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
f110: 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65 63 6c  teErrorCode Decl
f120: 61 72 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28  areVirtualTable(
f130: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
f140: 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a  Module module,..
f150: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
f160: 74 72 53 71 6c 2c 0d 0a 20 20 20 20 20 20 20 20  trSql,..        
f170: 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
f180: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
f190: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
f1a0: 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
f1b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f1c0: 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 63        error = "c
f1d0: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e  onnection has an
f1e0: 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22   invalid handle"
f1f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
f200: 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
f210: 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20  rCode.Error;..  
f220: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f230: 20 20 20 49 6e 74 50 74 72 20 70 53 71 6c 20 3d     IntPtr pSql =
f240: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
f250: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
f260: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f270: 20 20 20 20 20 70 53 71 6c 20 3d 20 53 51 4c 69       pSql = SQLi
f280: 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74  teString.Utf8Int
f290: 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 73 74  PtrFromString(st
f2a0: 72 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rSql);....      
f2b0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
f2c0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
f2d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f2e0: 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
f2f0: 61 62 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab(..           
f300: 20 20 20 20 20 5f 73 71 6c 2c 20 70 53 71 6c 29       _sql, pSql)
f310: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f320: 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74   if ((n == SQLit
f330: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26  eErrorCode.Ok) &
f340: 26 20 28 6d 6f 64 75 6c 65 20 21 3d 20 6e 75 6c  & (module != nul
f350: 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
f360: 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 65 63 6c       module.Decl
f370: 61 72 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a  ared = true;....
f380: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
f390: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
f3a0: 43 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d  Code.Ok) error =
f3b0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3b   GetLastError();
f3c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f3d0: 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20  return n;..     
f3e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
f3f0: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b  nally..        {
f400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
f410: 20 28 70 53 71 6c 20 21 3d 20 49 6e 74 50 74 72   (pSql != IntPtr
f420: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
f430: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f440: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d         SQLiteMem
f450: 6f 72 79 2e 46 72 65 65 28 70 53 71 6c 29 3b 0d  ory.Free(pSql);.
f460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f470: 20 70 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a   pSql = IntPtr.Z
f480: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
f490: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
f4a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
f4b0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
f4c0: 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61  /// Calls the na
f4d0: 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65  tive SQLite core
f4e0: 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65   library in orde
f4f0: 72 20 74 6f 20 64 65 63 6c 61 72 65 20 61 20 76  r to declare a v
f500: 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
f510: 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 69    /// function i
f520: 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20  n response to a 
f530: 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73  call into the <s
f540: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
f550: 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72  NativeModule.xCr
f560: 65 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f  eate" />..    //
f570: 2f 20 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22  / or <see cref="
f580: 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
f590: 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e  ule.xConnect" />
f5a0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d   virtual table m
f5b0: 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f  ethods...    ///
f5c0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
f5d0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
f5e0: 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20  ="module">..    
f5f0: 2f 2f 2f 20 54 68 65 20 76 69 72 74 75 61 6c 20  /// The virtual 
f600: 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61  table module tha
f610: 74 20 69 73 20 74 6f 20 62 65 20 72 65 73 70 6f  t is to be respo
f620: 6e 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 76  nsible for the v
f630: 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
f640: 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 62    /// function b
f650: 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a  eing declared...
f660: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
f670: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
f680: 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e 74 43   name="argumentC
f690: 6f 75 6e 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  ount">..    /// 
f6a0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  The number of ar
f6b0: 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 66  guments to the f
f6c0: 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65  unction being de
f6d0: 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  clared...    ///
f6e0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
f6f0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
f700: 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  name">..    /// 
f710: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
f720: 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64  function being d
f730: 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f  eclared...    //
f740: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
f750: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
f760: 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f  "error">..    //
f770: 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20  / Upon success, 
f780: 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
f790: 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 61  this parameter a
f7a0: 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 55  re undefined.  U
f7b0: 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20  pon failure,..  
f7c0: 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20    /// it should 
f7d0: 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70 72 6f  contain an appro
f7e0: 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d 65 73  priate error mes
f7f0: 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sage...    /// <
f800: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
f810: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
f820: 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
f830: 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
f840: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  e...    /// </re
f850: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
f860: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
f870: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65  LiteErrorCode De
f880: 63 6c 61 72 65 56 69 72 74 75 61 6c 46 75 6e 63  clareVirtualFunc
f890: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53  tion(..        S
f8a0: 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
f8b0: 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  le,..        int
f8c0: 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d   argumentCount,.
f8d0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
f8e0: 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 72  name,..        r
f8f0: 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
f900: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
f910: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  {..        if (_
f920: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
f930: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f940: 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 63 6f       error = "co
f950: 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
f960: 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 3b  invalid handle";
f970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
f980: 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
f990: 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
f9a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f9b0: 20 20 49 6e 74 50 74 72 20 70 4e 61 6d 65 20 3d    IntPtr pName =
f9c0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
f9d0: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
f9e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f9f0: 20 20 20 20 20 70 4e 61 6d 65 20 3d 20 53 51 4c       pName = SQL
fa00: 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e  iteString.Utf8In
fa10: 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 6e  tPtrFromString(n
fa20: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
fa30: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
fa40: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
fa50: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
fa60: 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66 75  ite3_overload_fu
fa70: 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  nction(..       
fa80: 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70           _sql, p
fa90: 4e 61 6d 65 2c 20 61 72 67 75 6d 65 6e 74 43 6f  Name, argumentCo
faa0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
fab0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
fac0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
fad0: 29 20 65 72 72 6f 72 20 3d 20 47 65 74 4c 61 73  ) error = GetLas
fae0: 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20  tError();....   
faf0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
fb00: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n;..        }.. 
fb10: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
fb20: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
fb30: 20 20 20 20 20 20 20 69 66 20 28 70 4e 61 6d 65         if (pName
fb40: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
fb50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
fb60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fb70: 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72   SQLiteMemory.Fr
fb80: 65 65 28 70 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  ee(pName);..    
fb90: 20 20 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d              pNam
fba0: 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  e = IntPtr.Zero;
fbb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
fbc0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
fbd0: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
fbe0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
fbf0: 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20      /// Enables 
fc00: 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65  or disabled exte
fc10: 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e 67 20 62 79  nsion loading by
fc20: 20 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 2f 2f   SQLite...    //
fc30: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
fc40: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
fc50: 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20  e="bOnOff">..   
fc60: 20 2f 2f 2f 20 54 72 75 65 20 74 6f 20 65 6e 61   /// True to ena
fc70: 62 6c 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65  ble loading of e
fc80: 78 74 65 6e 73 69 6f 6e 73 2c 20 66 61 6c 73 65  xtensions, false
fc90: 20 74 6f 20 64 69 73 61 62 6c 65 2e 0d 0a 20 20   to disable...  
fca0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
fcb0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
fcc0: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 4c 6f  rride void SetLo
fcd0: 61 64 45 78 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c  adExtension(bool
fce0: 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d   bOnOff)..    {.
fcf0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
fd00: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
fd10: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
fd20: 2e 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f  .sqlite3_enable_
fd30: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d  load_extension(.
fd40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71  .            _sq
fd50: 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20  l, (bOnOff ? -1 
fd60: 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  : 0));....      
fd70: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
fd80: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
fd90: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
fda0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
fdb0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
fdc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
fdd0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
fde0: 2f 20 4c 6f 61 64 73 20 61 20 53 51 4c 69 74 65  / Loads a SQLite
fdf0: 20 65 78 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61   extension libra
fe00: 72 79 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65  ry from the name
fe10: 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f  d file...    ///
fe20: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
fe30: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
fe40: 3d 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20  ="fileName">..  
fe50: 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f    /// The name o
fe60: 66 20 74 68 65 20 64 79 6e 61 6d 69 63 20 6c 69  f the dynamic li
fe70: 6e 6b 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20  nk library file 
fe80: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65  containing the e
fe90: 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f  xtension...    /
fea0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
feb0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
fec0: 3d 22 70 72 6f 63 4e 61 6d 65 22 3e 0d 0a 20 20  ="procName">..  
fed0: 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f    /// The name o
fee0: 66 20 74 68 65 20 65 78 70 6f 72 74 65 64 20 66  f the exported f
fef0: 75 6e 63 74 69 6f 6e 20 75 73 65 64 20 74 6f 20  unction used to 
ff00: 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 65  initialize the e
ff10: 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f  xtension...    /
ff20: 2f 2f 20 49 66 20 6e 75 6c 6c 2c 20 74 68 65 20  // If null, the 
ff30: 64 65 66 61 75 6c 74 20 22 73 71 6c 69 74 65 33  default "sqlite3
ff40: 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 22  _extension_init"
ff50: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a   will be used...
ff60: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
ff70: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ff80: 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 61  verride void Loa
ff90: 64 45 78 74 65 6e 73 69 6f 6e 28 73 74 72 69 6e  dExtension(strin
ffa0: 67 20 66 69 6c 65 4e 61 6d 65 2c 20 73 74 72 69  g fileName, stri
ffb0: 6e 67 20 70 72 6f 63 4e 61 6d 65 29 0d 0a 20 20  ng procName)..  
ffc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
ffd0: 28 66 69 6c 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c  (fileName == nul
ffe0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
fff0: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
10000 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
10010 22 66 69 6c 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a  "fileName");....
10020 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
10030 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a  Error = IntPtr.Z
10040 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
10050 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
10060 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
10070 5b 5d 20 75 74 66 38 46 69 6c 65 4e 61 6d 65 20  [] utf8FileName 
10080 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55  = UTF8Encoding.U
10090 54 46 38 2e 47 65 74 42 79 74 65 73 28 66 69 6c  TF8.GetBytes(fil
100a0 65 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a  eName + '\0');..
100b0 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
100c0 5b 5d 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20  [] utf8ProcName 
100d0 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
100e0 20 20 20 20 20 20 20 69 66 20 28 70 72 6f 63 4e         if (procN
100f0 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame != null)..  
10100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 74                ut
10110 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20 55 54 46  f8ProcName = UTF
10120 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47  8Encoding.UTF8.G
10130 65 74 42 79 74 65 73 28 70 72 6f 63 4e 61 6d 65  etBytes(procName
10140 20 2b 20 27 5c 30 27 29 3b 0d 0a 0d 0a 20 20 20   + '\0');....   
10150 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
10160 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
10170 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10180 2e 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78  .sqlite3_load_ex
10190 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  tension(..      
101a0 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20            _sql, 
101b0 75 74 66 38 46 69 6c 65 4e 61 6d 65 2c 20 75 74  utf8FileName, ut
101c0 66 38 50 72 6f 63 4e 61 6d 65 2c 20 72 65 66 20  f8ProcName, ref 
101d0 70 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  pError);....    
101e0 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
101f0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
10200 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
10210 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
10220 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
10230 6e 2c 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  n, UTF8ToString(
10240 70 45 72 72 6f 72 2c 20 2d 31 29 29 3b 0d 0a 20  pError, -1));.. 
10250 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10260 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
10270 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10280 20 20 69 66 20 28 70 45 72 72 6f 72 20 21 3d 20    if (pError != 
10290 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
102a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
102b0 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73               Uns
102c0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
102d0 2e 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 45  .sqlite3_free(pE
102e0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
102f0 20 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d          pError =
10300 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
10310 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
10320 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
10330 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65  ..    /// Enable
10340 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78  s or disabled ex
10350 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f  tended result co
10360 64 65 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  des returned by 
10370 53 51 4c 69 74 65 0d 0a 20 20 20 20 69 6e 74 65  SQLite..    inte
10380 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
10390 69 64 20 53 65 74 45 78 74 65 6e 64 65 64 52 65  id SetExtendedRe
103a0 73 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62  sultCodes(bool b
103b0 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20  OnOff)..    {.. 
103c0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
103d0 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
103e0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
103f0 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65  ite3_extended_re
10400 73 75 6c 74 5f 63 6f 64 65 73 28 0d 0a 20 20 20  sult_codes(..   
10410 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f         _sql, (bO
10420 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b  nOff ? -1 : 0));
10430 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  ....      if (n 
10440 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
10450 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
10460 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
10470 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
10480 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  ());..    }..   
10490 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61   /// Gets the la
104a0 73 74 20 53 51 4c 69 74 65 20 65 72 72 6f 72 20  st SQLite error 
104b0 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e  code..    intern
104c0 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
104d0 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73 75  teErrorCode Resu
104e0 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d  ltCode()..    {.
104f0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
10500 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10510 73 2e 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  s.sqlite3_errcod
10520 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d  e(_sql);..    }.
10530 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68  .    /// Gets th
10540 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65 78  e last SQLite ex
10550 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64  tended error cod
10560 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  e..    internal 
10570 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
10580 72 72 6f 72 43 6f 64 65 20 45 78 74 65 6e 64 65  rrorCode Extende
10590 64 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20  dResultCode().. 
105a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
105b0 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
105c0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
105d0 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28  xtended_errcode(
105e0 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  _sql);..    }...
105f0 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c  .    /// Add a l
10600 6f 67 20 6d 65 73 73 61 67 65 20 76 69 61 20 74  og message via t
10610 68 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65  he SQLite sqlite
10620 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e  3_log interface.
10630 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10640 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 67  verride void Log
10650 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65 45 72  Message(SQLiteEr
10660 72 6f 72 43 6f 64 65 20 69 45 72 72 43 6f 64 65  rorCode iErrCode
10670 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67  , string zMessag
10680 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
10690 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
106a0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 67  hods.sqlite3_log
106b0 28 69 45 72 72 43 6f 64 65 2c 20 54 6f 55 54 46  (iErrCode, ToUTF
106c0 38 28 7a 4d 65 73 73 61 67 65 29 29 3b 0d 0a 20  8(zMessage));.. 
106d0 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45     }....#if INTE
106e0 52 4f 50 5f 43 4f 44 45 43 0d 0a 20 20 20 20 69  ROP_CODEC..    i
106f0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
10700 20 76 6f 69 64 20 53 65 74 50 61 73 73 77 6f 72   void SetPasswor
10710 64 28 62 79 74 65 5b 5d 20 70 61 73 73 77 6f 72  d(byte[] passwor
10720 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a  dBytes)..    {..
10730 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
10740 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
10750 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10760 6c 69 74 65 33 5f 6b 65 79 28 5f 73 71 6c 2c 20  lite3_key(_sql, 
10770 70 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20 70  passwordBytes, p
10780 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e  asswordBytes.Len
10790 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  gth);..      if 
107a0 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
107b0 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
107c0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
107d0 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
107e0 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
107f0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10800 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 68 61  verride void Cha
10810 6e 67 65 50 61 73 73 77 6f 72 64 28 62 79 74 65  ngePassword(byte
10820 5b 5d 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79  [] newPasswordBy
10830 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tes)..    {..   
10840 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
10850 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
10860 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10870 65 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c 20 6e  e3_rekey(_sql, n
10880 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2c  ewPasswordBytes,
10890 20 28 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74   (newPasswordByt
108a0 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30 20  es == null) ? 0 
108b0 3a 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74  : newPasswordByt
108c0 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20  es.Length);..   
108d0 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
108e0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
108f0 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
10900 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
10910 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
10920 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
10930 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10940 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 55 70  rride void SetUp
10950 64 61 74 65 48 6f 6f 6b 28 53 51 4c 69 74 65 55  dateHook(SQLiteU
10960 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 66 75  pdateCallback fu
10970 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nc)..    {..    
10980 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
10990 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 75 70  thods.sqlite3_up
109a0 64 61 74 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20  date_hook(_sql, 
109b0 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
109c0 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
109d0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
109e0 69 64 65 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d  ide void SetComm
109f0 69 74 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d  itHook(SQLiteCom
10a00 6d 69 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  mitCallback func
10a10 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
10a20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10a30 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 6d  ods.sqlite3_comm
10a40 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75  it_hook(_sql, fu
10a50 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
10a60 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
10a70 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
10a80 65 20 76 6f 69 64 20 53 65 74 54 72 61 63 65 43  e void SetTraceC
10a90 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 54 72  allback(SQLiteTr
10aa0 61 63 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  aceCallback func
10ab0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
10ac0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10ad0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 72 61 63  ods.sqlite3_trac
10ae0 65 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e  e(_sql, func, In
10af0 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
10b00 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
10b10 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
10b20 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b   SetRollbackHook
10b30 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63 6b 43  (SQLiteRollbackC
10b40 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
10b50 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
10b60 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10b70 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b  sqlite3_rollback
10b80 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63  _hook(_sql, func
10b90 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
10ba0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
10bb0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
10bc0 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74 68 65 20   /// Allows the 
10bd0 73 65 74 74 69 6e 67 20 6f 66 20 61 20 6c 6f 67  setting of a log
10be0 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 6e  ging callback in
10bf0 76 6f 6b 65 64 20 62 79 20 53 51 4c 69 74 65 20  voked by SQLite 
10c00 77 68 65 6e 20 61 0d 0a 20 20 20 20 2f 2f 2f 20  when a..    /// 
10c10 6c 6f 67 20 65 76 65 6e 74 20 6f 63 63 75 72 73  log event occurs
10c20 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20 63 61 6c 6c  .  Only one call
10c30 62 61 63 6b 20 6d 61 79 20 62 65 20 73 65 74 2e  back may be set.
10c40 20 20 49 66 20 4e 55 4c 4c 20 69 73 20 70 61 73    If NULL is pas
10c50 73 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74 68  sed,..    /// th
10c60 65 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61  e logging callba
10c70 63 6b 20 69 73 20 75 6e 72 65 67 69 73 74 65 72  ck is unregister
10c80 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ed...    /// </s
10c90 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
10ca0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75   <param name="fu
10cb0 6e 63 22 3e 54 68 65 20 63 61 6c 6c 62 61 63 6b  nc">The callback
10cc0 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76   function to inv
10cd0 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  oke.</param>..  
10ce0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
10cf0 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74 20  eturns a result 
10d00 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  code</returns>..
10d10 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10d20 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
10d30 72 43 6f 64 65 20 53 65 74 4c 6f 67 43 61 6c 6c  rCode SetLogCall
10d40 62 61 63 6b 28 53 51 4c 69 74 65 4c 6f 67 43 61  back(SQLiteLogCa
10d50 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
10d60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
10d70 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
10d80 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
10d90 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
10da0 6e 66 69 67 5f 6c 6f 67 28 0d 0a 20 20 20 20 20  nfig_log(..     
10db0 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
10dc0 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54  figOpsEnum.SQLIT
10dd0 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 66 75  E_CONFIG_LOG, fu
10de0 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
10df0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
10e00 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a  urn rc;..    }..
10e10 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
10e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e70 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
10e80 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
10e90 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 20 6e 65  /// Creates a ne
10ea0 77 20 53 51 4c 69 74 65 20 62 61 63 6b 75 70 20  w SQLite backup 
10eb0 6f 62 6a 65 63 74 20 62 61 73 65 64 20 6f 6e 20  object based on 
10ec0 74 68 65 20 70 72 6f 76 69 64 65 64 20 64 65 73  the provided des
10ed0 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f  tination..    //
10ee0 2f 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  / database conne
10ef0 63 74 69 6f 6e 2e 20 20 54 68 65 20 73 6f 75 72  ction.  The sour
10f00 63 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ce database conn
10f10 65 63 74 69 6f 6e 20 69 73 20 74 68 65 20 6f 6e  ection is the on
10f20 65 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63  e..    /// assoc
10f30 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
10f40 6f 62 6a 65 63 74 2e 20 20 54 68 65 20 73 6f 75  object.  The sou
10f50 72 63 65 20 61 6e 64 20 64 65 73 74 69 6e 61 74  rce and destinat
10f60 69 6f 6e 20 64 61 74 61 62 61 73 65 0d 0a 20 20  ion database..  
10f70 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e    /// connection
10f80 73 20 63 61 6e 6e 6f 74 20 62 65 20 74 68 65 20  s cannot be the 
10f90 73 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  same...    /// <
10fa0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
10fb0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
10fc0 64 65 73 74 43 6e 6e 22 3e 54 68 65 20 64 65 73  destCnn">The des
10fd0 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73  tination databas
10fe0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70  e connection.</p
10ff0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
11000 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74  param name="dest
11010 4e 61 6d 65 22 3e 54 68 65 20 64 65 73 74 69 6e  Name">The destin
11020 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 6e  ation database n
11030 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ame.</param>..  
11040 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
11050 65 3d 22 73 6f 75 72 63 65 4e 61 6d 65 22 3e 54  e="sourceName">T
11060 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
11070 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e  se name.</param>
11080 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
11090 6e 73 3e 54 68 65 20 6e 65 77 6c 79 20 63 72 65  ns>The newly cre
110a0 61 74 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65  ated backup obje
110b0 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ct.</returns>.. 
110c0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
110d0 72 69 64 65 20 53 51 4c 69 74 65 42 61 63 6b 75  ride SQLiteBacku
110e0 70 20 49 6e 69 74 69 61 6c 69 7a 65 42 61 63 6b  p InitializeBack
110f0 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  up(..        SQL
11100 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 64 65  iteConnection de
11110 73 74 43 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20  stCnn,..        
11120 73 74 72 69 6e 67 20 64 65 73 74 4e 61 6d 65 2c  string destName,
11130 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
11140 20 73 6f 75 72 63 65 4e 61 6d 65 0d 0a 20 20 20   sourceName..   
11150 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
11160 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74 43         if (destC
11170 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nn == null)..   
11180 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
11190 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
111a0 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74 43 6e  xception("destCn
111b0 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n");....        
111c0 69 66 20 28 64 65 73 74 4e 61 6d 65 20 3d 3d 20  if (destName == 
111d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
111e0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
111f0 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
11200 6f 6e 28 22 64 65 73 74 4e 61 6d 65 22 29 3b 0d  on("destName");.
11210 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73  ...        if (s
11220 6f 75 72 63 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c  ourceName == nul
11230 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
11240 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
11250 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
11260 22 73 6f 75 72 63 65 4e 61 6d 65 22 29 3b 0d 0a  "sourceName");..
11270 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
11280 33 20 64 65 73 74 53 71 6c 69 74 65 33 20 3d 20  3 destSqlite3 = 
11290 64 65 73 74 43 6e 6e 2e 5f 73 71 6c 20 61 73 20  destCnn._sql as 
112a0 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a 20 20 20 20  SQLite3;....    
112b0 20 20 20 20 69 66 20 28 64 65 73 74 53 71 6c 69      if (destSqli
112c0 74 65 33 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  te3 == null)..  
112d0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
112e0 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65  new ArgumentExce
112f0 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
11300 20 20 20 20 20 20 20 20 22 44 65 73 74 69 6e 61          "Destina
11310 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
11320 68 61 73 20 6e 6f 20 77 72 61 70 70 65 72 2e 22  has no wrapper."
11330 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
11340 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a     "destCnn");..
11350 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
11360 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
11370 20 64 65 73 74 48 61 6e 64 6c 65 20 3d 20 64 65   destHandle = de
11380 73 74 53 71 6c 69 74 65 33 2e 5f 73 71 6c 3b 0d  stSqlite3._sql;.
11390 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  ...        if (d
113a0 65 73 74 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  estHandle == nul
113b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
113c0 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
113d0 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  ntException(..  
113e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
113f0 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65  estination conne
11400 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76  ction has an inv
11410 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 2c 0d 0a  alid handle.",..
11420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11430 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20  "destCnn");.... 
11440 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
11450 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 73 6f  nectionHandle so
11460 75 72 63 65 48 61 6e 64 6c 65 20 3d 20 5f 73 71  urceHandle = _sq
11470 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  l;....        if
11480 20 28 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d   (sourceHandle =
11490 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
114a0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
114b0 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
114c0 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
114d0 20 20 20 20 20 20 20 20 20 20 20 22 53 6f 75 72             "Sour
114e0 63 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ce connection ha
114f0 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
11500 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
11510 20 20 20 62 79 74 65 5b 5d 20 7a 44 65 73 74 4e     byte[] zDestN
11520 61 6d 65 20 3d 20 54 6f 55 54 46 38 28 64 65 73  ame = ToUTF8(des
11530 74 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  tName);..       
11540 20 62 79 74 65 5b 5d 20 7a 53 6f 75 72 63 65 4e   byte[] zSourceN
11550 61 6d 65 20 3d 20 54 6f 55 54 46 38 28 73 6f 75  ame = ToUTF8(sou
11560 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  rceName);....   
11570 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
11580 70 48 61 6e 64 6c 65 20 62 61 63 6b 75 70 48 61  pHandle backupHa
11590 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  ndle = null;....
115a0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
115b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
115c0 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
115d0 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
115e0 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f         finally /
115f0 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41  * NOTE: Thread.A
11600 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f  bort() protectio
11610 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b  n. */..        {
11620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
11630 74 50 74 72 20 62 61 63 6b 75 70 20 3d 20 55 6e  tPtr backup = Un
11640 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
11650 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
11660 5f 69 6e 69 74 28 0d 0a 20 20 20 20 20 20 20 20  _init(..        
11670 20 20 20 20 20 20 20 20 64 65 73 74 48 61 6e 64          destHand
11680 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73  le, zDestName, s
11690 6f 75 72 63 65 48 61 6e 64 6c 65 2c 20 7a 53 6f  ourceHandle, zSo
116a0 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  urceName);....  
116b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 61            if (ba
116c0 63 6b 75 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  ckup == IntPtr.Z
116d0 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
116e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
116f0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
11700 43 6f 64 65 20 72 65 73 75 6c 74 43 6f 64 65 20  Code resultCode 
11710 3d 20 52 65 73 75 6c 74 43 6f 64 65 28 29 3b 0d  = ResultCode();.
11720 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11730 20 20 20 69 66 20 28 72 65 73 75 6c 74 43 6f 64     if (resultCod
11740 65 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  e != SQLiteError
11750 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
11760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
11770 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
11780 63 65 70 74 69 6f 6e 28 72 65 73 75 6c 74 43 6f  ception(resultCo
11790 64 65 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  de, GetLastError
117a0 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
117b0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
117c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117d0 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
117e0 45 78 63 65 70 74 69 6f 6e 28 22 66 61 69 6c 65  Exception("faile
117f0 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20  d to initialize 
11800 62 61 63 6b 75 70 22 29 3b 0d 0a 20 20 20 20 20  backup");..     
11810 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11820 20 20 20 20 20 20 20 20 62 61 63 6b 75 70 48 61          backupHa
11830 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  ndle = new SQLit
11840 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 28 64 65  eBackupHandle(de
11850 73 74 48 61 6e 64 6c 65 2c 20 62 61 63 6b 75 70  stHandle, backup
11860 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
11870 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
11880 6e 65 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70  new SQLiteBackup
11890 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  (..            t
118a0 68 69 73 2c 20 62 61 63 6b 75 70 48 61 6e 64 6c  his, backupHandl
118b0 65 2c 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a  e, destHandle, z
118c0 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65  DestName, source
118d0 48 61 6e 64 6c 65 2c 0d 0a 20 20 20 20 20 20 20  Handle,..       
118e0 20 20 20 20 20 7a 53 6f 75 72 63 65 4e 61 6d 65       zSourceName
118f0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
11900 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
11910 20 20 20 20 2f 2f 2f 20 43 6f 70 69 65 73 20 75      /// Copies u
11920 70 20 74 6f 20 4e 20 70 61 67 65 73 20 66 72 6f  p to N pages fro
11930 6d 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74  m the source dat
11940 61 62 61 73 65 20 74 6f 20 74 68 65 20 64 65 73  abase to the des
11950 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f  tination..    //
11960 2f 20 64 61 74 61 62 61 73 65 20 61 73 73 6f 63  / database assoc
11970 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73  iated with the s
11980 70 65 63 69 66 69 65 64 20 62 61 63 6b 75 70 20  pecified backup 
11990 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
119a0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
119b0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
119c0 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61  ="backup">The ba
119d0 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 75  ckup object to u
119e0 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  se.</param>..   
119f0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
11a00 3d 22 6e 50 61 67 65 22 3e 0d 0a 20 20 20 20 2f  ="nPage">..    /
11a10 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
11a20 20 70 61 67 65 73 20 74 6f 20 63 6f 70 79 2c 20   pages to copy, 
11a30 6e 65 67 61 74 69 76 65 20 74 6f 20 63 6f 70 79  negative to copy
11a40 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 70   all remaining p
11a50 61 67 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ages...    /// <
11a60 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
11a70 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65   <param name="re
11a80 74 72 79 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53  try">..    /// S
11a90 65 74 20 74 6f 20 74 72 75 65 20 69 66 20 74 68  et to true if th
11aa0 65 20 6f 70 65 72 61 74 69 6f 6e 20 6e 65 65 64  e operation need
11ab0 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 64 20  s to be retried 
11ac0 64 75 65 20 74 6f 20 64 61 74 61 62 61 73 65 0d  due to database.
11ad0 0a 20 20 20 20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67  .    /// locking
11ae0 20 69 73 73 75 65 73 3b 20 6f 74 68 65 72 77 69   issues; otherwi
11af0 73 65 2c 20 73 65 74 20 74 6f 20 66 61 6c 73 65  se, set to false
11b00 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
11b10 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
11b20 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
11b30 54 72 75 65 20 69 66 20 74 68 65 72 65 20 61 72  True if there ar
11b40 65 20 6d 6f 72 65 20 70 61 67 65 73 20 74 6f 20  e more pages to 
11b50 62 65 20 63 6f 70 69 65 64 2c 20 66 61 6c 73 65  be copied, false
11b60 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20   otherwise...   
11b70 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
11b80 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
11b90 65 72 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70  erride bool Step
11ba0 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
11bb0 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61   SQLiteBackup ba
11bc0 63 6b 75 70 2c 0d 0a 20 20 20 20 20 20 20 20 69  ckup,..        i
11bd0 6e 74 20 6e 50 61 67 65 2c 0d 0a 20 20 20 20 20  nt nPage,..     
11be0 20 20 20 6f 75 74 20 62 6f 6f 6c 20 72 65 74 72     out bool retr
11bf0 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  y..        )..  
11c00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
11c10 72 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  ry = false;.... 
11c20 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75         if (backu
11c30 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  p == null)..    
11c40 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
11c50 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
11c60 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22  ception("backup"
11c70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
11c80 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
11c90 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70   handle = backup
11ca0 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b  ._sqlite_backup;
11cb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
11cc0 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  handle == null).
11cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
11ce0 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
11cf0 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
11d00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11d10 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
11d20 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
11d30 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
11d40 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
11d50 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65  ndlePtr = handle
11d60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
11d70 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e  (handlePtr == In
11d80 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
11d90 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
11da0 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
11db0 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
11dd0 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
11de0 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
11df0 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a  le pointer.");..
11e00 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
11e10 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
11e20 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
11e30 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
11e40 5f 73 74 65 70 28 68 61 6e 64 6c 65 50 74 72 2c  _step(handlePtr,
11e50 20 6e 50 61 67 65 29 3b 0d 0a 20 20 20 20 20 20   nPage);..      
11e60 20 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65    backup._stepRe
11e70 73 75 6c 74 20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54  sult = n; /* NOT
11e80 45 3a 20 53 61 76 65 20 66 6f 72 20 75 73 65 20  E: Save for use 
11e90 62 79 20 46 69 6e 69 73 68 42 61 63 6b 75 70 2e  by FinishBackup.
11ea0 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69   */....        i
11eb0 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
11ec0 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
11ed0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11ee0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
11ef0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
11f00 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
11f10 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
11f20 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20  de.Busy)..      
11f30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11f40 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a   retry = true;..
11f50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
11f60 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
11f70 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
11f80 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
11f90 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65  eErrorCode.Locke
11fa0 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
11fb0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72 79             retry
11fc0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
11fd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
11fe0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
11ff0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
12000 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
12010 43 6f 64 65 2e 44 6f 6e 65 29 0d 0a 20 20 20 20  Code.Done)..    
12020 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12030 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
12040 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
12050 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
12060 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12070 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
12080 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
12090 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
120a0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
120b0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
120c0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
120d0 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  Returns the numb
120e0 65 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61  er of pages rema
120f0 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69  ining to be copi
12100 65 64 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72  ed from the sour
12110 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61  ce..    /// data
12120 62 61 73 65 20 74 6f 20 74 68 65 20 64 65 73 74  base to the dest
12130 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65  ination database
12140 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
12150 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a   the specified..
12160 20 20 20 20 2f 2f 2f 20 62 61 63 6b 75 70 20 6f      /// backup o
12170 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bject...    /// 
12180 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
12190 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
121a0 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63  "backup">The bac
121b0 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68  kup object to ch
121c0 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  eck.</param>..  
121d0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
121e0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
121f0 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20  es remaining to 
12200 62 65 20 63 6f 70 69 65 64 2e 3c 2f 72 65 74 75  be copied.</retu
12210 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
12220 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
12230 52 65 6d 61 69 6e 69 6e 67 42 61 63 6b 75 70 28  RemainingBackup(
12240 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
12250 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20  Backup backup.. 
12260 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
12270 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63  .        if (bac
12280 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  kup == null)..  
12290 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
122a0 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
122b0 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75  Exception("backu
122c0 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p");....        
122d0 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
122e0 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b  le handle = back
122f0 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75  up._sqlite_backu
12300 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  p;....        if
12310 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c   (handle == null
12320 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
12330 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
12340 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
12350 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
12360 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
12370 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
12380 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
12390 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
123a0 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64  handlePtr = hand
123b0 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  le;....        i
123c0 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20  f (handlePtr == 
123d0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
123e0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
123f0 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
12400 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
12410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12420 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
12430 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
12440 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b  ndle pointer.");
12450 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
12460 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
12470 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
12480 61 63 6b 75 70 5f 72 65 6d 61 69 6e 69 6e 67 28  ackup_remaining(
12490 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20  handlePtr);..   
124a0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
124b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
124c0 20 52 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74   Returns the tot
124d0 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  al number of pag
124e0 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65  es in the source
124f0 20 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69   database associ
12500 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 77 69  ated..    /// wi
12510 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
12520 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d   backup object..
12530 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
12540 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
12550 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
12560 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
12570 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70  ect to check.</p
12580 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
12590 72 65 74 75 72 6e 73 3e 54 68 65 20 74 6f 74 61  returns>The tota
125a0 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  l number of page
125b0 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  s in the source 
125c0 64 61 74 61 62 61 73 65 2e 3c 2f 72 65 74 75 72  database.</retur
125d0 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
125e0 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 50  l override int P
125f0 61 67 65 43 6f 75 6e 74 42 61 63 6b 75 70 28 0d  ageCountBackup(.
12600 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
12610 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20  ackup backup..  
12620 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
12630 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b          if (back
12640 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  up == null)..   
12650 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
12660 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
12670 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70  xception("backup
12680 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
12690 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c  QLiteBackupHandl
126a0 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75  e handle = backu
126b0 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70  p._sqlite_backup
126c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
126d0 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (handle == null)
126e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
126f0 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
12700 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
12710 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
12720 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
12730 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
12740 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a  d handle.");....
12750 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
12760 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c  andlePtr = handl
12770 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
12780 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49   (handlePtr == I
12790 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
127a0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
127b0 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
127c0 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
127d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
127e0 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
127f0 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
12800 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d  dle pointer.");.
12810 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
12820 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
12830 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
12840 63 6b 75 70 5f 70 61 67 65 63 6f 75 6e 74 28 68  ckup_pagecount(h
12850 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20  andlePtr);..    
12860 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
12870 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
12880 44 65 73 74 72 6f 79 73 20 74 68 65 20 62 61 63  Destroys the bac
12890 6b 75 70 20 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c  kup object, roll
128a0 69 6e 67 20 62 61 63 6b 20 61 6e 79 20 62 61 63  ing back any bac
128b0 6b 75 70 20 74 68 61 74 20 6d 61 79 20 62 65 20  kup that may be 
128c0 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 70 72 6f 67  in..    /// prog
128d0 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
128e0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
128f0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
12900 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75  ackup">The backu
12910 70 20 6f 62 6a 65 63 74 20 74 6f 20 64 65 73 74  p object to dest
12920 72 6f 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  roy.</param>..  
12930 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
12940 69 64 65 20 76 6f 69 64 20 46 69 6e 69 73 68 42  ide void FinishB
12950 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
12960 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63  SQLiteBackup bac
12970 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  kup..        )..
12980 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
12990 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c  f (backup == nul
129a0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
129b0 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
129c0 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
129d0 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20  "backup");....  
129e0 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
129f0 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  upHandle handle 
12a00 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65  = backup._sqlite
12a10 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20  _backup;....    
12a20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d      if (handle =
12a30 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
12a40 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
12a50 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
12a60 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
12a70 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
12a80 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
12a90 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
12aa0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49  ");....        I
12ab0 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20  ntPtr handlePtr 
12ac0 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
12ad0 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50       if (handleP
12ae0 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tr == IntPtr.Zer
12af0 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
12b00 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
12b10 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
12b20 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
12b30 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
12b40 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
12b50 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74  lid handle point
12b60 65 72 2e 22 29 3b 0d 0a 0d 0a 23 69 66 20 21 53  er.");....#if !S
12b70 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
12b80 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
12b90 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
12ba0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12bb0 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66  sqlite3_backup_f
12bc0 69 6e 69 73 68 5f 69 6e 74 65 72 6f 70 28 68 61  inish_interop(ha
12bd0 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6c 73 65  ndlePtr);..#else
12be0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
12bf0 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
12c00 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12c10 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
12c20 5f 66 69 6e 69 73 68 28 68 61 6e 64 6c 65 50 74  _finish(handlePt
12c30 72 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  r);..#endif..   
12c40 20 20 20 20 20 68 61 6e 64 6c 65 2e 53 65 74 48       handle.SetH
12c50 61 6e 64 6c 65 41 73 49 6e 76 61 6c 69 64 28 29  andleAsInvalid()
12c60 3b 0d 0a 0d 0a 23 69 66 20 43 4f 55 4e 54 5f 48  ;....#if COUNT_H
12c70 41 4e 44 4c 45 0d 0a 20 20 20 20 20 20 20 20 69  ANDLE..        i
12c80 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  f ((n == SQLiteE
12c90 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 20  rrorCode.Ok) || 
12ca0 28 6e 20 3d 3d 20 62 61 63 6b 75 70 2e 5f 73 74  (n == backup._st
12cb0 65 70 52 65 73 75 6c 74 29 29 20 68 61 6e 64 6c  epResult)) handl
12cc0 65 2e 57 61 73 52 65 6c 65 61 73 65 64 4f 6b 28  e.WasReleasedOk(
12cd0 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
12ce0 20 20 20 20 20 20 69 66 20 28 28 6e 20 21 3d 20        if ((n != 
12cf0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
12d00 4f 6b 29 20 26 26 20 28 6e 20 21 3d 20 62 61 63  Ok) && (n != bac
12d10 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29  kup._stepResult)
12d20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
12d30 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
12d40 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
12d50 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
12d60 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
12d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
12dd0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
12de0 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69  .    /// Determi
12df0 6e 65 73 20 69 66 20 74 68 65 20 53 51 4c 69 74  nes if the SQLit
12e00 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68  e core library h
12e10 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  as been initiali
12e20 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20  zed for the..   
12e30 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f   /// current pro
12e40 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cess...    /// <
12e50 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
12e60 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
12e70 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20    /// A boolean 
12e80 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68  indicating wheth
12e90 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51  er or not the SQ
12ea0 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
12eb0 79 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20  y has been..    
12ec0 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  /// initialized 
12ed0 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
12ee0 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f  process...    //
12ef0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
12f00 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
12f10 69 64 65 20 62 6f 6f 6c 20 49 73 49 6e 69 74 69  ide bool IsIniti
12f20 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d  alized()..    {.
12f30 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
12f40 53 74 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69  StaticIsInitiali
12f50 7a 65 64 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  zed();..    }...
12f60 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
12f70 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65  y>..    /// Dete
12f80 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20 53 51  rmines if the SQ
12f90 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
12fa0 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69  y has been initi
12fb0 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a  alized for the..
12fc0 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20      /// current 
12fd0 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f  process...    //
12fe0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
12ff0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
13000 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65  .    /// A boole
13010 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68  an indicating wh
13020 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
13030 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
13040 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d 0a 20  rary has been.. 
13050 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a     /// initializ
13060 65 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  ed for the curre
13070 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20  nt process...   
13080 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
13090 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
130a0 61 74 69 63 20 62 6f 6f 6c 20 53 74 61 74 69 63  atic bool Static
130b0 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d  IsInitialized().
130c0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
130d0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 42  //..        // B
130e0 55 47 46 49 58 3a 20 50 72 65 76 65 6e 74 20 72  UGFIX: Prevent r
130f0 61 63 65 73 20 77 69 74 68 20 6f 74 68 65 72 20  aces with other 
13100 74 68 72 65 61 64 73 20 66 6f 72 20 74 68 69 73  threads for this
13110 20 65 6e 74 69 72 65 20 62 6c 6f 63 6b 2c 20 64   entire block, d
13120 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ue..        //  
13130 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 74 72         to the tr
13140 79 2f 66 69 6e 61 6c 6c 79 20 73 65 6d 61 6e 74  y/finally semant
13150 69 63 73 2e 20 20 53 65 65 20 74 69 63 6b 65 74  ics.  See ticket
13160 20 5b 37 32 39 30 35 63 39 61 37 37 5d 2e 0d 0a   [72905c9a77]...
13170 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
13180 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f      lock (syncRo
13190 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ot)..        {..
131a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
131b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
131c0 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20 73 74  OTE: Save the st
131d0 61 74 65 20 6f 66 20 74 68 65 20 6c 6f 67 67 69  ate of the loggi
131e0 6e 67 20 63 6c 61 73 73 20 61 6e 64 20 74 68 65  ng class and the
131f0 6e 20 72 65 73 74 6f 72 65 20 69 74 0d 0a 20 20  n restore it..  
13200 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
13210 20 20 20 61 66 74 65 72 20 77 65 20 61 72 65 20     after we are 
13220 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20 6c 6f  done to avoid lo
13230 67 67 69 6e 67 20 74 6f 6f 20 6d 61 6e 79 20 66  gging too many f
13240 61 6c 73 65 20 65 72 72 6f 72 73 2e 0d 0a 20 20  alse errors...  
13250 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
13260 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
13270 61 76 65 64 45 6e 61 62 6c 65 64 20 3d 20 53 51  avedEnabled = SQ
13280 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 3b  LiteLog.Enabled;
13290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
132a0 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20  LiteLog.Enabled 
132b0 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  = false;....    
132c0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
132d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
132e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
132f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13300 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6d 65  // NOTE: This me
13310 74 68 6f 64 20 5b 61 62 5d 75 73 65 73 20 74 68  thod [ab]uses th
13320 65 20 66 61 63 74 20 74 68 61 74 20 53 51 4c 69  e fact that SQLi
13330 74 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 0d 0a  te will always..
13340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13350 2f 2f 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  //       return 
13360 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 66 6f 72  SQLITE_ERROR for
13370 20 61 6e 79 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6e   any unknown con
13380 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
13390 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
133a0 20 20 20 2f 2f 20 20 20 20 20 20 20 2a 75 6e 6c     //       *unl
133b0 65 73 73 2a 20 74 68 65 20 53 51 4c 69 74 65 20  ess* the SQLite 
133c0 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 65  library has alre
133d0 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  ady been initial
133e0 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  ized...         
133f0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
13400 49 6e 20 74 68 61 74 20 63 61 73 65 20 69 74 20  In that case it 
13410 77 69 6c 6c 20 61 6c 77 61 79 73 20 72 65 74 75  will always retu
13420 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
13430 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13440 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
13450 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
13460 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61  orCode rc = Unsa
13470 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13480 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6e  sqlite3_config_n
13490 6f 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  one(..          
134a0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
134b0 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51  ConfigOpsEnum.SQ
134c0 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45  LITE_CONFIG_NONE
134d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
134e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 72 63        return (rc
134f0 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
13500 6f 64 65 2e 4d 69 73 75 73 65 29 3b 0d 0a 20 20  ode.Misuse);..  
13510 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
13520 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
13530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
13540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13550 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c   SQLiteLog.Enabl
13560 65 64 20 3d 20 73 61 76 65 64 45 6e 61 62 6c 65  ed = savedEnable
13570 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
13580 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
13590 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
135a0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
135b0 2f 20 48 65 6c 70 65 72 20 66 75 6e 63 74 69 6f  / Helper functio
135c0 6e 20 74 6f 20 72 65 74 72 69 65 76 65 20 61 20  n to retrieve a 
135d0 63 6f 6c 75 6d 6e 20 6f 66 20 64 61 74 61 20 66  column of data f
135e0 72 6f 6d 20 61 6e 20 61 63 74 69 76 65 20 73 74  rom an active st
135f0 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f  atement...    //
13600 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
13610 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
13620 65 3d 22 73 74 6d 74 22 3e 54 68 65 20 73 74 61  e="stmt">The sta
13630 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 73 74 65  tement being ste
13640 70 28 29 27 64 20 74 68 72 6f 75 67 68 3c 2f 70  p()'d through</p
13650 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
13660 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67  param name="flag
13670 73 22 3e 54 68 65 20 66 6c 61 67 73 20 61 73 73  s">The flags ass
13680 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
13690 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61   connection.</pa
136a0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
136b0 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78  aram name="index
136c0 22 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 64  ">The column ind
136d0 65 78 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  ex to retrieve</
136e0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
136f0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70  <param name="typ
13700 22 3e 54 68 65 20 74 79 70 65 20 6f 66 20 64 61  ">The type of da
13710 74 61 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ta contained in 
13720 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  the column.  If 
13730 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74  Uninitialized, t
13740 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c  his function wil
13750 6c 20 72 65 74 72 69 65 76 65 20 74 68 65 20 64  l retrieve the d
13760 61 74 61 74 79 70 65 20 69 6e 66 6f 72 6d 61 74  atatype informat
13770 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ion.</param>..  
13780 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
13790 65 74 75 72 6e 73 20 74 68 65 20 64 61 74 61 20  eturns the data 
137a0 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72  in the column</r
137b0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
137c0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6f  ernal override o
137d0 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 53  bject GetValue(S
137e0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
137f0 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
13800 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
13810 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 53 51 4c  , int index, SQL
13820 69 74 65 54 79 70 65 20 74 79 70 29 0d 0a 20 20  iteType typ)..  
13830 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 49    {..      if (I
13840 73 4e 75 6c 6c 28 73 74 6d 74 2c 20 69 6e 64 65  sNull(stmt, inde
13850 78 29 29 20 72 65 74 75 72 6e 20 44 42 4e 75 6c  x)) return DBNul
13860 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l.Value;..      
13870 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66  TypeAffinity aff
13880 20 3d 20 74 79 70 2e 41 66 66 69 6e 69 74 79 3b   = typ.Affinity;
13890 0d 0a 20 20 20 20 20 20 54 79 70 65 20 74 20 3d  ..      Type t =
138a0 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
138b0 69 66 20 28 74 79 70 2e 54 79 70 65 20 21 3d 20  if (typ.Type != 
138c0 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 0d 0a  DbType.Object)..
138d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
138e0 20 74 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65   t = SQLiteConve
138f0 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54 6f 54  rt.SQLiteTypeToT
13900 79 70 65 28 74 79 70 29 3b 0d 0a 20 20 20 20 20  ype(typ);..     
13910 20 20 20 61 66 66 20 3d 20 54 79 70 65 54 6f 41     aff = TypeToA
13920 66 66 69 6e 69 74 79 28 74 29 3b 0d 0a 20 20 20  ffinity(t);..   
13930 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
13940 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
13950 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
13960 2e 47 65 74 41 6c 6c 41 73 54 65 78 74 29 20 3d  .GetAllAsText) =
13970 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
13980 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73  onFlags.GetAllAs
13990 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Text)..         
139a0 20 72 65 74 75 72 6e 20 47 65 74 54 65 78 74 28   return GetText(
139b0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d  stmt, index);...
139c0 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28 61  .      switch (a
139d0 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ff)..      {..  
139e0 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
139f0 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20  ffinity.Blob:.. 
13a00 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
13a10 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e  .Type == DbType.
13a20 47 75 69 64 20 26 26 20 74 79 70 2e 41 66 66 69  Guid && typ.Affi
13a30 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69  nity == TypeAffi
13a40 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20 20 20 20  nity.Text)..    
13a50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
13a60 65 77 20 47 75 69 64 28 47 65 74 54 65 78 74 28  ew Guid(GetText(
13a70 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
13a80 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
13a90 6e 20 3d 20 28 69 6e 74 29 47 65 74 42 79 74 65  n = (int)GetByte
13aa0 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30  s(stmt, index, 0
13ab0 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a  , null, 0, 0);..
13ac0 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
13ad0 20 62 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e 5d   b = new byte[n]
13ae0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 47 65 74  ;..          Get
13af0 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65  Bytes(stmt, inde
13b00 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d  x, 0, b, 0, n);.
13b10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
13b20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54  (typ.Type == DbT
13b30 79 70 65 2e 47 75 69 64 20 26 26 20 6e 20 3d 3d  ype.Guid && n ==
13b40 20 31 36 29 0d 0a 20 20 20 20 20 20 20 20 20 20   16)..          
13b50 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69    return new Gui
13b60 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  d(b);....       
13b70 20 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a 20 20     return b;..  
13b80 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
13b90 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65  ffinity.DateTime
13ba0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  :..          ret
13bb0 75 72 6e 20 47 65 74 44 61 74 65 54 69 6d 65 28  urn GetDateTime(
13bc0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
13bd0 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
13be0 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a  Affinity.Double:
13bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
13c00 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
13c10 6e 20 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74  n GetDouble(stmt
13c20 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
13c30 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
13c40 65 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47  ert.ChangeType(G
13c50 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69  etDouble(stmt, i
13c60 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b  ndex), t, null);
13c70 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
13c80 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
13c90 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  4:..          if
13ca0 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74   (t == null) ret
13cb0 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74 6d  urn GetInt64(stm
13cc0 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
13cd0 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
13ce0 79 70 65 6f 66 28 53 42 79 74 65 29 29 20 72 65  ypeof(SByte)) re
13cf0 74 75 72 6e 20 47 65 74 53 42 79 74 65 28 73 74  turn GetSByte(st
13d00 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
13d10 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
13d20 74 79 70 65 6f 66 28 42 79 74 65 29 29 20 72 65  typeof(Byte)) re
13d30 74 75 72 6e 20 47 65 74 42 79 74 65 28 73 74 6d  turn GetByte(stm
13d40 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
13d50 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
13d60 79 70 65 6f 66 28 49 6e 74 31 36 29 29 20 72 65  ypeof(Int16)) re
13d70 74 75 72 6e 20 47 65 74 49 6e 74 31 36 28 73 74  turn GetInt16(st
13d80 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
13d90 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
13da0 74 79 70 65 6f 66 28 55 49 6e 74 31 36 29 29 20  typeof(UInt16)) 
13db0 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 31 36  return GetUInt16
13dc0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
13dd0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
13de0 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74 33 32 29  == typeof(Int32)
13df0 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 33  ) return GetInt3
13e00 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  2(stmt, index);.
13e10 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
13e20 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 33   == typeof(UInt3
13e30 32 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49  2)) return GetUI
13e40 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
13e50 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
13e60 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49   (t == typeof(UI
13e70 6e 74 36 34 29 29 20 72 65 74 75 72 6e 20 47 65  nt64)) return Ge
13e80 74 55 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e  tUInt64(stmt, in
13e90 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
13ea0 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
13eb0 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 49 6e  ChangeType(GetIn
13ec0 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
13ed0 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  , t, null);..   
13ee0 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20       default:.. 
13ef0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
13f00 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
13f10 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  dex);..      }..
13f20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
13f30 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
13f40 6e 74 20 47 65 74 43 75 72 73 6f 72 46 6f 72 54  nt GetCursorForT
13f50 61 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65  able(SQLiteState
13f60 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 64  ment stmt, int d
13f70 62 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67 65 29  b, int rootPage)
13f80 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
13f90 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
13fa0 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
13fb0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13fc0 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 75  sqlite3_table_cu
13fd0 72 73 6f 72 5f 69 6e 74 65 72 6f 70 28 73 74 6d  rsor_interop(stm
13fe0 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
13ff0 64 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a  db, rootPage);..
14000 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
14010 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d  urn -1;..#endif.
14020 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
14030 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
14040 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 6f 72  long GetRowIdFor
14050 43 75 72 73 6f 72 28 53 51 4c 69 74 65 53 74 61  Cursor(SQLiteSta
14060 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
14070 20 63 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d   cursor)..    {.
14080 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
14090 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e  NDARD..      lon
140a0 67 20 72 6f 77 69 64 3b 0d 0a 20 20 20 20 20 20  g rowid;..      
140b0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
140c0 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
140d0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
140e0 5f 63 75 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e  _cursor_rowid_in
140f0 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
14100 74 65 5f 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c  te_stmt, cursor,
14110 20 6f 75 74 20 72 6f 77 69 64 29 3b 0d 0a 20 20   out rowid);..  
14120 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51      if (rc == SQ
14130 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
14140 29 20 72 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d  ) return rowid;.
14150 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
14160 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  0;..#else..     
14170 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64   return 0;..#end
14180 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
14190 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
141a0 64 65 20 76 6f 69 64 20 47 65 74 49 6e 64 65 78  de void GetIndex
141b0 43 6f 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e  ColumnExtendedIn
141c0 66 6f 28 73 74 72 69 6e 67 20 64 61 74 61 62 61  fo(string databa
141d0 73 65 2c 20 73 74 72 69 6e 67 20 69 6e 64 65 78  se, string index
141e0 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c  , string column,
141f0 20 6f 75 74 20 69 6e 74 20 73 6f 72 74 4d 6f 64   out int sortMod
14200 65 2c 20 6f 75 74 20 69 6e 74 20 6f 6e 45 72 72  e, out int onErr
14210 6f 72 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63  or, out string c
14220 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
14230 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
14240 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
14250 20 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c        IntPtr col
14260 6c 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 6f  l;..      int co
14270 6c 6c 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 53 51  lllen;..      SQ
14280 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
14290 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 63 20 3d 20  ;....      rc = 
142a0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
142b0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
142c0 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e  x_column_info_in
142d0 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
142e0 46 38 28 64 61 74 61 62 61 73 65 29 2c 20 54 6f  F8(database), To
142f0 55 54 46 38 28 69 6e 64 65 78 29 2c 20 54 6f 55  UTF8(index), ToU
14300 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74  TF8(column), out
14310 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74 20 6f   sortMode, out o
14320 6e 45 72 72 6f 72 2c 20 6f 75 74 20 63 6f 6c 6c  nError, out coll
14330 2c 20 6f 75 74 20 63 6f 6c 6c 6c 65 6e 29 3b 0d  , out colllen);.
14340 0a 20 20 20 20 20 20 69 66 20 28 72 63 20 21 3d  .      if (rc !=
14350 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
14360 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
14370 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72  QLiteException(r
14380 63 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  c, null);....   
14390 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75     collationSequ
143a0 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72  ence = UTF8ToStr
143b0 69 6e 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65  ing(coll, collle
143c0 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
143d0 20 20 73 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d    sortMode = 0;.
143e0 0a 20 20 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d  .      onError =
143f0 20 32 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61   2;..      colla
14400 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 22  tionSequence = "
14410 42 49 4e 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66  BINARY";..#endif
14420 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
14430 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
14440 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
14450 20 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72   FileControl(str
14460 69 6e 67 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74  ing zDbName, int
14470 20 6f 70 2c 20 49 6e 74 50 74 72 20 70 41 72 67   op, IntPtr pArg
14480 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
14490 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
144a0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
144b0 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
144c0 5f 73 71 6c 2c 20 28 7a 44 62 4e 61 6d 65 20 21  _sql, (zDbName !
144d0 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 55 54 46 38  = null) ? ToUTF8
144e0 28 7a 44 62 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c  (zDbName) : null
144f0 2c 20 6f 70 2c 20 70 41 72 67 29 3b 0d 0a 20 20  , op, pArg);..  
14500 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a             }..  }..}..