System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 92d50f2db715bdbf5d2e0469bfd8b3ceae8c2854:


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 69 73 20 66 69 65 6c 64    /// This field
0aa0: 20 77 69 6c 6c 20 62 65 20 6e 6f 6e 2d 7a 65 72   will be non-zer
0ab0: 6f 20 69 66 20 74 68 69 73 20 69 6e 73 74 61 6e  o if this instan
0ac0: 63 65 20 6f 77 6e 73 20 74 68 65 20 6e 61 74 69  ce owns the nati
0ad0: 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20  ve connection.. 
0ae0: 20 20 20 2f 2f 2f 20 68 61 6e 64 6c 65 20 61 6e     /// handle an
0af0: 64 20 73 68 6f 75 6c 64 20 64 69 73 70 6f 73 65  d should dispose
0b00: 20 6f 66 20 69 74 20 77 68 65 6e 20 69 74 20 69   of it when it i
0b10: 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 6e 65 65 64  s no longer need
0b20: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ed...    /// </s
0b30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f  ummary>..    pro
0b40: 74 65 63 74 65 64 20 62 6f 6f 6c 20 5f 6f 77 6e  tected bool _own
0b50: 48 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 2f  Handle;....    /
0b60: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0b70: 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72 2d 64    /// The user-d
0b80: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
0b90: 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e 20 74   registered on t
0ba0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  his connection..
0bb0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0bc0: 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  y>..    protecte
0bd0: 64 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  d SQLiteFunction
0be0: 5b 5d 20 5f 66 75 6e 63 74 69 6f 6e 73 41 72 72  [] _functionsArr
0bf0: 61 79 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ay;....    /// <
0c00: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0c10: 2f 20 54 68 65 20 6d 6f 64 75 6c 65 73 20 63 72  / The modules cr
0c20: 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 69 73  eated using this
0c30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
0c40: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0c50: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
0c60: 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
0c70: 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 42  g, SQLiteModuleB
0c80: 61 73 65 3e 20 5f 6d 6f 64 75 6c 65 73 3b 0d 0a  ase> _modules;..
0c90: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
0ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cf0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74  /////....    int
0d00: 65 72 6e 61 6c 20 53 51 4c 69 74 65 33 28 0d 0a  ernal SQLite3(..
0d10: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61          SQLiteDa
0d20: 74 65 46 6f 72 6d 61 74 73 20 66 6d 74 2c 0d 0a  teFormats fmt,..
0d30: 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65          DateTime
0d40: 4b 69 6e 64 20 6b 69 6e 64 2c 0d 0a 20 20 20 20  Kind kind,..    
0d50: 20 20 20 20 73 74 72 69 6e 67 20 66 6d 74 53 74      string fmtSt
0d60: 72 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 49  ring,..        I
0d70: 6e 74 50 74 72 20 64 62 2c 0d 0a 20 20 20 20 20  ntPtr db,..     
0d80: 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
0d90: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f  me,..        boo
0da0: 6c 20 6f 77 6e 48 61 6e 64 6c 65 0d 0a 20 20 20  l ownHandle..   
0db0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 3a 20       )..      : 
0dc0: 62 61 73 65 28 66 6d 74 2c 20 6b 69 6e 64 2c 20  base(fmt, kind, 
0dd0: 66 6d 74 53 74 72 69 6e 67 29 0d 0a 20 20 20 20  fmtString)..    
0de0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  {..        if (d
0df0: 62 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  b != IntPtr.Zero
0e00: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
0e10: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d            _sql =
0e20: 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65   new SQLiteConne
0e30: 63 74 69 6f 6e 48 61 6e 64 6c 65 28 64 62 2c 20  ctionHandle(db, 
0e40: 6f 77 6e 48 61 6e 64 6c 65 29 3b 0d 0a 20 20 20  ownHandle);..   
0e50: 20 20 20 20 20 20 20 20 20 5f 66 69 6c 65 4e 61           _fileNa
0e60: 6d 65 20 3d 20 66 69 6c 65 4e 61 6d 65 3b 0d 0a  me = fileName;..
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 5f 6f 77 6e              _own
0e80: 48 61 6e 64 6c 65 20 3d 20 6f 77 6e 48 61 6e 64  Handle = ownHand
0e90: 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  le;..        }..
0ea0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
0eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0f10: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73      #region IDis
0f20: 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e  posable "Pattern
0f30: 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 70  " Members..    p
0f40: 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70  rivate bool disp
0f50: 6f 73 65 64 3b 0d 0a 20 20 20 20 70 72 69 76 61  osed;..    priva
0f60: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73  te void CheckDis
0f70: 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77  posed() /* throw
0f80: 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20   */..    {..#if 
0f90: 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45  THROW_ON_DISPOSE
0fa0: 44 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  D..        if (d
0fb0: 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
0fc0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
0fd0: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
0fe0: 63 65 70 74 69 6f 6e 28 74 79 70 65 6f 66 28 53  ception(typeof(S
0ff0: 51 4c 69 74 65 33 29 2e 4e 61 6d 65 29 3b 0d 0a  QLite3).Name);..
1000: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
1010: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
1020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1070: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70 72 6f 74  ////....    prot
1080: 65 63 74 65 64 20 6f 76 65 72 72 69 64 65 20 76  ected override v
1090: 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c  oid Dispose(bool
10a0: 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20   disposing)..   
10b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d   {..        try.
10c0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
10d0: 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
10e0: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
10f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1100: 20 20 20 20 20 20 20 2f 2f 69 66 20 28 64 69 73         //if (dis
1110: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
1120: 20 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20           //{..  
1130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1140: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
1170: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1180: 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67  // dispose manag
1190: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
11a0: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
11b0: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f        //    ////
11c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11f0: 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20    //}....       
1200: 20 20 20 20 20 20 20 20 20 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 0d  ///////////////.
1230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1240: 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61   // release unma
1250: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
1260: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
1270: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
12a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12b0: 20 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20     if (_modules 
12c0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
12d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
12e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f0: 20 66 6f 72 65 61 63 68 20 28 4b 65 79 56 61 6c   foreach (KeyVal
1300: 75 65 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 53  uePair<string, S
1310: 51 4c 69 74 65 4d 6f 64 75 6c 65 42 61 73 65 3e  QLiteModuleBase>
1320: 20 70 61 69 72 20 69 6e 20 5f 6d 6f 64 75 6c 65   pair in _module
1330: 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
1340: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1360: 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 42     SQLiteModuleB
1370: 61 73 65 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69  ase module = pai
1380: 72 2e 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  r.Value;....    
1390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a0: 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
13b0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
13c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d0: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
13e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13f0: 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
1400: 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
1410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1420: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1430: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1440: 20 20 20 20 20 20 20 20 20 43 6c 6f 73 65 28 66           Close(f
1450: 61 6c 73 65 29 3b 20 2f 2a 20 44 69 73 70 6f 73  alse); /* Dispos
1460: 69 6e 67 2c 20 63 61 6e 6e 6f 74 20 74 68 72 6f  ing, cannot thro
1470: 77 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  w. */....       
1480: 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65           dispose
1490: 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
14a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
14b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
14c0: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ally..        {.
14d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61 73  .            bas
14e0: 65 2e 44 69 73 70 6f 73 65 28 64 69 73 70 6f 73  e.Dispose(dispos
14f0: 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ing);..        }
1500: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
1510: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
1520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1580: 0d 0a 20 20 20 20 2f 2f 20 49 74 20 69 73 6e 27  ..    // It isn'
1590: 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63  t necessary to c
15a0: 6c 65 61 6e 75 70 20 61 6e 79 20 66 75 6e 63 74  leanup any funct
15b0: 69 6f 6e 73 20 77 65 27 76 65 20 72 65 67 69 73  ions we've regis
15c0: 74 65 72 65 64 2e 20 20 49 66 20 74 68 65 20 63  tered.  If the c
15d0: 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f  onnection..    /
15e0: 2f 20 67 6f 65 73 20 74 6f 20 74 68 65 20 70 6f  / goes to the po
15f0: 6f 6c 20 61 6e 64 20 69 73 20 72 65 73 75 72 72  ol and is resurr
1600: 65 63 74 65 64 20 6c 61 74 65 72 2c 20 72 65 2d  ected later, re-
1610: 72 65 67 69 73 74 65 72 65 64 20 66 75 6e 63 74  registered funct
1620: 69 6f 6e 73 20 77 69 6c 6c 20 6f 76 65 72 77 72  ions will overwr
1630: 69 74 65 20 74 68 65 0d 0a 20 20 20 20 2f 2f 20  ite the..    // 
1640: 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f  previous functio
1650: 6e 73 2e 20 20 54 68 65 20 53 51 4c 69 74 65 46  ns.  The SQLiteF
1660: 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69 65 48 61 6e  unctionCookieHan
1670: 64 6c 65 20 77 69 6c 6c 20 74 61 6b 65 20 63 61  dle will take ca
1680: 72 65 20 6f 66 20 66 72 65 65 69 6e 67 20 75 6e  re of freeing un
1690: 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 2f 2f 20  managed..    // 
16a0: 72 65 73 6f 75 72 63 65 73 20 62 65 6c 6f 6e 67  resources belong
16b0: 69 6e 67 20 74 6f 20 74 68 65 20 70 72 65 76 69  ing to the previ
16c0: 6f 75 73 6c 79 2d 72 65 67 69 73 74 65 72 65 64  ously-registered
16d0: 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20   functions...   
16e0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
16f0: 64 65 20 76 6f 69 64 20 43 6c 6f 73 65 28 62 6f  de void Close(bo
1700: 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20 20  ol canThrow)..  
1710: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 21    {..      if (!
1720: 5f 6f 77 6e 48 61 6e 64 6c 65 29 0d 0a 20 20 20  _ownHandle)..   
1730: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
1740: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 21        if (_sql !
1750: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b  = null)..      {
1760: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
1770: 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20  _usePool)..     
1780: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1790: 20 20 20 20 20 20 69 66 20 28 53 51 4c 69 74 65        if (SQLite
17a0: 42 61 73 65 2e 52 65 73 65 74 43 6f 6e 6e 65 63  Base.ResetConnec
17b0: 74 69 6f 6e 28 5f 73 71 6c 2c 20 5f 73 71 6c 2c  tion(_sql, _sql,
17c0: 20 63 61 6e 54 68 72 6f 77 29 29 0d 0a 20 20 20   canThrow))..   
17d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1800: 50 6f 6f 6c 2e 41 64 64 28 5f 66 69 6c 65 4e 61  Pool.Add(_fileNa
1810: 6d 65 2c 20 5f 73 71 6c 2c 20 5f 70 6f 6f 6c 56  me, _sql, _poolV
1820: 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 23 69 66 20  ersion);....#if 
1830: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
1840: 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
1850: 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ION..           
1860: 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
1870: 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f  teLine(String.Fo
1880: 72 6d 61 74 28 22 43 6c 6f 73 65 20 28 50 6f 6f  rmat("Close (Poo
1890: 6c 29 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22  l) Success: {0}"
18a0: 2c 20 5f 73 71 6c 29 29 3b 0d 0a 23 65 6e 64 69  , _sql));..#endi
18b0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
18c0: 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d   }..#if !NET_COM
18d0: 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
18e0: 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
18f0: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
1900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
1910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1920: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
1930: 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ine(String.Forma
1940: 74 28 22 43 6c 6f 73 65 20 28 50 6f 6f 6c 29 20  t("Close (Pool) 
1950: 46 61 69 6c 75 72 65 3a 20 7b 30 7d 22 2c 20 5f  Failure: {0}", _
1960: 73 71 6c 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  sql));..        
1970: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
1980: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
1990: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
19a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19b0: 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2e 44 69           _sql.Di
19c0: 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  spose();..      
19d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
19e0: 20 5f 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20   _sql = null;.. 
19f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
1a00: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
1a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a60: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ////....    inte
1a70: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
1a80: 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20  id Cancel()..   
1a90: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
1aa0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1ab0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
1ac0: 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  _sql);..    }...
1ad0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1ae0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 56 65  erride string Ve
1af0: 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20  rsion..    {..  
1b00: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
1b10: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1b20: 20 53 51 4c 69 74 65 33 2e 53 51 4c 69 74 65 56   SQLite3.SQLiteV
1b30: 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 7d  ersion;..      }
1b40: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1b50: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1b60: 20 69 6e 74 20 56 65 72 73 69 6f 6e 4e 75 6d 62   int VersionNumb
1b70: 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  er..    {..     
1b80: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
1b90: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
1ba0: 4c 69 74 65 33 2e 53 51 4c 69 74 65 56 65 72 73  Lite3.SQLiteVers
1bb0: 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20  ionNumber;..    
1bc0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
1bd0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
1be0: 63 20 73 74 72 69 6e 67 20 44 65 66 69 6e 65 43  c string DefineC
1bf0: 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 7b 0d  onstants..    {.
1c00: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
1c10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c20: 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64       StringBuild
1c30: 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  er result = new 
1c40: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b  StringBuilder();
1c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4c  ..            IL
1c60: 69 73 74 3c 73 74 72 69 6e 67 3e 20 6c 69 73 74  ist<string> list
1c70: 20 3d 20 53 51 4c 69 74 65 44 65 66 69 6e 65 43   = SQLiteDefineC
1c80: 6f 6e 73 74 61 6e 74 73 2e 4f 70 74 69 6f 6e 4c  onstants.OptionL
1c90: 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ist;....        
1ca0: 20 20 20 20 69 66 20 28 6c 69 73 74 20 21 3d 20      if (list != 
1cb0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1cc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1cd0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 73        foreach (s
1ce0: 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 20 69 6e  tring element in
1cf0: 20 6c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20   list)..        
1d00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1d20: 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75  f (element == nu
1d30: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1d50: 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
1d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1d70: 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20   (result.Length 
1d80: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
1d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1da0: 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29  sult.Append(' ')
1db0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1dc0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
1dd0: 41 70 70 65 6e 64 28 65 6c 65 6d 65 6e 74 29 3b  Append(element);
1de0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1df0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1e00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1e10: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e    return result.
1e20: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
1e30: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
1e40: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
1e50: 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69  atic string SQLi
1e60: 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b  teVersion..    {
1e70: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
1e80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
1e90: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
1ea0: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
1eb0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69  thods.sqlite3_li
1ec0: 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b  bversion(), -1);
1ed0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
1ee0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
1ef0: 20 73 74 61 74 69 63 20 69 6e 74 20 53 51 4c 69   static int SQLi
1f00: 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 0d  teVersionNumber.
1f10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
1f20: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
1f30: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
1f40: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1f50: 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f  qlite3_libversio
1f60: 6e 5f 6e 75 6d 62 65 72 28 29 3b 0d 0a 20 20 20  n_number();..   
1f70: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
1f80: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
1f90: 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65  ic string SQLite
1fa0: 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d  SourceId..    {.
1fb0: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
1fc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
1fd0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
1fe0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
1ff0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 6f 75  hods.sqlite3_sou
2000: 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 20  rceid(), -1);.. 
2010: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2020: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
2030: 65 72 72 69 64 65 20 62 6f 6f 6c 20 41 75 74 6f  erride bool Auto
2040: 43 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d 0a 20  Commit..    {.. 
2050: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
2060: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
2070: 6e 20 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28 5f  n IsAutocommit(_
2080: 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20  sql, _sql);..   
2090: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
20a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
20b0: 72 69 64 65 20 6c 6f 6e 67 20 4c 61 73 74 49 6e  ride long LastIn
20c0: 73 65 72 74 52 6f 77 49 64 0d 0a 20 20 20 20 7b  sertRowId..    {
20d0: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
20e0: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
20f0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
2100: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 72 65  WORK..        re
2110: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
2120: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
2130: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
2140: 69 64 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 69 66  id(_sql);..#elif
2150: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
2160: 44 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67 20  D..        long 
2170: 72 6f 77 49 64 20 3d 20 30 3b 0d 0a 20 20 20 20  rowId = 0;..    
2180: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
2190: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
21a0: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
21b0: 64 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  d_interop(_sql, 
21c0: 72 65 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20  ref rowId);..   
21d0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 6f 77 49       return rowI
21e0: 64 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  d;..#else..     
21f0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
2200: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
2210: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
2220: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
2230: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2240: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 68 61  override int Cha
2250: 6e 67 65 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  nges..    {..   
2260: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
2270: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
2280: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 72  NDARD..        r
2290: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
22a0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
22b0: 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f  3_changes_intero
22c0: 70 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 73 65 0d  p(_sql);..#else.
22d0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
22e0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
22f0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e  ods.sqlite3_chan
2300: 67 65 73 28 5f 73 71 6c 29 3b 0d 0a 23 65 6e 64  ges(_sql);..#end
2310: 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  if..      }..   
2320: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
2330: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
2340: 20 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20   MemoryUsed..   
2350: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
2360: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
2370: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
2380: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
2390: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
23a0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
23b0: 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 28 29  e3_memory_used()
23c0: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
23d0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
23e0: 20 20 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20     long bytes = 
23f0: 30 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61  0;..        Unsa
2400: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2410: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75  sqlite3_memory_u
2420: 73 65 64 5f 69 6e 74 65 72 6f 70 28 72 65 66 20  sed_interop(ref 
2430: 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20  bytes);..       
2440: 20 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a   return bytes;..
2450: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74  #else..        t
2460: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
2470: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
2480: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
2490: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
24a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
24b0: 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79  ride long Memory
24c0: 48 69 67 68 77 61 74 65 72 0d 0a 20 20 20 20 7b  Highwater..    {
24d0: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
24e0: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
24f0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
2500: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 72 65  WORK..        re
2510: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
2520: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
2530: 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65  _memory_highwate
2540: 72 28 30 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  r(0);..#elif !SQ
2550: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
2560: 20 20 20 20 20 20 20 6c 6f 6e 67 20 62 79 74 65         long byte
2570: 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  s = 0;..        
2580: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2590: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f  ods.sqlite3_memo
25a0: 72 79 5f 68 69 67 68 77 61 74 65 72 5f 69 6e 74  ry_highwater_int
25b0: 65 72 6f 70 28 30 2c 20 72 65 66 20 62 79 74 65  erop(0, ref byte
25c0: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  s);..        ret
25d0: 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23 65 6c 73  urn bytes;..#els
25e0: 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  e..        throw
25f0: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
2600: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
2610: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d  .#endif..      }
2620: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
2630: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
2640: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2650: 20 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73   SetMemoryStatus
2660: 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20  (bool value)..  
2670: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
2680: 75 72 6e 20 53 74 61 74 69 63 53 65 74 4d 65 6d  urn StaticSetMem
2690: 6f 72 79 53 74 61 74 75 73 28 76 61 6c 75 65 29  oryStatus(value)
26a0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
26b0: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
26c0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
26d0: 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53  StaticSetMemoryS
26e0: 74 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65  tatus(bool value
26f0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
2700: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
2710: 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
2720: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2730: 65 33 5f 63 6f 6e 66 69 67 5f 69 6e 74 28 0d 0a  e3_config_int(..
2740: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
2750: 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e  teConfigOpsEnum.
2760: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45  SQLITE_CONFIG_ME
2770: 4d 53 54 41 54 55 53 2c 20 76 61 6c 75 65 20 3f  MSTATUS, value ?
2780: 20 31 20 3a 20 30 29 3b 0d 0a 0d 0a 20 20 20 20   1 : 0);....    
2790: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a      return rc;..
27a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
27b0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
27c0: 2f 2f 2f 20 53 68 75 74 64 6f 77 6e 20 74 68 65  /// Shutdown the
27d0: 20 53 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 73   SQLite engine s
27e0: 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
27f0: 20 72 65 73 74 61 72 74 65 64 20 77 69 74 68 20   restarted with 
2800: 64 69 66 66 65 72 65 6e 74 20 63 6f 6e 66 69 67  different config
2810: 20 6f 70 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f   options...    /
2820: 2f 2f 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20  // We depend on 
2830: 61 75 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74  auto initializat
2840: 69 6f 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d  ion to recover..
2850: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
2860: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
2870: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20  turns>Returns a 
2880: 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74  result code</ret
2890: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
28a0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
28b0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 68 75  iteErrorCode Shu
28c0: 74 64 6f 77 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a  tdown()..    {..
28d0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
28e0: 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
28f0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2900: 2e 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77  .sqlite3_shutdow
2910: 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  n();..        re
2920: 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d  turn rc;..    }.
2930: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2940: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
2950: 4f 70 65 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Open()..    {.. 
2960: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 5f         return (_
2970: 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20  sql != null) && 
2980: 21 5f 73 71 6c 2e 49 73 49 6e 76 61 6c 69 64 20  !_sql.IsInvalid 
2990: 26 26 20 21 5f 73 71 6c 2e 49 73 43 6c 6f 73 65  && !_sql.IsClose
29a0: 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  d;..    }....   
29b0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
29c0: 64 65 20 76 6f 69 64 20 4f 70 65 6e 28 73 74 72  de void Open(str
29d0: 69 6e 67 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c  ing strFilename,
29e0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
29f0: 6e 46 6c 61 67 73 20 63 6f 6e 6e 65 63 74 69 6f  nFlags connectio
2a00: 6e 46 6c 61 67 73 2c 20 53 51 4c 69 74 65 4f 70  nFlags, SQLiteOp
2a10: 65 6e 46 6c 61 67 73 45 6e 75 6d 20 6f 70 65 6e  enFlagsEnum open
2a20: 46 6c 61 67 73 2c 20 69 6e 74 20 6d 61 78 50 6f  Flags, int maxPo
2a30: 6f 6c 53 69 7a 65 2c 20 62 6f 6f 6c 20 75 73 65  olSize, bool use
2a40: 50 6f 6f 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Pool)..    {..  
2a50: 20 20 20 20 69 66 20 28 5f 73 71 6c 20 21 3d 20      if (_sql != 
2a60: 6e 75 6c 6c 29 20 72 65 74 75 72 6e 3b 0d 0a 0d  null) return;...
2a70: 0a 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20  .      _usePool 
2a80: 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20  = usePool;..    
2a90: 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 73 74    _fileName = st
2aa0: 72 46 69 6c 65 6e 61 6d 65 3b 0d 0a 0d 0a 20 20  rFilename;....  
2ab0: 20 20 20 20 69 66 20 28 75 73 65 50 6f 6f 6c 29      if (usePool)
2ac0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
2ad0: 20 20 20 5f 73 71 6c 20 3d 20 53 51 4c 69 74 65     _sql = SQLite
2ae0: 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 52  ConnectionPool.R
2af0: 65 6d 6f 76 65 28 73 74 72 46 69 6c 65 6e 61 6d  emove(strFilenam
2b00: 65 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20  e, maxPoolSize, 
2b10: 6f 75 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e  out _poolVersion
2b20: 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  );....#if !NET_C
2b30: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
2b40: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
2b50: 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
2b60: 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f  teLine(String.Fo
2b70: 72 6d 61 74 28 22 4f 70 65 6e 20 28 50 6f 6f 6c  rmat("Open (Pool
2b80: 29 3a 20 7b 30 7d 22 2c 20 28 5f 73 71 6c 20 21  ): {0}", (_sql !
2b90: 3d 20 6e 75 6c 6c 29 20 3f 20 5f 73 71 6c 2e 54  = null) ? _sql.T
2ba0: 6f 53 74 72 69 6e 67 28 29 20 3a 20 22 3c 6e 75  oString() : "<nu
2bb0: 6c 6c 3e 22 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ll>"));..#endif.
2bc0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
2bd0: 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75    if (_sql == nu
2be0: 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ll)..      {..  
2bf0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
2c00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2c10: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
2c20: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
2c30: 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20       finally /* 
2c40: 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f  NOTE: Thread.Abo
2c50: 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e  rt() protection.
2c60: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
2c70: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2c80: 20 64 62 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   db;..          
2c90: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2ca0: 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  n;....#if !SQLIT
2cb0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
2cc0: 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 6e 65        if ((conne
2cd0: 63 74 69 6f 6e 46 6c 61 67 73 20 26 20 53 51 4c  ctionFlags & SQL
2ce0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
2cf0: 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75  gs.NoExtensionFu
2d00: 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69  nctions) != SQLi
2d10: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
2d20: 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e  s.NoExtensionFun
2d30: 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20  ctions)..       
2d40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d50: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
2d60: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
2d70: 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28 54  3_open_interop(T
2d80: 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e 61 6d  oUTF8(strFilenam
2d90: 65 29 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 6f  e), openFlags, o
2da0: 75 74 20 64 62 29 3b 0d 0a 20 20 20 20 20 20 20  ut db);..       
2db0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2dc0: 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  else..#endif..  
2dd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2de0: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
2df0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
2e00: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 54  qlite3_open_v2(T
2e10: 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e 61 6d  oUTF8(strFilenam
2e20: 65 29 2c 20 6f 75 74 20 64 62 2c 20 6f 70 65 6e  e), out db, open
2e30: 46 6c 61 67 73 2c 20 49 6e 74 50 74 72 2e 5a 65  Flags, IntPtr.Ze
2e40: 72 6f 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ro);..          
2e50: 7d 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  }....#if !NET_CO
2e60: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
2e70: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
2e80: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
2e90: 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46  iteLine(String.F
2ea0: 6f 72 6d 61 74 28 22 4f 70 65 6e 3a 20 7b 30 7d  ormat("Open: {0}
2eb0: 22 2c 20 64 62 29 29 3b 0d 0a 23 65 6e 64 69 66  ", db));..#endif
2ec0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
2ed0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
2ee0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
2ef0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
2f00: 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a  tion(n, null);..
2f10: 20 20 20 20 20 20 20 20 20 20 5f 6f 77 6e 48 61            _ownHa
2f20: 6e 64 6c 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20  ndle = true;..  
2f30: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
2f40: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
2f50: 69 6f 6e 48 61 6e 64 6c 65 28 64 62 2c 20 5f 6f  ionHandle(db, _o
2f60: 77 6e 48 61 6e 64 6c 65 29 3b 0d 0a 20 20 20 20  wnHandle);..    
2f70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 6c      }..        l
2f80: 6f 63 6b 20 28 5f 73 71 6c 29 20 7b 20 2f 2a 20  ock (_sql) { /* 
2f90: 48 41 43 4b 3a 20 46 6f 72 63 65 20 74 68 65 20  HACK: Force the 
2fa0: 53 79 6e 63 42 6c 6f 63 6b 20 74 6f 20 62 65 20  SyncBlock to be 
2fb0: 22 63 72 65 61 74 65 64 22 20 6e 6f 77 2e 20 2a  "created" now. *
2fc0: 2f 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  / }..      }..  
2fd0: 20 20 20 20 2f 2f 20 42 69 6e 64 20 66 75 6e 63      // Bind func
2fe0: 74 69 6f 6e 73 20 74 6f 20 74 68 69 73 20 63 6f  tions to this co
2ff0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 61 6e  nnection.  If an
3000: 79 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74  y previous funct
3010: 69 6f 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 65  ions of the same
3020: 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 20   name..      // 
3030: 77 65 72 65 20 61 6c 72 65 61 64 79 20 62 6f 75  were already bou
3040: 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 65 77  nd, then the new
3050: 20 62 69 6e 64 69 6e 67 73 20 72 65 70 6c 61 63   bindings replac
3060: 65 20 74 68 65 20 6f 6c 64 2e 0d 0a 20 20 20 20  e the old...    
3070: 20 20 5f 66 75 6e 63 74 69 6f 6e 73 41 72 72 61    _functionsArra
3080: 79 20 3d 20 53 51 4c 69 74 65 46 75 6e 63 74 69  y = SQLiteFuncti
3090: 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73  on.BindFunctions
30a0: 28 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f  (this, connectio
30b0: 6e 46 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20  nFlags);..      
30c0: 53 65 74 54 69 6d 65 6f 75 74 28 30 29 3b 0d 0a  SetTimeout(0);..
30d0: 20 20 20 20 20 20 47 43 2e 4b 65 65 70 41 6c 69        GC.KeepAli
30e0: 76 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d  ve(_sql);..    }
30f0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
3100: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
3110: 6c 65 61 72 50 6f 6f 6c 28 29 0d 0a 20 20 20 20  learPool()..    
3120: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43  {..      SQLiteC
3130: 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c  onnectionPool.Cl
3140: 65 61 72 50 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d  earPool(_fileNam
3150: 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  e);..    }....  
3160: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
3170: 69 64 65 20 69 6e 74 20 43 6f 75 6e 74 50 6f 6f  ide int CountPoo
3180: 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  l()..    {..    
3190: 20 20 20 20 44 69 63 74 69 6f 6e 61 72 79 3c 73      Dictionary<s
31a0: 74 72 69 6e 67 2c 20 69 6e 74 3e 20 63 6f 75 6e  tring, int> coun
31b0: 74 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ts = null;..    
31c0: 20 20 20 20 69 6e 74 20 6f 70 65 6e 43 6f 75 6e      int openCoun
31d0: 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  t = 0;..        
31e0: 69 6e 74 20 63 6c 6f 73 65 43 6f 75 6e 74 20 3d  int closeCount =
31f0: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74   0;..        int
3200: 20 74 6f 74 61 6c 43 6f 75 6e 74 20 3d 20 30 3b   totalCount = 0;
3210: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
3220: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c  teConnectionPool
3230: 2e 47 65 74 43 6f 75 6e 74 73 28 5f 66 69 6c 65  .GetCounts(_file
3240: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
3250: 20 20 20 72 65 66 20 63 6f 75 6e 74 73 2c 20 72     ref counts, r
3260: 65 66 20 6f 70 65 6e 43 6f 75 6e 74 2c 20 72 65  ef openCount, re
3270: 66 20 63 6c 6f 73 65 43 6f 75 6e 74 2c 0d 0a 20  f closeCount,.. 
3280: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 74             ref t
3290: 6f 74 61 6c 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  otalCount);.... 
32a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 6f         return to
32b0: 74 61 6c 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 7d  talCount;..    }
32c0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
32d0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
32e0: 65 74 54 69 6d 65 6f 75 74 28 69 6e 74 20 6e 54  etTimeout(int nT
32f0: 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20 7b  imeoutMS)..    {
3300: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
3310: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
3320: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
3330: 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d  sqlite3_busy_tim
3340: 65 6f 75 74 28 5f 73 71 6c 2c 20 6e 54 69 6d 65  eout(_sql, nTime
3350: 6f 75 74 4d 53 29 3b 0d 0a 20 20 20 20 20 20 69  outMS);..      i
3360: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
3370: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
3380: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
3390: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
33a0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
33b0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
33c0: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53   override bool S
33d0: 74 65 70 28 53 51 4c 69 74 65 53 74 61 74 65 6d  tep(SQLiteStatem
33e0: 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b  ent stmt)..    {
33f0: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
3400: 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20 20  rorCode n;..    
3410: 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e    Random rnd = n
3420: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74  ull;..      uint
3430: 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28 75 69   starttick = (ui
3440: 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54  nt)Environment.T
3450: 69 63 6b 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20  ickCount;..     
3460: 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20   uint timeout = 
3470: 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d  (uint)(stmt._com
3480: 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d  mand._commandTim
3490: 65 6f 75 74 20 2a 20 31 30 30 30 29 3b 0d 0a 0d  eout * 1000);...
34a0: 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28 74 72  .      while (tr
34b0: 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ue)..      {..  
34c0: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
34d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
34e0: 6c 69 74 65 33 5f 73 74 65 70 28 73 74 6d 74 2e  lite3_step(stmt.
34f0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a  _sqlite_stmt);..
3500: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
3510: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
3520: 64 65 2e 52 6f 77 29 20 72 65 74 75 72 6e 20 74  de.Row) return t
3530: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  rue;..        if
3540: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
3550: 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 20 72 65 74  orCode.Done) ret
3560: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
3570: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
3580: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
3590: 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  k)..        {.. 
35a0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
35b0: 72 72 6f 72 43 6f 64 65 20 72 3b 0d 0a 0d 0a 20  rrorCode r;.... 
35c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 41 6e 20 65           // An e
35d0: 72 72 6f 72 20 6f 63 63 75 72 72 65 64 2c 20 61  rror occurred, a
35e0: 74 74 65 6d 70 74 20 74 6f 20 72 65 73 65 74 20  ttempt to reset 
35f0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  the statement.  
3600: 49 66 20 74 68 65 20 72 65 73 65 74 20 77 6f 72  If the reset wor
3610: 6b 65 64 20 62 65 63 61 75 73 65 20 74 68 65 0d  ked because the.
3620: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 73 63  .          // sc
3630: 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
3640: 2c 20 72 65 2d 74 72 79 20 74 68 65 20 73 74 65  , re-try the ste
3650: 70 20 61 67 61 69 6e 2e 20 20 49 66 20 69 74 20  p again.  If it 
3660: 65 72 72 6f 72 65 64 20 6f 75 72 20 62 65 63 61  errored our beca
3670: 75 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65  use the database
3680: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 69  ..          // i
3690: 73 20 6c 6f 63 6b 65 64 2c 20 74 68 65 6e 20 6b  s locked, then k
36a0: 65 65 70 20 72 65 74 72 79 69 6e 67 20 75 6e 74  eep retrying unt
36b0: 69 6c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74  il the command t
36c0: 69 6d 65 6f 75 74 20 6f 63 63 75 72 73 2e 0d 0a  imeout occurs...
36d0: 20 20 20 20 20 20 20 20 20 20 72 20 3d 20 52 65            r = Re
36e0: 73 65 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20  set(stmt);....  
36f0: 20 20 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d          if (r ==
3700: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
3710: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
3720: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
3730: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
3740: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
3750: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  ...          els
3760: 65 20 69 66 20 28 28 72 20 3d 3d 20 53 51 4c 69  e if ((r == SQLi
3770: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b  teErrorCode.Lock
3780: 65 64 20 7c 7c 20 72 20 3d 3d 20 53 51 4c 69 74  ed || r == SQLit
3790: 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29  eErrorCode.Busy)
37a0: 20 26 26 20 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e   && stmt._comman
37b0: 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  d != null)..    
37c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37d0: 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74 72 79       // Keep try
37e0: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
37f0: 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c   if (rnd == null
3800: 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d 65 20  ) // First time 
3810: 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65 72 65  we've encountere
3820: 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20  d the lock..    
3830: 20 20 20 20 20 20 20 20 20 20 72 6e 64 20 3d 20            rnd = 
3840: 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d  new Random();...
3850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
3860: 49 66 20 77 65 27 76 65 20 65 78 63 65 65 64 65  If we've exceede
3870: 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20  d the command's 
3880: 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20 75 70  timeout, give up
3890: 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20 65 72   and throw an er
38a0: 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
38b0: 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76 69 72   if ((uint)Envir
38c0: 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74  onment.TickCount
38d0: 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e 20 74   - starttick > t
38e0: 69 6d 65 6f 75 74 29 0d 0a 20 20 20 20 20 20 20  imeout)..       
38f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3900: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
3910: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
3920: 72 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  r, GetLastError(
3930: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
3940: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3950: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
3960: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3970: 20 20 20 2f 2f 20 4f 74 68 65 72 77 69 73 65 20     // Otherwise 
3980: 73 6c 65 65 70 20 66 6f 72 20 61 20 72 61 6e 64  sleep for a rand
3990: 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d  om amount of tim
39a0: 65 20 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20  e up to 150ms.. 
39b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
39c0: 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54 68  tem.Threading.Th
39d0: 72 65 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e  read.Sleep(rnd.N
39e0: 65 78 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20  ext(1, 150));.. 
39f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
3a00: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3a10: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
3a20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
3a30: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
3a40: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65  LiteErrorCode Re
3a50: 73 65 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d  set(SQLiteStatem
3a60: 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b  ent stmt)..    {
3a70: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
3a80: 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69  rorCode n;....#i
3a90: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
3aa0: 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e  RD..      n = Un
3ab0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
3ac0: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74 5f  s.sqlite3_reset_
3ad0: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
3ae0: 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c  lite_stmt);..#el
3af0: 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e  se..      n = Un
3b00: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
3b10: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28  s.sqlite3_reset(
3b20: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
3b30: 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  t);..#endif.... 
3b40: 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20 73       // If the s
3b50: 63 68 65 6d 61 20 63 68 61 6e 67 65 64 2c 20 74  chema changed, t
3b60: 72 79 20 61 6e 64 20 72 65 2d 70 72 65 70 61 72  ry and re-prepar
3b70: 65 20 69 74 0d 0a 20 20 20 20 20 20 69 66 20 28  e it..      if (
3b80: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
3b90: 43 6f 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20  Code.Schema)..  
3ba0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f      {..        /
3bb0: 2f 20 52 65 63 72 65 61 74 65 20 61 20 64 75 6d  / Recreate a dum
3bc0: 6d 79 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20  my statement..  
3bd0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72        string str
3be0: 3b 0d 0a 20 20 20 20 20 20 20 20 75 73 69 6e 67  ;..        using
3bf0: 20 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e   (SQLiteStatemen
3c00: 74 20 74 6d 70 20 3d 20 50 72 65 70 61 72 65 28  t tmp = Prepare(
3c10: 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73 71 6c 53  null, stmt._sqlS
3c20: 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c 6c 2c 20  tatement, null, 
3c30: 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d  (uint)(stmt._com
3c40: 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d  mand._commandTim
3c50: 65 6f 75 74 20 2a 20 31 30 30 30 29 2c 20 6f 75  eout * 1000), ou
3c60: 74 20 73 74 72 29 29 0d 0a 20 20 20 20 20 20 20  t str))..       
3c70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f   {..          //
3c80: 20 46 69 6e 61 6c 69 7a 65 20 74 68 65 20 65 78   Finalize the ex
3c90: 69 73 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  isting statement
3ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d 74  ..          stmt
3cb0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2e 44 69  ._sqlite_stmt.Di
3cc0: 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  spose();..      
3cd0: 20 20 20 20 2f 2f 20 52 65 61 73 73 69 67 6e 20      // Reassign 
3ce0: 61 20 6e 65 77 20 73 74 61 74 65 6d 65 6e 74 20  a new statement 
3cf0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6f  pointer to the o
3d00: 6c 64 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  ld statement and
3d10: 20 63 6c 65 61 72 20 74 68 65 20 74 65 6d 70 6f   clear the tempo
3d20: 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20 20 20 20  rary one..      
3d30: 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65      stmt._sqlite
3d40: 5f 73 74 6d 74 20 3d 20 74 6d 70 2e 5f 73 71 6c  _stmt = tmp._sql
3d50: 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20  ite_stmt;..     
3d60: 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c 69 74 65       tmp._sqlite
3d70: 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  _stmt = null;...
3d80: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65  .          // Re
3d90: 61 70 70 6c 79 20 70 61 72 61 6d 65 74 65 72 73  apply parameters
3da0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d 74  ..          stmt
3db0: 2e 42 69 6e 64 50 61 72 61 6d 65 74 65 72 73 28  .BindParameters(
3dc0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
3dd0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 53         return (S
3de0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 29 28  QLiteErrorCode)(
3df0: 2d 31 29 3b 20 2f 2f 20 52 65 73 65 74 20 77 61  -1); // Reset wa
3e00: 73 20 4f 4b 2c 20 77 69 74 68 20 73 63 68 65 6d  s OK, with schem
3e10: 61 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 20 20  a change..      
3e20: 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66  }..      else if
3e30: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
3e40: 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c  orCode.Locked ||
3e50: 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   n == SQLiteErro
3e60: 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20  rCode.Busy)..   
3e70: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a       return n;..
3e80: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
3e90: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
3ea0: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 74 68  .Ok)..        th
3eb0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
3ec0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
3ed0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
3ee0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
3ef0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 20  teErrorCode.Ok; 
3f00: 2f 2f 20 57 65 20 72 65 73 65 74 20 4f 4b 2c 20  // We reset OK, 
3f10: 6e 6f 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  no schema change
3f20: 73 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  s..    }....    
3f30: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
3f40: 65 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74  e string GetLast
3f50: 45 72 72 6f 72 28 29 0d 0a 20 20 20 20 7b 0d 0a  Error()..    {..
3f60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
3f70: 69 74 65 42 61 73 65 2e 47 65 74 4c 61 73 74 45  iteBase.GetLastE
3f80: 72 72 6f 72 28 5f 73 71 6c 2c 20 5f 73 71 6c 29  rror(_sql, _sql)
3f90: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
3fa0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
3fb0: 65 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e SQLiteStatemen
3fc0: 74 20 50 72 65 70 61 72 65 28 53 51 4c 69 74 65  t Prepare(SQLite
3fd0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20  Connection cnn, 
3fe0: 73 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 20 53  string strSql, S
3ff0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 70  QLiteStatement p
4000: 72 65 76 69 6f 75 73 2c 20 75 69 6e 74 20 74 69  revious, uint ti
4010: 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74 72  meoutMS, out str
4020: 69 6e 67 20 73 74 72 52 65 6d 61 69 6e 29 0d 0a  ing strRemain)..
4030: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20      {..      if 
4040: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
4050: 72 45 6d 70 74 79 28 73 74 72 53 71 6c 29 29 0d  rEmpty(strSql)).
4060: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
4070: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
4080: 20 4e 4f 54 45 3a 20 53 51 4c 69 74 65 20 64 6f   NOTE: SQLite do
4090: 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 74  es not support t
40a0: 68 65 20 63 6f 6e 63 65 70 74 20 6f 66 20 73 65  he concept of se
40b0: 70 61 72 61 74 65 20 73 63 68 65 6d 61 73 0d 0a  parate schemas..
40c0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
40d0: 20 69 6e 20 6f 6e 65 20 64 61 74 61 62 61 73 65   in one database
40e0: 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72 65 6d  ; therefore, rem
40f0: 6f 76 65 20 74 68 65 20 62 61 73 65 20 73 63 68  ove the base sch
4100: 65 6d 61 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20  ema name..      
4110: 20 20 2f 2f 20 20 20 20 20 20 20 75 73 65 64 20    //       used 
4120: 74 6f 20 73 6d 6f 6f 74 68 20 69 6e 74 65 67 72  to smooth integr
4130: 61 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 62  ation with the b
4140: 61 73 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  ase .NET Framewo
4150: 72 6b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  rk..        //  
4160: 20 20 20 20 20 64 61 74 61 20 63 6c 61 73 73 65       data classe
4170: 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  s...        //..
4180: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 62          string b
4190: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20  aseSchemaName = 
41a0: 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (cnn != null) ? 
41b0: 63 6e 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e  cnn._baseSchemaN
41c0: 61 6d 65 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ame : null;.... 
41d0: 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
41e0: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
41f0: 28 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29  (baseSchemaName)
4200: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
4210: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
4220: 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28   strSql.Replace(
4230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4240: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75  String.Format(Cu
4250: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
4260: 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  antCulture,..   
4270: 20 20 20 20 20 20 20 20 20 20 20 22 5b 7b 30 7d             "[{0}
4280: 5d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e  ].", baseSchemaN
4290: 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70  ame), String.Emp
42a0: 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ty);....        
42b0: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71    strSql = strSq
42c0: 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20  l.Replace(..    
42d0: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
42e0: 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  .Format(CultureI
42f0: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
4300: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
4310: 20 20 20 20 20 22 7b 30 7d 2e 22 2c 20 62 61 73       "{0}.", bas
4320: 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74  eSchemaName), St
4330: 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20  ring.Empty);..  
4340: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
4350: 0d 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  ....      SQLite
4360: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
4370: 66 6c 61 67 73 20 3d 0d 0a 20 20 20 20 20 20 20  flags =..       
4380: 20 20 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29     (cnn != null)
4390: 20 3f 20 63 6e 6e 2e 46 6c 61 67 73 20 3a 20 53   ? cnn.Flags : S
43a0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
43b0: 6c 61 67 73 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d  lags.Default;...
43c0: 0a 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67  .      if ((flag
43d0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
43e0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65  tionFlags.LogPre
43f0: 70 61 72 65 29 20 3d 3d 20 53 51 4c 69 74 65 43  pare) == SQLiteC
4400: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
4410: 6f 67 50 72 65 70 61 72 65 29 0d 0a 20 20 20 20  ogPrepare)..    
4420: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69    {..          i
4430: 66 20 28 28 73 74 72 53 71 6c 20 3d 3d 20 6e 75  f ((strSql == nu
4440: 6c 6c 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 4c  ll) || (strSql.L
4450: 65 6e 67 74 68 20 3d 3d 20 30 29 20 7c 7c 20 28  ength == 0) || (
4460: 73 74 72 53 71 6c 2e 54 72 69 6d 28 29 2e 4c 65  strSql.Trim().Le
4470: 6e 67 74 68 20 3d 3d 20 30 29 29 0d 0a 20 20 20  ngth == 0))..   
4480: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
4490: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
44a0: 22 50 72 65 70 61 72 69 6e 67 20 7b 3c 6e 6f 74  "Preparing {<not
44b0: 68 69 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20 20  hing>}...");..  
44c0: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
44e0: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
44f0: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
4500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4510: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
4520: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 20 22  urrentCulture, "
4530: 50 72 65 70 61 72 69 6e 67 20 7b 7b 7b 30 7d 7d  Preparing {{{0}}
4540: 7d 2e 2e 2e 22 2c 20 73 74 72 53 71 6c 29 29 3b  }...", strSql));
4550: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
4560: 20 20 20 49 6e 74 50 74 72 20 73 74 6d 74 20 3d     IntPtr stmt =
4570: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
4580: 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20       IntPtr ptr 
4590: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
45a0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
45b0: 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  0;..      SQLite
45c0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 53 51  ErrorCode n = SQ
45d0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63  LiteErrorCode.Sc
45e0: 68 65 6d 61 3b 0d 0a 20 20 20 20 20 20 69 6e 74  hema;..      int
45f0: 20 72 65 74 72 69 65 73 20 3d 20 30 3b 0d 0a 20   retries = 0;.. 
4600: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20       byte[] b = 
4610: 54 6f 55 54 46 38 28 73 74 72 53 71 6c 29 3b 0d  ToUTF8(strSql);.
4620: 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79  .      string ty
4630: 70 65 64 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a  pedefs = null;..
4640: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
4650: 65 6d 65 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c  ement cmd = null
4660: 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20  ;..      Random 
4670: 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  rnd = null;..   
4680: 20 20 20 75 69 6e 74 20 73 74 61 72 74 74 69 63     uint starttic
4690: 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f  k = (uint)Enviro
46a0: 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b  nment.TickCount;
46b0: 0d 0a 0d 0a 20 20 20 20 20 20 47 43 48 61 6e 64  ....      GCHand
46c0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 47 43 48 61  le handle = GCHa
46d0: 6e 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43  ndle.Alloc(b, GC
46e0: 48 61 6e 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65  HandleType.Pinne
46f0: 64 29 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  d);..      IntPt
4700: 72 20 70 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e  r psql = handle.
4710: 41 64 64 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65  AddrOfPinnedObje
4720: 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c  ct();..      SQL
4730: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
4740: 6c 65 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64  le statementHand
4750: 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  le = null;..    
4760: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a    try..      {..
4770: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 28          while ((
4780: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
4790: 43 6f 64 65 2e 53 63 68 65 6d 61 20 7c 7c 20 6e  Code.Schema || n
47a0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
47b0: 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20  ode.Locked || n 
47c0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
47d0: 64 65 2e 42 75 73 79 29 20 26 26 20 72 65 74 72  de.Busy) && retr
47e0: 69 65 73 20 3c 20 33 29 0d 0a 20 20 20 20 20 20  ies < 3)..      
47f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74    {..          t
4800: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ry..          {.
4810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
4820: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
4830: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4840: 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e      finally /* N
4850: 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72  OTE: Thread.Abor
4860: 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20  t() protection. 
4870: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  */..          {.
4880: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
4890: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
48a0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
48b0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
48c0: 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72  e3_prepare_inter
48d0: 6f 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62  op(_sql, psql, b
48e0: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74  .Length - 1, out
48f0: 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 2c 20   stmt, out ptr, 
4900: 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  out len);..#else
4910: 0d 0a 23 69 66 20 55 53 45 5f 50 52 45 50 41 52  ..#if USE_PREPAR
4920: 45 5f 56 32 0d 0a 20 20 20 20 20 20 20 20 20 20  E_V2..          
4930: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
4940: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4950: 33 5f 70 72 65 70 61 72 65 5f 76 32 28 5f 73 71  3_prepare_v2(_sq
4960: 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74  l, psql, b.Lengt
4970: 68 20 2d 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c  h - 1, out stmt,
4980: 20 6f 75 74 20 70 74 72 29 3b 0d 0a 23 65 6c 73   out ptr);..#els
4990: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  e..            n
49a0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
49b0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70  ethods.sqlite3_p
49c0: 72 65 70 61 72 65 28 5f 73 71 6c 2c 20 70 73 71  repare(_sql, psq
49d0: 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c  l, b.Length - 1,
49e0: 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75 74 20 70   out stmt, out p
49f0: 74 72 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  tr);..#endif..  
4a00: 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20            len = 
4a10: 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23  -1;..#endif....#
4a20: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
4a30: 32 30 20 26 26 20 54 52 41 43 45 5f 53 54 41 54  20 && TRACE_STAT
4a40: 45 4d 45 4e 54 0d 0a 20 20 20 20 20 20 20 20 20  EMENT..         
4a50: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
4a60: 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ne(String.Format
4a70: 28 22 50 72 65 70 61 72 65 20 28 7b 30 7d 29 3a  ("Prepare ({0}):
4a80: 20 7b 31 7d 22 2c 20 6e 2c 20 73 74 6d 74 29 29   {1}", n, stmt))
4a90: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
4aa0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20           if ((n 
4ab0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
4ac0: 64 65 2e 4f 6b 29 20 26 26 20 28 73 74 6d 74 20  de.Ok) && (stmt 
4ad0: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29  != IntPtr.Zero))
4ae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4af0: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  statementHandle 
4b00: 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74  = new SQLiteStat
4b10: 65 6d 65 6e 74 48 61 6e 64 6c 65 28 5f 73 71 6c  ementHandle(_sql
4b20: 2c 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20  , stmt);..      
4b30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4b40: 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
4b50: 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65  teErrorCode.Sche
4b60: 6d 61 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ma)..           
4b70: 20 72 65 74 72 69 65 73 2b 2b 3b 0d 0a 20 20 20   retries++;..   
4b80: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
4b90: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
4ba0: 43 6f 64 65 2e 45 72 72 6f 72 29 0d 0a 20 20 20  Code.Error)..   
4bb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4bc0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
4bd0: 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c 61 73 74  .Compare(GetLast
4be0: 45 72 72 6f 72 28 29 2c 20 22 6e 65 61 72 20 5c  Error(), "near \
4bf0: 22 54 59 50 45 53 5c 22 3a 20 73 79 6e 74 61 78  "TYPES\": syntax
4c00: 20 65 72 72 6f 72 22 2c 20 53 74 72 69 6e 67 43   error", StringC
4c10: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
4c20: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20  lIgnoreCase) == 
4c30: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
4c40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4c50: 20 69 6e 74 20 70 6f 73 20 3d 20 73 74 72 53 71   int pos = strSq
4c60: 6c 2e 49 6e 64 65 78 4f 66 28 27 3b 27 29 3b 0d  l.IndexOf(';');.
4c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
4c80: 66 20 28 70 6f 73 20 3d 3d 20 2d 31 29 20 70 6f  f (pos == -1) po
4c90: 73 20 3d 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74  s = strSql.Lengt
4ca0: 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20  h - 1;....      
4cb0: 20 20 20 20 20 20 20 20 74 79 70 65 64 65 66 73          typedefs
4cc0: 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72   = strSql.Substr
4cd0: 69 6e 67 28 30 2c 20 70 6f 73 20 2b 20 31 29 3b  ing(0, pos + 1);
4ce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4cf0: 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e  strSql = strSql.
4d00: 53 75 62 73 74 72 69 6e 67 28 70 6f 73 20 2b 20  Substring(pos + 
4d10: 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  1);....         
4d20: 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d       strRemain =
4d30: 20 22 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   "";....        
4d40: 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64        while (cmd
4d50: 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53   == null && strS
4d60: 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  ql.Length > 0)..
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d90: 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63   cmd = Prepare(c
4da0: 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76  nn, strSql, prev
4db0: 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c  ious, timeoutMS,
4dc0: 20 6f 75 74 20 73 74 72 52 65 6d 61 69 6e 29 3b   out strRemain);
4dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4de0: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65    strSql = strRe
4df0: 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  main;..         
4e00: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4e10: 20 20 20 20 20 20 20 20 69 66 20 28 63 6d 64 20          if (cmd 
4e20: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
4e30: 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e 53 65            cmd.Se
4e40: 74 54 79 70 65 73 28 74 79 70 65 64 65 66 73 29  tTypes(typedefs)
4e50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4e60: 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a     return cmd;..
4e70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
4e80: 69 66 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45  if (NET_35 || NE
4e90: 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 29 20  T_40 || NET_45) 
4ea0: 26 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  && !PLATFORM_COM
4eb0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
4ec0: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
4ed0: 69 66 20 28 5f 62 75 69 6c 64 69 6e 67 53 63 68  if (_buildingSch
4ee0: 65 6d 61 20 3d 3d 20 66 61 6c 73 65 20 26 26 20  ema == false && 
4ef0: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47  String.Compare(G
4f00: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 30  etLastError(), 0
4f10: 2c 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  , "no such table
4f20: 3a 20 54 45 4d 50 2e 53 43 48 45 4d 41 22 2c 20  : TEMP.SCHEMA", 
4f30: 30 2c 20 32 36 2c 20 53 74 72 69 6e 67 43 6f 6d  0, 26, StringCom
4f40: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
4f50: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
4f60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
4f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
4f80: 74 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a  trRemain = "";..
4f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 62                _b
4fa0: 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 20  uildingSchema = 
4fb0: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
4fc0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
4fd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4fe0: 20 20 20 20 20 20 20 20 20 20 20 49 53 51 4c 69             ISQLi
4ff0: 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f  teSchemaExtensio
5000: 6e 73 20 65 78 74 20 3d 20 28 28 49 53 65 72 76  ns ext = ((IServ
5010: 69 63 65 50 72 6f 76 69 64 65 72 29 53 51 4c 69  iceProvider)SQLi
5020: 74 65 46 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e  teFactory.Instan
5030: 63 65 29 2e 47 65 74 53 65 72 76 69 63 65 28 74  ce).GetService(t
5040: 79 70 65 6f 66 28 49 53 51 4c 69 74 65 53 63 68  ypeof(ISQLiteSch
5050: 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 29 29 20  emaExtensions)) 
5060: 61 73 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61  as ISQLiteSchema
5070: 45 78 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20  Extensions;.... 
5080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5090: 66 20 28 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d  f (ext != null).
50a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
50b0: 20 20 20 65 78 74 2e 42 75 69 6c 64 54 65 6d 70     ext.BuildTemp
50c0: 53 63 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a  Schema(cnn);....
50d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50e0: 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75  while (cmd == nu
50f0: 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e  ll && strSql.Len
5100: 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  gth > 0)..      
5110: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
5130: 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e  md = Prepare(cnn
5140: 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f  , strSql, previo
5150: 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f  us, timeoutMS, o
5160: 75 74 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a  ut strRemain);..
5170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5180: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65    strSql = strRe
5190: 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  main;..         
51a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
51b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
51c0: 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20  rn cmd;..       
51d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
51e0: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
51f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
5200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5210: 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d    _buildingSchem
5220: 61 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  a = false;..    
5230: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5240: 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64           }..#end
5250: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  if..          }.
5260: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20  .          else 
5270: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
5280: 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20  rrorCode.Locked 
5290: 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  || n == SQLiteEr
52a0: 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 2f 2f  rorCode.Busy) //
52b0: 20 4c 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79   Locked -- delay
52c0: 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20   a small amount 
52d0: 62 65 66 6f 72 65 20 72 65 74 72 79 69 6e 67 0d  before retrying.
52e0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
52f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65            // Kee
5300: 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20  p trying..      
5310: 20 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d        if (rnd ==
5320: 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20   null) // First 
5330: 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75  time we've encou
5340: 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d  ntered the lock.
5350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
5360: 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28  nd = new Random(
5370: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5380: 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78    // If we've ex
5390: 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61  ceeded the comma
53a0: 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69  nd's timeout, gi
53b0: 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20  ve up and throw 
53c0: 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  an error..      
53d0: 20 20 20 20 20 20 69 66 20 28 28 75 69 6e 74 29        if ((uint)
53e0: 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b  Environment.Tick
53f0: 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63  Count - starttic
5400: 6b 20 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a  k > timeoutMS)..
5410: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5420: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
5430: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
5440: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
5450: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
5460: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5470: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
5480: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5490: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68            // Oth
54a0: 65 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72  erwise sleep for
54b0: 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74   a random amount
54c0: 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31   of time up to 1
54d0: 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20  50ms..          
54e0: 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61      System.Threa
54f0: 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65  ding.Thread.Slee
5500: 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35  p(rnd.Next(1, 15
5510: 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  0));..          
5520: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
5530: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
5540: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
5550: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
5560: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
5570: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
5580: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
5590: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72  ;....        str
55a0: 52 65 6d 61 69 6e 20 3d 20 55 54 46 38 54 6f 53  Remain = UTF8ToS
55b0: 74 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e 29 3b  tring(ptr, len);
55c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
55d0: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  statementHandle 
55e0: 21 3d 20 6e 75 6c 6c 29 20 63 6d 64 20 3d 20 6e  != null) cmd = n
55f0: 65 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ew SQLiteStateme
5600: 6e 74 28 74 68 69 73 2c 20 66 6c 61 67 73 2c 20  nt(this, flags, 
5610: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c  statementHandle,
5620: 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e   strSql.Substrin
5630: 67 28 30 2c 20 73 74 72 53 71 6c 2e 4c 65 6e 67  g(0, strSql.Leng
5640: 74 68 20 2d 20 73 74 72 52 65 6d 61 69 6e 2e 4c  th - strRemain.L
5650: 65 6e 67 74 68 29 2c 20 70 72 65 76 69 6f 75 73  ength), previous
5660: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
5670: 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20  turn cmd;..     
5680: 20 7d 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c   }..      finall
5690: 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  y..      {..    
56a0: 20 20 20 20 68 61 6e 64 6c 65 2e 46 72 65 65 28      handle.Free(
56b0: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
56c0: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63   }....    protec
56d0: 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20  ted static void 
56e0: 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74  LogBind(SQLiteSt
56f0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
5700: 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 29  ndle, int index)
5710: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
5720: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
5730: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
5740: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
5750: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
5760: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
5770: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
5780: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
5790: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
57a0: 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61      "Binding sta
57b0: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
57c0: 74 65 72 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c  ter #{1} as NULL
57d0: 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
57e0: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
57f0: 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d   index));..    }
5800: 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ....    protecte
5810: 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f  d static void Lo
5820: 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74  gBind(SQLiteStat
5830: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
5840: 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 56  le, int index, V
5850: 61 6c 75 65 54 79 70 65 20 76 61 6c 75 65 29 0d  alueType value).
5860: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5870: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
5880: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
5890: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
58a0: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
58b0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
58c0: 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69            "Bindi
58d0: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d  ng statement {0}
58e0: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61   paramter #{1} a
58f0: 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20  s type {2} with 
5900: 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e  value {{{3}}}...
5910: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
5920: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
5930: 64 65 78 2c 20 76 61 6c 75 65 2e 47 65 74 54 79  dex, value.GetTy
5940: 70 65 28 29 2c 20 76 61 6c 75 65 29 29 3b 0d 0a  pe(), value));..
5950: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
5960: 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
5970: 6e 67 20 46 6f 72 6d 61 74 44 61 74 65 54 69 6d  ng FormatDateTim
5980: 65 28 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65  e(DateTime value
5990: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
59a0: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
59b0: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
59c0: 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d  ingBuilder();...
59d0: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
59e0: 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54 6f 53  Append(value.ToS
59f0: 74 72 69 6e 67 28 22 79 79 79 79 2d 4d 4d 2d 64  tring("yyyy-MM-d
5a00: 64 54 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46  dTHH:mm:ss.FFFFF
5a10: 46 46 4b 22 29 29 3b 0d 0a 20 20 20 20 20 20 20  FFK"));..       
5a20: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27   result.Append('
5a30: 20 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65   ');..        re
5a40: 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75  sult.Append(valu
5a50: 65 2e 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20  e.Kind);..      
5a60: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
5a70: 27 20 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  ' ');..        r
5a80: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c  esult.Append(val
5a90: 75 65 2e 54 69 63 6b 73 29 3b 0d 0a 0d 0a 20 20  ue.Ticks);....  
5aa0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
5ab0: 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  ult.ToString();.
5ac0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
5ad0: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
5ae0: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
5af0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
5b00: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
5b10: 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20 76 61  dex, DateTime va
5b20: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
5b30: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
5b40: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
5b50: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
5b60: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
5b70: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
5b80: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  (..            "
5b90: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
5ba0: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
5bb0: 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20  {1} as type {2} 
5bc0: 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d  with value {{{3}
5bd0: 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  }}...",..       
5be0: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
5bf0: 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66  r, index, typeof
5c00: 28 44 61 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d  (DateTime), Form
5c10: 61 74 44 61 74 65 54 69 6d 65 28 76 61 6c 75 65  atDateTime(value
5c20: 29 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  )));..    }.... 
5c30: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61     protected sta
5c40: 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64  tic void LogBind
5c50: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
5c60: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69  Handle handle, i
5c70: 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67  nt index, string
5c80: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
5c90: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
5ca0: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
5cb0: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
5cc0: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
5cd0: 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72  ssage(String.For
5ce0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
5cf0: 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65    "Binding state
5d00: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
5d10: 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b  r #{1} as type {
5d20: 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b  2} with value {{
5d30: 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20  {3}}}...",..    
5d40: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
5d50: 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70  tPtr, index, typ
5d60: 65 6f 66 28 53 74 72 69 6e 67 29 2c 20 28 76 61  eof(String), (va
5d70: 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76  lue != null) ? v
5d80: 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29  alue : "<null>")
5d90: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
5da0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
5db0: 73 74 72 69 6e 67 20 54 6f 48 65 78 61 64 65 63  string ToHexadec
5dc0: 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20  imalString(..   
5dd0: 20 20 20 20 20 62 79 74 65 5b 5d 20 61 72 72 61       byte[] arra
5de0: 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  y..        )..  
5df0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
5e00: 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d  (array == null).
5e10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5e20: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
5e30: 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64       StringBuild
5e40: 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  er result = new 
5e50: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 61 72  StringBuilder(ar
5e60: 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b  ray.Length * 2);
5e70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  ....        int 
5e80: 6c 65 6e 67 74 68 20 3d 20 61 72 72 61 79 2e 4c  length = array.L
5e90: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
5ea0: 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
5eb0: 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65   = 0; index < le
5ec0: 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a  ngth; index++)..
5ed0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
5ee0: 6c 74 2e 41 70 70 65 6e 64 28 61 72 72 61 79 5b  lt.Append(array[
5ef0: 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28  index].ToString(
5f00: 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  "x2"));....     
5f10: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
5f20: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
5f30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
5f40: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
5f50: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
5f60: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
5f70: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
5f80: 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d  , byte[] value).
5f90: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5fa0: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
5fb0: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
5fc0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
5fd0: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
5fe0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
5ff0: 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69            "Bindi
6000: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d  ng statement {0}
6010: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61   paramter #{1} a
6020: 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20  s type {2} with 
6030: 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e  value {{{3}}}...
6040: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
6050: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
6060: 64 65 78 2c 20 74 79 70 65 6f 66 28 42 79 74 65  dex, typeof(Byte
6070: 5b 5d 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e  []), (value != n
6080: 75 6c 6c 29 20 3f 20 54 6f 48 65 78 61 64 65 63  ull) ? ToHexadec
6090: 69 6d 61 6c 53 74 72 69 6e 67 28 76 61 6c 75 65  imalString(value
60a0: 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d  ) : "<null>"));.
60b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
60c0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
60d0: 76 6f 69 64 20 42 69 6e 64 5f 44 6f 75 62 6c 65  void Bind_Double
60e0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
60f0: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
6100: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
6110: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 64  gs, int index, d
6120: 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20  ouble value)..  
6130: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
6140: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
6150: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
6160: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
6170: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
6180: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
6190: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
61a0: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
61b0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
61c0: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
61d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
61e0: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
61f0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
6200: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66          }....#if
6210: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
6220: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
6230: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
6240: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
6250: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6260: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
6270: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
6280: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
6290: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
62a0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
62b0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
62c0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
62d0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f  .sqlite3_bind_do
62e0: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e  uble_interop(han
62f0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
6300: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
6310: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
6320: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
6330: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
6340: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66  ndif..        if
6350: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
6360: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
6370: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
6380: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
6390: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
63a0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
63b0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
63c0: 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69 74 65 53  nd_Int32(SQLiteS
63d0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
63e0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
63f0: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
6400: 69 6e 64 65 78 2c 20 69 6e 74 20 76 61 6c 75 65  index, int value
6410: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
6420: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
6430: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
6440: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
6450: 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  mt;....        i
6460: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
6470: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6480: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
6490: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
64a0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
64b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
64c0: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
64d0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
64e0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
64f0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
6500: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
6510: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6520: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
6530: 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nt(handle, index
6540: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
6550: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
6560: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
6570: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
6580: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
6590: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
65a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
65b0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
65c0: 69 64 20 42 69 6e 64 5f 55 49 6e 74 33 32 28 53  id Bind_UInt32(S
65d0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
65e0: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
65f0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
6600: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 69 6e  , int index, uin
6610: 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  t value)..    {.
6620: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
6630: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
6640: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
6650: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69  lite_stmt;....#i
6660: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
6670: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
6680: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
6690: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
66a0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
66b0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
66c0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
66d0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
66e0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
66f0: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
6700: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
6710: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
6720: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
6730: 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20  rrorCode n;.... 
6740: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
6750: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
6760: 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49  tionFlags.BindUI
6770: 6e 74 33 32 41 73 49 6e 74 36 34 29 20 3d 3d 20  nt32AsInt64) == 
6780: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6790: 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74 33 32  Flags.BindUInt32
67a0: 41 73 49 6e 74 36 34 29 0d 0a 20 20 20 20 20 20  AsInt64)..      
67b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
67c0: 20 6c 6f 6e 67 20 76 61 6c 75 65 32 20 3d 20 76   long value2 = v
67d0: 61 6c 75 65 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  alue;....#if !PL
67e0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
67f0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
6800: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
6810: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6820: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28  ite3_bind_int64(
6830: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
6840: 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 69 66 20 21  alue2);..#elif !
6850: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
6860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
6870: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6880: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
6890: 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  d_int64_interop(
68a0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
68b0: 65 66 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c  ef value2);..#el
68c0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
68d0: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
68e0: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
68f0: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
6900: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6910: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b   else..        {
6920: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
6930: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6940: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
6950: 6e 64 5f 75 69 6e 74 28 68 61 6e 64 6c 65 2c 20  nd_uint(handle, 
6960: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
6970: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6980: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
6990: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
69a0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
69b0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
69c0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
69d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
69e0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
69f0: 69 64 20 42 69 6e 64 5f 49 6e 74 36 34 28 53 51  id Bind_Int64(SQ
6a00: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
6a10: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
6a20: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
6a30: 20 69 6e 74 20 69 6e 64 65 78 2c 20 6c 6f 6e 67   int index, long
6a40: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
6a50: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
6a60: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
6a70: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
6a80: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
6a90: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
6aa0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
6ab0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
6ac0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
6ad0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
6ae0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
6af0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
6b00: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
6b10: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
6b20: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
6b30: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
6b40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6b50: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
6b60: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
6b70: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6b80: 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c  bind_int64(handl
6b90: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
6ba0: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
6bb0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
6bc0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
6bd0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
6be0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
6bf0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e  e3_bind_int64_in
6c00: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
6c10: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
6c20: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
6c30: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
6c40: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
6c50: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
6c60: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
6c70: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
6c80: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
6c90: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
6ca0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
6cb0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6cc0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
6cd0: 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74  e void Bind_UInt
6ce0: 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
6cf0: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
6d00: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
6d10: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
6d20: 20 75 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20   ulong value).. 
6d30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
6d40: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
6d50: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
6d60: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
6d70: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
6d80: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
6d90: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
6da0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
6db0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
6dc0: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
6dd0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6de0: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
6df0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6e00: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
6e10: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
6e20: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
6e30: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
6e40: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
6e50: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
6e60: 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36  lite3_bind_uint6
6e70: 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  4(handle, index,
6e80: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20   value);..#elif 
6e90: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
6ea0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
6eb0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
6ec0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6ed0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75  s.sqlite3_bind_u
6ee0: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61  int64_interop(ha
6ef0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
6f00: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
6f10: 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e  .        throw n
6f20: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
6f30: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
6f40: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69  endif..        i
6f50: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
6f60: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
6f70: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
6f80: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
6f90: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
6fa0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
6fb0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
6fc0: 69 6e 64 5f 54 65 78 74 28 53 51 4c 69 74 65 53  ind_Text(SQLiteS
6fd0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
6fe0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6ff0: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
7000: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61  index, string va
7010: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
7020: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
7030: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
7040: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
7050: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
7060: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
7070: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
7080: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
7090: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
70a0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
70b0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
70c0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
70d0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
70e0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
70f0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
7100: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
7110: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
7120: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20       byte[] b = 
7130: 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a  ToUTF8(value);..
7140: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
7150: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
7160: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
7170: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
7180: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
7190: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
71a0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
71b0: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
71c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
71d0: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
71e0: 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20  index, b);..    
71f0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
7200: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
7210: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
7220: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7230: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65  .sqlite3_bind_te
7240: 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  xt(handle, index
7250: 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  , b, b.Length - 
7260: 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  1, (IntPtr)(-1))
7270: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
7280: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
7290: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
72a0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
72b0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
72c0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
72d0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
72e0: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
72f0: 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53  DateTime(SQLiteS
7300: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
7310: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7320: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
7330: 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20  index, DateTime 
7340: 64 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  dt)..    {..    
7350: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
7360: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
7370: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
7380: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
7390: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
73a0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
73b0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
73c0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
73d0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
73e0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
73f0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
7400: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7410: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
7420: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 64 74  andle, index, dt
7430: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
7440: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
7450: 20 73 77 69 74 63 68 20 28 5f 64 61 74 65 74 69   switch (_dateti
7460: 6d 65 46 6f 72 6d 61 74 29 0d 0a 20 20 20 20 20  meFormat)..     
7470: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7480: 20 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74    case SQLiteDat
7490: 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73 3a 0d  eFormats.Ticks:.
74a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
74b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
74c0: 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c          long val
74d0: 75 65 20 3d 20 64 74 2e 54 69 63 6b 73 3b 0d 0a  ue = dt.Ticks;..
74e0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
74f0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
7500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7510: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
7520: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
7530: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
7540: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
7550: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
7560: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nd)..           
7570: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7590: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
75a0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
75b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
75c0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
75d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75e0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
75f0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
7600: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7610: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64  _bind_int64(hand
7620: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
7630: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
7640: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
7650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7660: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
7670: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
7680: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7690: 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72  bind_int64_inter
76a0: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
76b0: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
76c0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
76d0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
76e0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
76f0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
7700: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
7710: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7720: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
7730: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
7740: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
7750: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
7760: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  or());..        
7770: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
7780: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
7790: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
77a0: 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44 61     case SQLiteDa
77b0: 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e  teFormats.Julian
77c0: 44 61 79 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  Day:..          
77d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 75               dou
77f0: 62 6c 65 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75  ble value = ToJu
7800: 6c 69 61 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a  lianDay(dt);....
7810: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
7820: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
7830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7840: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
7850: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7860: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
7870: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
7880: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
7890: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
78a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
78b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78c0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
78d0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
78e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
78f0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
7910: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
7920: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7930: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
7940: 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c  ind_double(handl
7950: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
7960: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
7970: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
7980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
7990: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
79a0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
79b0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
79c0: 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  ind_double_inter
79d0: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
79e0: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
79f0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
7a00: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
7a10: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
7a20: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
7a30: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
7a40: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7a50: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
7a60: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
7a70: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
7a80: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
7a90: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  or());..        
7aa0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
7ab0: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
7ac0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
7ad0: 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44 61     case SQLiteDa
7ae0: 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70  teFormats.UnixEp
7af0: 6f 63 68 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  och:..          
7b00: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e               lon
7b20: 67 20 76 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72  g value = Conver
7b30: 74 2e 54 6f 49 6e 74 36 34 28 64 74 2e 53 75 62  t.ToInt64(dt.Sub
7b40: 74 72 61 63 74 28 55 6e 69 78 45 70 6f 63 68 29  tract(UnixEpoch)
7b50: 2e 54 6f 74 61 6c 53 65 63 6f 6e 64 73 29 3b 0d  .TotalSeconds);.
7b60: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
7b70: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
7b80: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  K..             
7b90: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
7ba0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
7bb0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
7bc0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
7bd0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
7be0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ind)..          
7bf0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c10: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
7c20: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
7c30: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
7c40: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
7c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c60: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
7c70: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
7c80: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
7c90: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e  3_bind_int64(han
7ca0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
7cb0: 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
7cc0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ce0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
7cf0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
7d00: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7d10: 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65  _bind_int64_inte
7d20: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
7d30: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
7d40: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
7d50: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
7d60: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
7d70: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
7d80: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
7d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7da0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
7db0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
7dc0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
7dd0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
7de0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
7e00: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ak;..           
7e10: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7e20: 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20      default:..  
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
7e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7e50: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20       byte[] b = 
7e60: 54 6f 55 54 46 38 28 64 74 29 3b 0d 0a 0d 0a 23  ToUTF8(dt);....#
7e70: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
7e80: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
7e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ea0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
7eb0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7ec0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
7ed0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7ee0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
7ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7f00: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f20: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
7f30: 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20   index, b);..   
7f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f50: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f70: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
7f80: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
7f90: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
7fa0: 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61 6e 64  3_bind_text(hand
7fb0: 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e  le, index, b, b.
7fc0: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74  Length - 1, (Int
7fd0: 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20  Ptr)(-1));..    
7fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ff0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
8000: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
8010: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
8020: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
8030: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
8040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8050: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
8060: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8070: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
8080: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
8090: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 42  ride void Bind_B
80a0: 6c 6f 62 28 53 51 4c 69 74 65 53 74 61 74 65 6d  lob(SQLiteStatem
80b0: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
80c0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
80d0: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
80e0: 2c 20 62 79 74 65 5b 5d 20 62 6c 6f 62 44 61 74  , byte[] blobDat
80f0: 61 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  a)..    {..     
8100: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
8110: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
8120: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
8130: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
8140: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
8150: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
8160: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
8170: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
8180: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
8190: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
81a0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
81b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
81c0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
81d0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f  ndle, index, blo
81e0: 62 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20  bData);..       
81f0: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
8200: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
8210: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
8220: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
8230: 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28  lite3_bind_blob(
8240: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
8250: 6c 6f 62 44 61 74 61 2c 20 62 6c 6f 62 44 61 74  lobData, blobDat
8260: 61 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74  a.Length, (IntPt
8270: 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  r)(-1));..      
8280: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
8290: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
82a0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
82b0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
82c0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
82d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
82e0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
82f0: 64 20 42 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69  d Bind_Null(SQLi
8300: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
8310: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
8320: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
8330: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
8340: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
8350: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
8360: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
8370: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23  qlite_stmt;....#
8380: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
8390: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
83a0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
83b0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
83c0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
83d0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
83e0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
83f0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
8400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
8410: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
8420: 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ex);..        }.
8430: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
8440: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
8450: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
8460: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8470: 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e  e3_bind_null(han
8480: 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  dle, index);..  
8490: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
84a0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
84b0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
84c0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
84d0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
84e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
84f0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
8500: 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 43   int Bind_ParamC
8510: 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65  ount(SQLiteState
8520: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
8530: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
8540: 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a   flags)..    {..
8550: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
8560: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
8570: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
8580: 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20  ite_stmt;..     
8590: 20 20 20 69 6e 74 20 76 61 6c 75 65 20 3d 20 55     int value = U
85a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
85b0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
85c0: 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28  parameter_count(
85d0: 68 61 6e 64 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20  handle);....    
85e0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
85f0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8600: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
8610: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
8620: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
8630: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
8640: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
8650: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
8660: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
8670: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
8680: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
8690: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
86a0: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
86b0: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
86c0: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
86d0: 20 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d           "Statem
86e0: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
86f0: 20 63 6f 75 6e 74 20 69 73 20 7b 31 7d 2e 22 2c   count is {1}.",
8700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8710: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
8720: 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 20 20  value));..      
8730: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
8740: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20  eturn value;..  
8750: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
8760: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
8770: 69 6e 67 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61  ing Bind_ParamNa
8780: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
8790: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
87a0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
87b0: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29  lags, int index)
87c0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
87d0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
87e0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
87f0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
8800: 74 3b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  t;..        stri
8810: 6e 67 20 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20  ng name;....#if 
8820: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
8830: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65  ..        int le
8840: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65  n;..        name
8850: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
8860: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8870: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
8880: 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f  _parameter_name_
8890: 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20  interop(handle, 
88a0: 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c  index, out len),
88b0: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
88c0: 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54         name = UT
88d0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
88e0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
88f0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
8900: 6d 65 74 65 72 5f 6e 61 6d 65 28 68 61 6e 64 6c  meter_name(handl
8910: 65 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  e, index), -1);.
8920: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
8930: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
8940: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8950: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
8960: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
8970: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
8980: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
8990: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
89a0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
89b0: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
89c0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
89d0: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
89e0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
89f0: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
8a00: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
8a10: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
8a20: 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65          "Stateme
8a30: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
8a40: 23 7b 31 7d 20 6e 61 6d 65 20 69 73 20 7b 7b 7b  #{1} name is {{{
8a50: 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20  2}}}.",..       
8a60: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
8a70: 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 6e 61  ntPtr, index, na
8a80: 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  me));..        }
8a90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
8aa0: 72 6e 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d  rn name;..    }.
8ab0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
8ac0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e  override int Bin
8ad0: 64 5f 50 61 72 61 6d 49 6e 64 65 78 28 53 51 4c  d_ParamIndex(SQL
8ae0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
8af0: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
8b00: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
8b10: 73 74 72 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65  string paramName
8b20: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8b30: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
8b40: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
8b50: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
8b60: 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  mt;..        int
8b70: 20 69 6e 64 65 78 20 3d 20 55 6e 73 61 66 65 4e   index = UnsafeN
8b80: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8b90: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
8ba0: 74 65 72 5f 69 6e 64 65 78 28 68 61 6e 64 6c 65  ter_index(handle
8bb0: 2c 20 54 6f 55 54 46 38 28 70 61 72 61 6d 4e 61  , ToUTF8(paramNa
8bc0: 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me));....       
8bd0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
8be0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
8bf0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
8c00: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8c10: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
8c20: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8c30: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
8c40: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
8c50: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
8c60: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
8c70: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
8c80: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
8c90: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
8ca0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
8cb0: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
8cc0: 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74        "Statement
8cd0: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 69 6e   {0} paramter in
8ce0: 64 65 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31  dex of name {{{1
8cf0: 7d 7d 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a  }}} is #{2}.",..
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d10: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70 61  handleIntPtr, pa
8d20: 72 61 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29  ramName, index))
8d30: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
8d40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 69          return i
8d50: 6e 64 65 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ndex;..    }....
8d60: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
8d70: 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e  rride int Column
8d80: 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74  Count(SQLiteStat
8d90: 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20  ement stmt)..   
8da0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
8db0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
8dc0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
8dd0: 75 6d 6e 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f  umn_count(stmt._
8de0: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20  sqlite_stmt);.. 
8df0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
8e00: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
8e10: 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28  ring ColumnName(
8e20: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
8e30: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
8e40: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
8e50: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
8e60: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20       int len;.. 
8e70: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
8e80: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
8e90: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8ea0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
8eb0: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
8ec0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
8ed0: 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e  x, out len), len
8ee0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
8ef0: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
8f00: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
8f10: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8f20: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d  _column_name(stm
8f30: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
8f40: 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65  index), -1);..#e
8f50: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
8f60: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
8f70: 72 69 64 65 20 54 79 70 65 41 66 66 69 6e 69 74  ride TypeAffinit
8f80: 79 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  y ColumnAffinity
8f90: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
8fa0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
8fb0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8fc0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
8fd0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8fe0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 73  e3_column_type(s
8ff0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
9000: 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d  , index);..    }
9010: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
9020: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
9030: 20 43 6f 6c 75 6d 6e 54 79 70 65 28 53 51 4c 69   ColumnType(SQLi
9040: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
9050: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 6f 75 74  , int index, out
9060: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 6e 41   TypeAffinity nA
9070: 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 7b 0d  ffinity)..    {.
9080: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
9090: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
90a0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74  NDARD..      Int
90b0: 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61  Ptr p = UnsafeNa
90c0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
90d0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
90e0: 79 70 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ype_interop(stmt
90f0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
9100: 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d  ndex, out len);.
9110: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6c 65  .#else..      le
9120: 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 49  n = -1;..      I
9130: 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65  ntPtr p = Unsafe
9140: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9150: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
9160: 6c 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69  ltype(stmt._sqli
9170: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
9180: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
9190: 6e 41 66 66 69 6e 69 74 79 20 3d 20 43 6f 6c 75  nAffinity = Colu
91a0: 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c  mnAffinity(stmt,
91b0: 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20   index);....    
91c0: 20 20 69 66 20 28 70 20 21 3d 20 49 6e 74 50 74    if (p != IntPt
91d0: 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 55  r.Zero) return U
91e0: 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c  TF8ToString(p, l
91f0: 65 6e 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65  en);..      else
9200: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
9210: 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 20 3d     string[] ar =
9220: 20 73 74 6d 74 2e 54 79 70 65 44 65 66 69 6e 69   stmt.TypeDefini
9230: 74 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20  tions;..        
9240: 69 66 20 28 61 72 20 21 3d 20 6e 75 6c 6c 29 0d  if (ar != null).
9250: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9260: 20 20 20 20 20 20 69 66 20 28 69 6e 64 65 78 20        if (index 
9270: 3c 20 61 72 2e 4c 65 6e 67 74 68 20 26 26 20 61  < ar.Length && a
9280: 72 5b 69 6e 64 65 78 5d 20 21 3d 20 6e 75 6c 6c  r[index] != null
9290: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
92a0: 65 74 75 72 6e 20 61 72 5b 69 6e 64 65 78 5d 3b  eturn ar[index];
92b0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
92c0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
92d0: 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20  ng.Empty;....   
92e0: 20 20 20 20 20 2f 2f 73 77 69 74 63 68 20 28 6e       //switch (n
92f0: 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 20  Affinity)..     
9300: 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20     //{..        
9310: 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41 66 66  //  case TypeAff
9320: 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20  inity.Int64:..  
9330: 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75        //    retu
9340: 72 6e 20 22 42 49 47 49 4e 54 22 3b 0d 0a 20 20  rn "BIGINT";..  
9350: 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54        //  case T
9360: 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62  ypeAffinity.Doub
9370: 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  le:..        // 
9380: 20 20 20 72 65 74 75 72 6e 20 22 44 4f 55 42 4c     return "DOUBL
9390: 45 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  E";..        // 
93a0: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
93b0: 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20  ty.Blob:..      
93c0: 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22    //    return "
93d0: 42 4c 4f 42 22 3b 0d 0a 20 20 20 20 20 20 20 20  BLOB";..        
93e0: 2f 2f 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20  //  default:..  
93f0: 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75        //    retu
9400: 72 6e 20 22 54 45 58 54 22 3b 0d 0a 20 20 20 20  rn "TEXT";..    
9410: 20 20 20 20 2f 2f 7d 0d 0a 20 20 20 20 20 20 7d      //}..      }
9420: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
9430: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
9440: 20 69 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64 65 78   int ColumnIndex
9450: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
9460: 20 73 74 6d 74 2c 20 73 74 72 69 6e 67 20 63 6f   stmt, string co
9470: 6c 75 6d 6e 4e 61 6d 65 29 0d 0a 20 20 20 20 7b  lumnName)..    {
9480: 0d 0a 20 20 20 20 20 20 69 6e 74 20 78 20 3d 20  ..      int x = 
9490: 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74  ColumnCount(stmt
94a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20  );....      for 
94b0: 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20  (int n = 0; n < 
94c0: 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b  x; n++)..      {
94d0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74  ..        if (St
94e0: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 63 6f 6c  ring.Compare(col
94f0: 75 6d 6e 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e  umnName, ColumnN
9500: 61 6d 65 28 73 74 6d 74 2c 20 6e 29 2c 20 53 74  ame(stmt, n), St
9510: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
9520: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
9530: 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  ) == 0)..       
9540: 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20     return n;..  
9550: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 72 65 74      }..      ret
9560: 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a  urn -1;..    }..
9570: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
9580: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
9590: 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d  olumnOriginalNam
95a0: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
95b0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
95c0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
95d0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
95e0: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
95f0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
9600: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
9610: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9620: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
9630: 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  igin_name_intero
9640: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
9650: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
9660: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
9670: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
9680: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
9690: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
96a0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
96b0: 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d  _origin_name(stm
96c0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
96d0: 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65  index), -1);..#e
96e0: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
96f0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
9700: 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75  ride string Colu
9710: 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65 28 53  mnDatabaseName(S
9720: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
9730: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
9740: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
9750: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
9760: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20      int len;..  
9770: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
9780: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
9790: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
97a0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62  te3_column_datab
97b0: 61 73 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  ase_name_interop
97c0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
97d0: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c  mt, index, out l
97e0: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
97f0: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
9800: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
9810: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9820: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
9830: 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 28 73 74  database_name(st
9840: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
9850: 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23   index), -1);..#
9860: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
9870: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9880: 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
9890: 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 53 51 4c  umnTableName(SQL
98a0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
98b0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
98c0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
98d0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
98e0: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
98f0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
9900: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
9910: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9920: 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e  3_column_table_n
9930: 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ame_interop(stmt
9940: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
9950: 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20  ndex, out len), 
9960: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
9970: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
9980: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
9990: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
99a0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65  te3_column_table
99b0: 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69  _name(stmt._sqli
99c0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
99d0: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   -1);..#endif.. 
99e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
99f0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
9a00: 69 64 20 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74  id ColumnMetaDat
9a10: 61 28 73 74 72 69 6e 67 20 64 61 74 61 42 61 73  a(string dataBas
9a20: 65 2c 20 73 74 72 69 6e 67 20 74 61 62 6c 65 2c  e, string table,
9a30: 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20   string column, 
9a40: 6f 75 74 20 73 74 72 69 6e 67 20 64 61 74 61 54  out string dataT
9a50: 79 70 65 2c 20 6f 75 74 20 73 74 72 69 6e 67 20  ype, out string 
9a60: 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 2c  collateSequence,
9a70: 20 6f 75 74 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c   out bool notNul
9a80: 6c 2c 20 6f 75 74 20 62 6f 6f 6c 20 70 72 69 6d  l, out bool prim
9a90: 61 72 79 4b 65 79 2c 20 6f 75 74 20 62 6f 6f 6c  aryKey, out bool
9aa0: 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29 0d   autoIncrement).
9ab0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e  .    {..      In
9ac0: 74 50 74 72 20 64 61 74 61 54 79 70 65 50 74 72  tPtr dataTypePtr
9ad0: 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
9ae0: 63 6f 6c 6c 53 65 71 50 74 72 3b 0d 0a 20 20 20  collSeqPtr;..   
9af0: 20 20 20 69 6e 74 20 6e 6e 6f 74 4e 75 6c 6c 3b     int nnotNull;
9b00: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 70 72 69  ..      int npri
9b10: 6d 61 72 79 4b 65 79 3b 0d 0a 20 20 20 20 20 20  maryKey;..      
9b20: 69 6e 74 20 6e 61 75 74 6f 49 6e 63 3b 0d 0a 20  int nautoInc;.. 
9b30: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
9b40: 43 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 69  Code n;..      i
9b50: 6e 74 20 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20  nt dtLen;..     
9b60: 20 69 6e 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23   int csLen;....#
9b70: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
9b80: 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  ARD..      n = U
9b90: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9ba0: 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  ds.sqlite3_table
9bb0: 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61  _column_metadata
9bc0: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54  _interop(_sql, T
9bd0: 6f 55 54 46 38 28 64 61 74 61 42 61 73 65 29 2c  oUTF8(dataBase),
9be0: 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c 20   ToUTF8(table), 
9bf0: 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20  ToUTF8(column), 
9c00: 6f 75 74 20 64 61 74 61 54 79 70 65 50 74 72 2c  out dataTypePtr,
9c10: 20 6f 75 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c   out collSeqPtr,
9c20: 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f   out nnotNull, o
9c30: 75 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20  ut nprimaryKey, 
9c40: 6f 75 74 20 6e 61 75 74 6f 49 6e 63 2c 20 6f 75  out nautoInc, ou
9c50: 74 20 64 74 4c 65 6e 2c 20 6f 75 74 20 63 73 4c  t dtLen, out csL
9c60: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
9c70: 20 20 20 64 74 4c 65 6e 20 3d 20 2d 31 3b 0d 0a     dtLen = -1;..
9c80: 20 20 20 20 20 20 63 73 4c 65 6e 20 3d 20 2d 31        csLen = -1
9c90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  ;....      n = U
9ca0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9cb0: 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  ds.sqlite3_table
9cc0: 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61  _column_metadata
9cd0: 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61  (_sql, ToUTF8(da
9ce0: 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38 28  taBase), ToUTF8(
9cf0: 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28 63  table), ToUTF8(c
9d00: 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61  olumn), out data
9d10: 54 79 70 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c  TypePtr, out col
9d20: 6c 53 65 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f  lSeqPtr, out nno
9d30: 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d  tNull, out nprim
9d40: 61 72 79 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74  aryKey, out naut
9d50: 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  oInc);..#endif..
9d60: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
9d70: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
9d80: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
9d90: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
9da0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
9db0: 0d 0a 0d 0a 20 20 20 20 20 20 64 61 74 61 54 79  ....      dataTy
9dc0: 70 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  pe = UTF8ToStrin
9dd0: 67 28 64 61 74 61 54 79 70 65 50 74 72 2c 20 64  g(dataTypePtr, d
9de0: 74 4c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 63 6f  tLen);..      co
9df0: 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 20 3d 20  llateSequence = 
9e00: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c  UTF8ToString(col
9e10: 6c 53 65 71 50 74 72 2c 20 63 73 4c 65 6e 29 3b  lSeqPtr, csLen);
9e20: 0d 0a 0d 0a 20 20 20 20 20 20 6e 6f 74 4e 75 6c  ....      notNul
9e30: 6c 20 3d 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d  l = (nnotNull ==
9e40: 20 31 29 3b 0d 0a 20 20 20 20 20 20 70 72 69 6d   1);..      prim
9e50: 61 72 79 4b 65 79 20 3d 20 28 6e 70 72 69 6d 61  aryKey = (nprima
9e60: 72 79 4b 65 79 20 3d 3d 20 31 29 3b 0d 0a 20 20  ryKey == 1);..  
9e70: 20 20 20 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e      autoIncremen
9e80: 74 20 3d 20 28 6e 61 75 74 6f 49 6e 63 20 3d 3d  t = (nautoInc ==
9e90: 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   1);..    }.... 
9ea0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
9eb0: 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74 44  ride double GetD
9ec0: 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74  ouble(SQLiteStat
9ed0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
9ee0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
9ef0: 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75       double valu
9f00: 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  e;..#if !PLATFOR
9f10: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
9f20: 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20  RK..      value 
9f30: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
9f40: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
9f50: 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74  lumn_double(stmt
9f60: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
9f70: 6e 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53  ndex);..#elif !S
9f80: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
9f90: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
9fa0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9fb0: 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f  3_column_double_
9fc0: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
9fd0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
9fe0: 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23  , out value);..#
9ff0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
a000: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
a010: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
a020: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
a030: 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20  return value;.. 
a040: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
a050: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 62  rnal override sb
a060: 79 74 65 20 47 65 74 53 42 79 74 65 28 53 51 4c  yte GetSByte(SQL
a070: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
a080: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
a090: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
a0a0: 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 73 62  rn unchecked((sb
a0b0: 79 74 65 29 28 47 65 74 49 6e 74 33 32 28 73 74  yte)(GetInt32(st
a0c0: 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 62 79 74  mt, index) & byt
a0d0: 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20  e.MaxValue));.. 
a0e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
a0f0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 79  rnal override by
a100: 74 65 20 47 65 74 42 79 74 65 28 53 51 4c 69 74  te GetByte(SQLit
a110: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
a120: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
a130: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
a140: 20 75 6e 63 68 65 63 6b 65 64 28 28 62 79 74 65   unchecked((byte
a150: 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  )(GetInt32(stmt,
a160: 20 69 6e 64 65 78 29 20 26 20 62 79 74 65 2e 4d   index) & byte.M
a170: 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  axValue));..    
a180: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
a190: 6c 20 6f 76 65 72 72 69 64 65 20 73 68 6f 72 74  l override short
a1a0: 20 47 65 74 49 6e 74 31 36 28 53 51 4c 69 74 65   GetInt16(SQLite
a1b0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
a1c0: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
a1d0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
a1e0: 75 6e 63 68 65 63 6b 65 64 28 28 73 68 6f 72 74  unchecked((short
a1f0: 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  )(GetInt32(stmt,
a200: 20 69 6e 64 65 78 29 20 26 20 75 73 68 6f 72 74   index) & ushort
a210: 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20  .MaxValue));..  
a220: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
a230: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75 73 68  nal override ush
a240: 6f 72 74 20 47 65 74 55 49 6e 74 31 36 28 53 51  ort GetUInt16(SQ
a250: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
a260: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
a270: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
a280: 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75  urn unchecked((u
a290: 73 68 6f 72 74 29 28 47 65 74 49 6e 74 33 32 28  short)(GetInt32(
a2a0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 75  stmt, index) & u
a2b0: 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29 29  short.MaxValue))
a2c0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
a2d0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
a2e0: 65 20 69 6e 74 20 47 65 74 49 6e 74 33 32 28 53  e int GetInt32(S
a2f0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
a300: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
a310: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
a320: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
a330: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a340: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d 74  _column_int(stmt
a350: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
a360: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ndex);..    }...
a370: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
a380: 65 72 72 69 64 65 20 75 69 6e 74 20 47 65 74 55  erride uint GetU
a390: 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74  Int32(SQLiteStat
a3a0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
a3b0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
a3c0: 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68       return unch
a3d0: 65 63 6b 65 64 28 28 75 69 6e 74 29 47 65 74 49  ecked((uint)GetI
a3e0: 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
a3f0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
a400: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
a410: 69 64 65 20 6c 6f 6e 67 20 47 65 74 49 6e 74 36  ide long GetInt6
a420: 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  4(SQLiteStatemen
a430: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
a440: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
a450: 20 6c 6f 6e 67 20 76 61 6c 75 65 3b 0d 0a 23 69   long value;..#i
a460: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
a470: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
a480: 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61      value = Unsa
a490: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a4a0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
a4b0: 6e 74 36 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74  nt64(stmt._sqlit
a4c0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
a4d0: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
a4e0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55  TANDARD..      U
a4f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
a500: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
a510: 6e 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  n_int64_interop(
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 2c 20 6f 75 74 20 76 61  t, index, out va
a540: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
a550: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
a560: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
a570: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
a580: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
a590: 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alue;..    }....
a5a0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
a5b0: 72 72 69 64 65 20 75 6c 6f 6e 67 20 47 65 74 55  rride ulong GetU
a5c0: 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74  Int64(SQLiteStat
a5d0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
a5e0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
a5f0: 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68       return unch
a600: 65 63 6b 65 64 28 28 75 6c 6f 6e 67 29 47 65 74  ecked((ulong)Get
a610: 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65  Int64(stmt, inde
a620: 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  x));..    }.... 
a630: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
a640: 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 54  ride string GetT
a650: 65 78 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ext(SQLiteStatem
a660: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
a670: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
a680: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
a690: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
a6a0: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
a6b0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
a6c0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
a6d0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
a6e0: 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d  text_interop(stm
a6f0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
a700: 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c  index, out len),
a710: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
a720: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
a730: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
a740: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a750: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
a760: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
a770: 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20  mt, index),..   
a780: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
a790: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a7a0: 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74  _column_bytes(st
a7b0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
a7c0: 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69   index));..#endi
a7d0: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
a7e0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
a7f0: 65 20 44 61 74 65 54 69 6d 65 20 47 65 74 44 61  e DateTime GetDa
a800: 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61  teTime(SQLiteSta
a810: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
a820: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
a830: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
a840: 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
a850: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  len;..      retu
a860: 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e  rn ToDateTime(Un
a870: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a880: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
a890: 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74  _text_interop(st
a8a0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
a8b0: 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29   index, out len)
a8c0: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
a8d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44        return ToD
a8e0: 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61  ateTime(UnsafeNa
a8f0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a900: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
a910: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
a920: 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20  t, index),..    
a930: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
a940: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a950: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d  column_bytes(stm
a960: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
a970: 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66  index));..#endif
a980: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
a990: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
a9a0: 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73 28 53   long GetBytes(S
a9b0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
a9c0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
a9d0: 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c  int nDataOffset,
a9e0: 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69   byte[] bDest, i
a9f0: 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e  nt nStart, int n
aa00: 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a  Length)..    {..
aa10: 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d        int nlen =
aa20: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
aa30: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
aa40: 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f  umn_bytes(stmt._
aa50: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
aa60: 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  ex);....      //
aa70: 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74 69   If no destinati
aa80: 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75 72  on buffer, retur
aa90: 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64 65  n the size neede
aaa0: 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44  d...      if (bD
aab0: 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74  est == null) ret
aac0: 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20  urn nlen;....   
aad0: 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d     int nCopied =
aae0: 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20   nLength;....   
aaf0: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
ab00: 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e   nStart > bDest.
ab10: 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20  Length) nCopied 
ab20: 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d  = bDest.Length -
ab30: 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20   nStart;..      
ab40: 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44  if (nCopied + nD
ab50: 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e  ataOffset > nlen
ab60: 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e  ) nCopied = nlen
ab70: 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d   - nDataOffset;.
ab80: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
ab90: 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20  pied > 0)..     
aba0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
abb0: 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e  tr ptr = UnsafeN
abc0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
abd0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  ite3_column_blob
abe0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
abf0: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20  mt, index);.... 
ac00: 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43         Marshal.C
ac10: 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70 74 72  opy((IntPtr)(ptr
ac20: 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61  .ToInt64() + nDa
ac30: 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74  taOffset), bDest
ac40: 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65  , nStart, nCopie
ac50: 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  d);..      }..  
ac60: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
ac70: 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69  {..        nCopi
ac80: 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d  ed = 0;..      }
ac90: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
aca0: 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d   nCopied;..    }
acb0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
acc0: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
acd0: 65 74 43 68 61 72 73 28 53 51 4c 69 74 65 53 74  etChars(SQLiteSt
ace0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
acf0: 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61  t index, int nDa
ad00: 74 61 4f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d  taOffset, char[]
ad10: 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61   bDest, int nSta
ad20: 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29  rt, int nLength)
ad30: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
ad40: 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  nt nlen;..      
ad50: 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c  int nCopied = nL
ad60: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
ad70: 73 74 72 69 6e 67 20 73 74 72 20 3d 20 47 65 74  string str = Get
ad80: 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
ad90: 29 3b 0d 0a 20 20 20 20 20 20 6e 6c 65 6e 20 3d  );..      nlen =
ada0: 20 73 74 72 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a   str.Length;....
adb0: 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20        if (bDest 
adc0: 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
add0: 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  nlen;....      i
ade0: 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74  f (nCopied + nSt
adf0: 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67  art > bDest.Leng
ae00: 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44  th) nCopied = bD
ae10: 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74  est.Length - nSt
ae20: 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  art;..      if (
ae30: 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f  nCopied + nDataO
ae40: 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43  ffset > nlen) nC
ae50: 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e  opied = nlen - n
ae60: 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20  DataOffset;.... 
ae70: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
ae80: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 73   > 0)..        s
ae90: 74 72 2e 43 6f 70 79 54 6f 28 6e 44 61 74 61 4f  tr.CopyTo(nDataO
aea0: 66 66 73 65 74 2c 20 62 44 65 73 74 2c 20 6e 53  ffset, bDest, nS
aeb0: 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d  tart, nCopied);.
aec0: 0a 20 20 20 20 20 20 65 6c 73 65 20 6e 43 6f 70  .      else nCop
aed0: 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  ied = 0;....    
aee0: 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64    return nCopied
aef0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
af00: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
af10: 65 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53 51  e bool IsNull(SQ
af20: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
af30: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
af40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
af50: 75 72 6e 20 28 43 6f 6c 75 6d 6e 41 66 66 69 6e  urn (ColumnAffin
af60: 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ity(stmt, index)
af70: 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79   == TypeAffinity
af80: 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Null);..    }..
af90: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
afa0: 76 65 72 72 69 64 65 20 69 6e 74 20 41 67 67 72  verride int Aggr
afb0: 65 67 61 74 65 43 6f 75 6e 74 28 49 6e 74 50 74  egateCount(IntPt
afc0: 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20  r context)..    
afd0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
afe0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
aff0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72  ods.sqlite3_aggr
b000: 65 67 61 74 65 5f 63 6f 75 6e 74 28 63 6f 6e 74  egate_count(cont
b010: 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ext);..    }....
b020: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
b030: 72 72 69 64 65 20 76 6f 69 64 20 43 72 65 61 74  rride void Creat
b040: 65 46 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67  eFunction(string
b050: 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e   strFunction, in
b060: 74 20 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65  t nArgs, bool ne
b070: 65 64 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74  edCollSeq, SQLit
b080: 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20  eCallback func, 
b090: 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66  SQLiteCallback f
b0a0: 75 6e 63 73 74 65 70 2c 20 53 51 4c 69 74 65 46  uncstep, SQLiteF
b0b0: 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e  inalCallback fun
b0c0: 63 66 69 6e 61 6c 29 0d 0a 20 20 20 20 7b 0d 0a  cfinal)..    {..
b0d0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
b0e0: 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20  rCode n;....#if 
b0f0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
b100: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
b110: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b120: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
b130: 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28  unction_interop(
b140: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
b150: 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73  Function), nArgs
b160: 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 4, IntPtr.Zero
b170: 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70  , func, funcstep
b180: 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65  , funcfinal, (ne
b190: 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75  edCollSeq == tru
b1a0: 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 20 20  e) ? 1 : 0);..  
b1b0: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
b1c0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
b1d0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
b1e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
b1f0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
b200: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54  _interop(_sql, T
b210: 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f  oUTF8(strFunctio
b220: 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e  n), nArgs, 1, In
b230: 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c  tPtr.Zero, func,
b240: 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66   funcstep, funcf
b250: 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53  inal, (needCollS
b260: 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20  eq == true) ? 1 
b270: 3a 20 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  : 0);..#else..  
b280: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
b290: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b2a0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
b2b0: 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  ion(_sql, ToUTF8
b2c0: 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e  (strFunction), n
b2d0: 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e  Args, 4, IntPtr.
b2e0: 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63  Zero, func, func
b2f0: 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29  step, funcfinal)
b300: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d  ;..      if (n =
b310: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
b320: 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65  e.Ok) n = Unsafe
b330: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b340: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
b350: 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54  ction(_sql, ToUT
b360: 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c  F8(strFunction),
b370: 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74   nArgs, 1, IntPt
b380: 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75  r.Zero, func, fu
b390: 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61  ncstep, funcfina
b3a0: 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  l);..#endif..   
b3b0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
b3c0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
b3d0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
b3e0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
b3f0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
b400: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
b410: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
b420: 69 64 20 43 72 65 61 74 65 43 6f 6c 6c 61 74 69  id CreateCollati
b430: 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 43 6f 6c  on(string strCol
b440: 6c 61 74 69 6f 6e 2c 20 53 51 4c 69 74 65 43 6f  lation, SQLiteCo
b450: 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 2c 20 53 51  llation func, SQ
b460: 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75  LiteCollation fu
b470: 6e 63 31 36 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nc16)..    {..  
b480: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
b490: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
b4a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b4b0: 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
b4c0: 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46  tion(_sql, ToUTF
b4d0: 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c  8(strCollation),
b4e0: 20 32 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   2, IntPtr.Zero,
b4f0: 20 66 75 6e 63 31 36 29 3b 0d 0a 20 20 20 20 20   func16);..     
b500: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
b510: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20  ErrorCode.Ok) n 
b520: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
b530: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
b540: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f  eate_collation(_
b550: 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43  sql, ToUTF8(strC
b560: 6f 6c 6c 61 74 69 6f 6e 29 2c 20 31 2c 20 49 6e  ollation), 1, In
b570: 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 29  tPtr.Zero, func)
b580: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ;..      if (n !
b590: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
b5a0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
b5b0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
b5c0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
b5d0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
b5e0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
b5f0: 69 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74 43  ide int ContextC
b600: 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f  ollateCompare(Co
b610: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
b620: 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20  num enc, IntPtr 
b630: 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20  context, string 
b640: 73 31 2c 20 73 74 72 69 6e 67 20 73 32 29 0d 0a  s1, string s2)..
b650: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
b660: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
b670: 20 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20     byte[] b1;.. 
b680: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d       byte[] b2;.
b690: 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 65  .      System.Te
b6a0: 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76  xt.Encoding conv
b6b0: 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  erter = null;...
b6c0: 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28 65  .      switch (e
b6d0: 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  nc)..      {..  
b6e0: 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61        case Colla
b6f0: 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
b700: 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20 20  .UTF8:..        
b710: 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
b720: 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
b730: 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20  ng.UTF8;..      
b740: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
b750: 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
b760: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
b770: 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20  TF16LE:..       
b780: 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
b790: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
b7a0: 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20  ing.Unicode;..  
b7b0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
b7c0: 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c          case Col
b7d0: 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
b7e0: 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20 20  um.UTF16BE:..   
b7f0: 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72         converter
b800: 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45   = System.Text.E
b810: 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69 61  ncoding.BigEndia
b820: 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20  nUnicode;..     
b830: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
b840: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31     }....      b1
b850: 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74   = converter.Get
b860: 42 79 74 65 73 28 73 31 29 3b 0d 0a 20 20 20 20  Bytes(s1);..    
b870: 20 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65 72    b2 = converter
b880: 2e 47 65 74 42 79 74 65 73 28 73 32 29 3b 0d 0a  .GetBytes(s2);..
b890: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
b8a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b8b0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ds.sqlite3_conte
b8c0: 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69  xt_collcompare_i
b8d0: 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20  nterop(context, 
b8e0: 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62  b1, b1.Length, b
b8f0: 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a  2, b2.Length);..
b900: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
b910: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
b920: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
b930: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
b940: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
b950: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f   override int Co
b960: 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70  ntextCollateComp
b970: 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  are(CollationEnc
b980: 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49  odingEnum enc, I
b990: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 63  ntPtr context, c
b9a0: 68 61 72 5b 5d 20 63 31 2c 20 63 68 61 72 5b 5d  har[] c1, char[]
b9b0: 20 63 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66   c2)..    {..#if
b9c0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
b9d0: 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  D..      byte[] 
b9e0: 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b  b1;..      byte[
b9f0: 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73  ] b2;..      Sys
ba00: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
ba10: 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75  g converter = nu
ba20: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69  ll;....      swi
ba30: 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20  tch (enc)..     
ba40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65   {..        case
ba50: 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
ba60: 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20  ngEnum.UTF8:..  
ba70: 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
ba80: 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
ba90: 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a  Encoding.UTF8;..
baa0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
bab0: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
bac0: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
bad0: 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20  Enum.UTF16LE:.. 
bae0: 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
baf0: 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
bb00: 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64  .Encoding.Unicod
bb10: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  e;..          br
bb20: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  eak;..        ca
bb30: 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
bb40: 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45  dingEnum.UTF16BE
bb50: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
bb60: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
bb70: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69  Text.Encoding.Bi
bb80: 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d  gEndianUnicode;.
bb90: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
bba0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
bbb0: 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74      b1 = convert
bbc0: 65 72 2e 47 65 74 42 79 74 65 73 28 63 31 29 3b  er.GetBytes(c1);
bbd0: 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e  ..      b2 = con
bbe0: 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28  verter.GetBytes(
bbf0: 63 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  c2);....      re
bc00: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
bc10: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
bc20: 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d  _context_collcom
bc30: 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  pare_interop(con
bc40: 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e  text, b1, b1.Len
bc50: 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67  gth, b2, b2.Leng
bc60: 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  th);..#else..   
bc70: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
bc80: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
bc90: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
bca0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
bcb0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
bcc0: 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  CollationSequenc
bcd0: 65 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65  e GetCollationSe
bce0: 71 75 65 6e 63 65 28 53 51 4c 69 74 65 46 75 6e  quence(SQLiteFun
bcf0: 63 74 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74 50  ction func, IntP
bd00: 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20  tr context)..   
bd10: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
bd20: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
bd30: 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  CollationSequenc
bd40: 65 20 73 65 71 20 3d 20 6e 65 77 20 43 6f 6c 6c  e seq = new Coll
bd50: 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 29 3b  ationSequence();
bd60: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
bd70: 0d 0a 20 20 20 20 20 20 69 6e 74 20 74 79 70 65  ..      int type
bd80: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 65 6e 63  ;..      int enc
bd90: 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
bda0: 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
bdb0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
bdc0: 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 73 65 71 5f  context_collseq_
bdd0: 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c  interop(context,
bde0: 20 6f 75 74 20 74 79 70 65 2c 20 6f 75 74 20 65   out type, out e
bdf0: 6e 63 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 0d  nc, out len);...
be00: 0a 20 20 20 20 20 20 69 66 20 28 70 20 21 3d 20  .      if (p != 
be10: 6e 75 6c 6c 29 20 73 65 71 2e 4e 61 6d 65 20 3d  null) seq.Name =
be20: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c   UTF8ToString(p,
be30: 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 73 65   len);..      se
be40: 71 2e 54 79 70 65 20 3d 20 28 43 6f 6c 6c 61 74  q.Type = (Collat
be50: 69 6f 6e 54 79 70 65 45 6e 75 6d 29 74 79 70 65  ionTypeEnum)type
be60: 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 5f 66 75  ;..      seq._fu
be70: 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a 20 20 20 20  nc = func;..    
be80: 20 20 73 65 71 2e 45 6e 63 6f 64 69 6e 67 20 3d    seq.Encoding =
be90: 20 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64   (CollationEncod
bea0: 69 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a  ingEnum)enc;....
beb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 65 71        return seq
bec0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
bed0: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
bee0: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
bef0: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
bf00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
bf10: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
bf20: 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 42  g GetParamValueB
bf30: 79 74 65 73 28 49 6e 74 50 74 72 20 70 2c 20 69  ytes(IntPtr p, i
bf40: 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20  nt nDataOffset, 
bf50: 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e  byte[] bDest, in
bf60: 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c  t nStart, int nL
bf70: 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20  ength)..    {.. 
bf80: 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20       int nlen = 
bf90: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
bfa0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
bfb0: 65 5f 62 79 74 65 73 28 70 29 3b 0d 0a 0d 0a 20  e_bytes(p);.... 
bfc0: 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65       // If no de
bfd0: 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72  stination buffer
bfe0: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a  , return the siz
bff0: 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20  e needed...     
c000: 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75   if (bDest == nu
c010: 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b  ll) return nlen;
c020: 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43  ....      int nC
c030: 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b  opied = nLength;
c040: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
c050: 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e  opied + nStart >
c060: 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e   bDest.Length) n
c070: 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c  Copied = bDest.L
c080: 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d  ength - nStart;.
c090: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
c0a0: 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74  ed + nDataOffset
c0b0: 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64   > nlen) nCopied
c0c0: 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f   = nlen - nDataO
c0d0: 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ffset;....      
c0e0: 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29  if (nCopied > 0)
c0f0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
c100: 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20     IntPtr ptr = 
c110: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
c120: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
c130: 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20  e_blob(p);....  
c140: 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f        Marshal.Co
c150: 70 79 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e  py((IntPtr)(ptr.
c160: 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74  ToInt64() + nDat
c170: 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c  aOffset), bDest,
c180: 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64   nStart, nCopied
c190: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
c1a0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b     else..      {
c1b0: 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65  ..        nCopie
c1c0: 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d  d = 0;..      }.
c1d0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
c1e0: 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d  nCopied;..    }.
c1f0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
c200: 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20  override double 
c210: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 44 6f 75  GetParamValueDou
c220: 62 6c 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d  ble(IntPtr ptr).
c230: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f  .    {..      do
c240: 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66  uble value;..#if
c250: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
c260: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
c270: 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66     value = Unsaf
c280: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c290: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75  qlite3_value_dou
c2a0: 62 6c 65 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66  ble(ptr);..#elif
c2b0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
c2c0: 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  D..      UnsafeN
c2d0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
c2e0: 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c  ite3_value_doubl
c2f0: 65 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f  e_interop(ptr, o
c300: 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ut value);..#els
c310: 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
c320: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
c330: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
c340: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74  endif..      ret
c350: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
c360: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
c370: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47  l override int G
c380: 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 33  etParamValueInt3
c390: 32 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  2(IntPtr ptr).. 
c3a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
c3b0: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
c3c0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
c3d0: 61 6c 75 65 5f 69 6e 74 28 70 74 72 29 3b 0d 0a  alue_int(ptr);..
c3e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
c3f0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
c400: 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ong GetParamValu
c410: 65 49 6e 74 36 34 28 49 6e 74 50 74 72 20 70 74  eInt64(IntPtr pt
c420: 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  r)..    {..     
c430: 20 49 6e 74 36 34 20 76 61 6c 75 65 3b 0d 0a 23   Int64 value;..#
c440: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
c450: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
c460: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73       value = Uns
c470: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c480: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69  .sqlite3_value_i
c490: 6e 74 36 34 28 70 74 72 29 3b 0d 0a 23 65 6c 69  nt64(ptr);..#eli
c4a0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
c4b0: 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RD..      Unsafe
c4c0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c4d0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36  lite3_value_int6
c4e0: 34 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f  4_interop(ptr, o
c4f0: 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ut value);..#els
c500: 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
c510: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
c520: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
c530: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74  endif..      ret
c540: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
c550: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
c560: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
c570: 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54  g GetParamValueT
c580: 65 78 74 28 49 6e 74 50 74 72 20 70 74 72 29 0d  ext(IntPtr ptr).
c590: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
c5a0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
c5b0: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20      int len;..  
c5c0: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
c5d0: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
c5e0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
c5f0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69  te3_value_text_i
c600: 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20  nterop(ptr, out 
c610: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
c620: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
c630: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
c640: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
c650: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
c660: 74 65 78 74 28 70 74 72 29 2c 0d 0a 20 20 20 20  text(ptr),..    
c670: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
c680: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
c690: 76 61 6c 75 65 5f 62 79 74 65 73 28 70 74 72 29  value_bytes(ptr)
c6a0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
c6b0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
c6c0: 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41  l override TypeA
c6d0: 66 66 69 6e 69 74 79 20 47 65 74 50 61 72 61 6d  ffinity GetParam
c6e0: 56 61 6c 75 65 54 79 70 65 28 49 6e 74 50 74 72  ValueType(IntPtr
c6f0: 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   ptr)..    {..  
c700: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
c710: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c720: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
c730: 65 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a  e(ptr);..    }..
c740: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
c750: 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
c760: 75 72 6e 42 6c 6f 62 28 49 6e 74 50 74 72 20 63  urnBlob(IntPtr c
c770: 6f 6e 74 65 78 74 2c 20 62 79 74 65 5b 5d 20 76  ontext, byte[] v
c780: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
c790: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
c7a0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
c7b0: 72 65 73 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e 74  result_blob(cont
c7c0: 65 78 74 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75  ext, value, valu
c7d0: 65 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74  e.Length, (IntPt
c7e0: 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d  r)(-1));..    }.
c7f0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
c800: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
c810: 74 75 72 6e 44 6f 75 62 6c 65 28 49 6e 74 50 74  turnDouble(IntPt
c820: 72 20 63 6f 6e 74 65 78 74 2c 20 64 6f 75 62 6c  r context, doubl
c830: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  e value)..    {.
c840: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
c850: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
c860: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
c870: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
c880: 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65  e3_result_double
c890: 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29  (context, value)
c8a0: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
c8b0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
c8c0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
c8d0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
c8e0: 75 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  ult_double_inter
c8f0: 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20  op(context, ref 
c900: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
c910: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
c920: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
c930: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
c940: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
c950: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c960: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 45 72  de void ReturnEr
c970: 72 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ror(IntPtr conte
c980: 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  xt, string value
c990: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
c9a0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
c9b0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
c9c0: 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74  lt_error(context
c9d0: 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c  , ToUTF8(value),
c9e0: 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d   value.Length);.
c9f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
ca00: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
ca10: 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 33 32  void ReturnInt32
ca20: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
ca30: 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20   int value)..   
ca40: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
ca50: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ca60: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
ca70: 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29  (context, value)
ca80: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
ca90: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
caa0: 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74  e void ReturnInt
cab0: 36 34 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  64(IntPtr contex
cac0: 74 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a  t, long value)..
cad0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
cae0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
caf0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73  EWORK..      Uns
cb00: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
cb10: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
cb20: 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20 76  int64(context, v
cb30: 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53  alue);..#elif !S
cb40: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
cb50: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
cb60: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
cb70: 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69  3_result_int64_i
cb80: 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20  nterop(context, 
cb90: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
cba0: 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
cbb0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
cbc0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
cbd0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
cbe0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
cbf0: 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
cc00: 72 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f  rnNull(IntPtr co
cc10: 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  ntext)..    {.. 
cc20: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
cc30: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
cc40: 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e  _result_null(con
cc50: 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  text);..    }...
cc60: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
cc70: 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
cc80: 72 6e 54 65 78 74 28 49 6e 74 50 74 72 20 63 6f  rnText(IntPtr co
cc90: 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61  ntext, string va
cca0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
ccb0: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
ccc0: 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20  UTF8(value);..  
ccd0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
cce0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
ccf0: 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74  result_text(cont
cd00: 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75  ext, ToUTF8(valu
cd10: 65 29 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31  e), b.Length - 1
cd20: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
cd30: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
cd40: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
cd50: 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20    /// Calls the 
cd60: 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f  native SQLite co
cd70: 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72  re library in or
cd80: 64 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20  der to create a 
cd90: 64 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20  disposable..    
cda0: 2f 2f 2f 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61  /// module conta
cdb0: 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d  ining the implem
cdc0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76 69  entation of a vi
cdd0: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
cde0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
cdf0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
ce00: 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d   name="module">.
ce10: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64  .    /// The mod
ce20: 75 6c 65 20 6f 62 6a 65 63 74 20 74 6f 20 62 65  ule object to be
ce30: 20 75 73 65 64 20 77 68 65 6e 20 63 72 65 61 74   used when creat
ce40: 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 64  ing the native d
ce50: 69 73 70 6f 73 61 62 6c 65 20 6d 6f 64 75 6c 65  isposable module
ce60: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
ce70: 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
ce80: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
ce90: 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 53 51 4c  CreateModule(SQL
cea0: 69 74 65 4d 6f 64 75 6c 65 42 61 73 65 20 6d 6f  iteModuleBase mo
ceb0: 64 75 6c 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  dule)..    {..  
cec0: 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
ced0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
cee0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
cef0: 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
cf00: 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29  eption("module")
cf10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
cf20: 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (_sql == null)..
cf30: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
cf40: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
cf50: 70 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f  ption("connectio
cf60: 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  n has an invalid
cf70: 20 68 61 6e 64 6c 65 22 29 3b 0d 0a 0d 0a 20 20   handle");....  
cf80: 20 20 20 20 20 20 53 65 74 4c 6f 61 64 45 78 74        SetLoadExt
cf90: 65 6e 73 69 6f 6e 28 74 72 75 65 29 3b 0d 0a 20  ension(true);.. 
cfa0: 20 20 20 20 20 20 20 4c 6f 61 64 45 78 74 65 6e         LoadExten
cfb0: 73 69 6f 6e 28 55 6e 73 61 66 65 4e 61 74 69 76  sion(UnsafeNativ
cfc0: 65 4d 65 74 68 6f 64 73 2e 53 51 4c 49 54 45 5f  eMethods.SQLITE_
cfd0: 44 4c 4c 2c 20 22 73 71 6c 69 74 65 33 5f 76 74  DLL, "sqlite3_vt
cfe0: 73 68 69 6d 5f 69 6e 69 74 22 29 3b 0d 0a 0d 0a  shim_init");....
cff0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
d000: 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65  Name = IntPtr.Ze
d010: 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ro;....        t
d020: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
d030: 20 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65             pName
d040: 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c   = SQLiteMarshal
d050: 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53  .Utf8IntPtrFromS
d060: 74 72 69 6e 67 28 6d 6f 64 75 6c 65 2e 4e 61 6d  tring(module.Nam
d070: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
d080: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
d090: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
d0a0: 6f 64 75 6c 65 20 6e 61 74 69 76 65 4d 6f 64 75  odule nativeModu
d0b0: 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  le =..          
d0c0: 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 43 72 65        module.Cre
d0d0: 61 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28  ateNativeModule(
d0e0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
d0f0: 20 20 69 66 20 28 55 6e 73 61 66 65 4e 61 74 69    if (UnsafeNati
d100: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d110: 33 5f 63 72 65 61 74 65 5f 64 69 73 70 6f 73 61  3_create_disposa
d120: 62 6c 65 5f 6d 6f 64 75 6c 65 28 0d 0a 20 20 20  ble_module(..   
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d140: 20 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c 20 72 65   _sql, pName, re
d150: 66 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2c 20  f nativeModule, 
d160: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20  IntPtr.Zero,..  
d170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d180: 20 20 6e 75 6c 6c 29 20 21 3d 20 49 6e 74 50 74    null) != IntPt
d190: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
d1a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d1b0: 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f 64          if (_mod
d1c0: 75 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ules == null).. 
d1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1e0: 20 20 20 5f 6d 6f 64 75 6c 65 73 20 3d 20 6e 65     _modules = ne
d1f0: 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72  w Dictionary<str
d200: 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c  ing, SQLiteModul
d210: 65 42 61 73 65 3e 28 29 3b 0d 0a 0d 0a 20 20 20  eBase>();....   
d220: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f               _mo
d230: 64 75 6c 65 73 2e 41 64 64 28 6d 6f 64 75 6c 65  dules.Add(module
d240: 2e 4e 61 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b 0d  .Name, module);.
d250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
d260: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
d270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
d280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d290: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
d2a0: 65 45 78 63 65 70 74 69 6f 6e 28 53 51 4c 69 74  eException(SQLit
d2b0: 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
d2c0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
d2d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
d2e0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
d2f0: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
d300: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d310: 20 20 20 20 20 20 69 66 20 28 70 4e 61 6d 65 20        if (pName 
d320: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
d330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d350: 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
d360: 65 28 70 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  e(pName);..     
d370: 20 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65             pName
d380: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
d390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
d3a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
d3b0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
d3c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
d3d0: 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20  alls the native 
d3e0: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
d3f0: 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ary in order to 
d400: 63 6c 65 61 6e 75 70 20 74 68 65 20 72 65 73 6f  cleanup the reso
d410: 75 72 63 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 61  urces..    /// a
d420: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
d430: 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69   module containi
d440: 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  ng the implement
d450: 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75  ation of a virtu
d460: 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f  al table...    /
d470: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
d480: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
d490: 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20  me="module">..  
d4a0: 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65    /// The module
d4b0: 20 6f 62 6a 65 63 74 20 70 72 65 76 69 6f 75 73   object previous
d4c0: 6c 79 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  ly passed to the
d4d0: 20 3c 73 65 65 20 63 72 65 66 3d 22 43 72 65 61   <see cref="Crea
d4e0: 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20  teModule" />..  
d4f0: 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20    /// method... 
d500: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
d510: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d520: 65 72 72 69 64 65 20 76 6f 69 64 20 44 69 73 70  erride void Disp
d530: 6f 73 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65  oseModule(SQLite
d540: 4d 6f 64 75 6c 65 42 61 73 65 20 6d 6f 64 75 6c  ModuleBase modul
d550: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
d560: 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
d570: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
d580: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
d590: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
d5a0: 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a  ion("module");..
d5b0: 0d 0a 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65  ..        module
d5c0: 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
d5d0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
d5e0: 61 6c 20 6f 76 65 72 72 69 64 65 20 49 6e 74 50  al override IntP
d5f0: 74 72 20 41 67 67 72 65 67 61 74 65 43 6f 6e 74  tr AggregateCont
d600: 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ext(IntPtr conte
d610: 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  xt)..    {..    
d620: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
d630: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d640: 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63  ite3_aggregate_c
d650: 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20  ontext(context, 
d660: 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  1);..    }....  
d670: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
d680: 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74  .    /// Calls t
d690: 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65  he native SQLite
d6a0: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e   core library in
d6b0: 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61 72   order to declar
d6c0: 65 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  e a virtual tabl
d6d0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20 72 65  e..    /// in re
d6e0: 73 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c  sponse to a call
d6f0: 20 69 6e 74 6f 20 74 68 65 20 78 43 72 65 61 74   into the xCreat
d700: 65 20 6f 72 20 78 43 6f 6e 6e 65 63 74 20 76 69  e or xConnect vi
d710: 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74 68  rtual table meth
d720: 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ods...    /// </
d730: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
d740: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
d750: 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  odule">..    ///
d760: 20 54 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   The virtual tab
d770: 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61 74 20 69  le module that i
d780: 73 20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73 69  s to be responsi
d790: 62 6c 65 20 66 6f 72 20 74 68 65 20 76 69 72 74  ble for the virt
d7a0: 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  ual table..    /
d7b0: 2f 2f 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65  // being declare
d7c0: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
d7d0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
d7e0: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 53 71  aram name="strSq
d7f0: 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  l">..    /// The
d800: 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
d810: 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
d820: 6d 65 6e 74 20 64 65 73 63 72 69 62 69 6e 67 20  ment describing 
d830: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
d840: 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62 65  e to..    /// be
d850: 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20   declared...    
d860: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
d870: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
d880: 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20  e="error">..    
d890: 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73  /// Upon success
d8a0: 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  , the contents o
d8b0: 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  f this parameter
d8c0: 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 20   are undefined. 
d8d0: 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a   Upon failure,..
d8e0: 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c      /// it shoul
d8f0: 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70  d contain an app
d900: 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d  ropriate error m
d910: 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f  essage...    ///
d920: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
d930: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
d940: 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
d950: 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
d960: 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ode...    /// </
d970: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
d980: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
d990: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
d9a0: 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c 54 61  DeclareVirtualTa
d9b0: 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 53 51  ble(..        SQ
d9c0: 4c 69 74 65 4d 6f 64 75 6c 65 42 61 73 65 20 6d  LiteModuleBase m
d9d0: 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  odule,..        
d9e0: 73 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 0d 0a  string strSql,..
d9f0: 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
da00: 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
da10: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
da20: 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20      if (_sql == 
da30: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
da40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 72  ..            er
da50: 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f  ror = "connectio
da60: 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  n has an invalid
da70: 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20   handle";..     
da80: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
da90: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
daa0: 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ror;..        }.
dab0: 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
dac0: 72 20 70 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e  r pSql = IntPtr.
dad0: 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
dae0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
daf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 53 71  .            pSq
db00: 6c 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68 61  l = SQLiteMarsha
db10: 6c 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d  l.Utf8IntPtrFrom
db20: 53 74 72 69 6e 67 28 73 74 72 53 71 6c 29 3b 0d  String(strSql);.
db30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
db40: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
db50: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
db60: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64  ethods.sqlite3_d
db70: 65 63 6c 61 72 65 5f 76 74 61 62 28 0d 0a 20 20  eclare_vtab(..  
db80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
db90: 71 6c 2c 20 70 53 71 6c 29 3b 0d 0a 0d 0a 20 20  ql, pSql);....  
dba0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e            if ((n
dbb0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
dbc0: 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6d 6f 64 75  ode.Ok) && (modu
dbd0: 6c 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  le != null))..  
dbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
dbf0: 64 75 6c 65 2e 44 65 63 6c 61 72 65 64 20 3d 20  dule.Declared = 
dc00: 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
dc10: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
dc20: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
dc30: 29 20 65 72 72 6f 72 20 3d 20 47 65 74 4c 61 73  ) error = GetLas
dc40: 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20  tError();....   
dc50: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
dc60: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n;..        }.. 
dc70: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
dc80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
dc90: 20 20 20 20 20 20 20 69 66 20 28 70 53 71 6c 20         if (pSql 
dca0: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
dcb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcd0: 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
dce0: 65 28 70 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20  e(pSql);..      
dcf0: 20 20 20 20 20 20 20 20 20 20 70 53 71 6c 20 3d            pSql =
dd00: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
dd10: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
dd20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
dd30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
dd40: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61  ry>..    /// Ena
dd50: 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64  bles or disabled
dd60: 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69   extension loadi
dd70: 6e 67 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a 20  ng by SQLite... 
dd80: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
dd90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
dda0: 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e  m name="bOnOff">
ddb0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 74  ..    /// True t
ddc0: 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67  o enable loading
ddd0: 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20   of extensions, 
dde0: 66 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65  false to disable
ddf0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
de00: 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
de10: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
de20: 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  SetLoadExtension
de30: 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20  (bool bOnOff).. 
de40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
de50: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
de60: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
de70: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 6e  thods.sqlite3_en
de80: 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  able_load_extens
de90: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
dea0: 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20    _sql, (bOnOff 
deb0: 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20  ? -1 : 0));.... 
dec0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
ded0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
dee0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
def0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
df00: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
df10: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
df20: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
df30: 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20 53     /// Loads a S
df40: 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 20  QLite extension 
df50: 6c 69 62 72 61 72 79 20 66 72 6f 6d 20 74 68 65  library from the
df60: 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a 20 20   named file...  
df70: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
df80: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
df90: 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22   name="fileName"
dfa0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
dfb0: 61 6d 65 20 6f 66 20 74 68 65 20 64 79 6e 61 6d  ame of the dynam
dfc0: 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72 79 20  ic link library 
dfd0: 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  file containing 
dfe0: 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a  the extension...
dff0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
e000: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
e010: 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d 65 22   name="procName"
e020: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
e030: 61 6d 65 20 6f 66 20 74 68 65 20 65 78 70 6f 72  ame of the expor
e040: 74 65 64 20 66 75 6e 63 74 69 6f 6e 20 75 73 65  ted function use
e050: 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20  d to initialize 
e060: 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a  the extension...
e070: 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c 2c      /// If null,
e080: 20 74 68 65 20 64 65 66 61 75 6c 74 20 22 73 71   the default "sq
e090: 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f  lite3_extension_
e0a0: 69 6e 69 74 22 20 77 69 6c 6c 20 62 65 20 75 73  init" will be us
e0b0: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
e0c0: 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
e0d0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
e0e0: 64 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28  d LoadExtension(
e0f0: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
e100: 20 73 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d 65   string procName
e110: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
e120: 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d    if (fileName =
e130: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
e140: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
e150: 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
e160: 74 69 6f 6e 28 22 66 69 6c 65 4e 61 6d 65 22 29  tion("fileName")
e170: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
e180: 50 74 72 20 70 45 72 72 6f 72 20 3d 20 49 6e 74  Ptr pError = Int
e190: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
e1a0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
e1b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e1c0: 20 62 79 74 65 5b 5d 20 75 74 66 38 46 69 6c 65   byte[] utf8File
e1d0: 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64  Name = UTF8Encod
e1e0: 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65  ing.UTF8.GetByte
e1f0: 73 28 66 69 6c 65 4e 61 6d 65 20 2b 20 27 5c 30  s(fileName + '\0
e200: 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ');..           
e210: 20 62 79 74 65 5b 5d 20 75 74 66 38 50 72 6f 63   byte[] utf8Proc
e220: 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  Name = null;....
e230: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
e240: 70 72 6f 63 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  procName != null
e250: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
e260: 20 20 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20     utf8ProcName 
e270: 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55  = UTF8Encoding.U
e280: 54 46 38 2e 47 65 74 42 79 74 65 73 28 70 72 6f  TF8.GetBytes(pro
e290: 63 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a  cName + '\0');..
e2a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
e2b0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
e2c0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
e2d0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f  thods.sqlite3_lo
e2e0: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20  ad_extension(.. 
e2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
e300: 73 71 6c 2c 20 75 74 66 38 46 69 6c 65 4e 61 6d  sql, utf8FileNam
e310: 65 2c 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 2c  e, utf8ProcName,
e320: 20 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a 0d   ref pError);...
e330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
e340: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
e350: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
e360: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
e370: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
e380: 74 69 6f 6e 28 6e 2c 20 55 54 46 38 54 6f 53 74  tion(n, UTF8ToSt
e390: 72 69 6e 67 28 70 45 72 72 6f 72 2c 20 2d 31 29  ring(pError, -1)
e3a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
e3b0: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
e3c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e3d0: 20 20 20 20 20 20 20 69 66 20 28 70 45 72 72 6f         if (pErro
e3e0: 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r != IntPtr.Zero
e3f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e410: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
e420: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 72  thods.sqlite3_fr
e430: 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20  ee(pError);..   
e440: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45 72               pEr
e450: 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ror = IntPtr.Zer
e460: 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
e470: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
e480: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45    }....    /// E
e490: 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c  nables or disabl
e4a0: 65 64 20 65 78 74 65 6e 64 65 64 20 72 65 73 75  ed extended resu
e4b0: 6c 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e 65  lt codes returne
e4c0: 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20 20  d by SQLite..   
e4d0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
e4e0: 64 65 20 76 6f 69 64 20 53 65 74 45 78 74 65 6e  de void SetExten
e4f0: 64 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28 62  dedResultCodes(b
e500: 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20  ool bOnOff)..   
e510: 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
e520: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
e530: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e540: 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64  s.sqlite3_extend
e550: 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28  ed_result_codes(
e560: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c  ..          _sql
e570: 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a  , (bOnOff ? -1 :
e580: 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69   0));....      i
e590: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
e5a0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
e5b0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
e5c0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
e5d0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
e5e0: 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74  ..    /// Gets t
e5f0: 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65  he last SQLite e
e600: 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69  rror code..    i
e610: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
e620: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
e630: 20 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20   ResultCode().. 
e640: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
e650: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
e660: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
e670: 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20  rrcode(_sql);.. 
e680: 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65     }..    /// Ge
e690: 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69  ts the last SQLi
e6a0: 74 65 20 65 78 74 65 6e 64 65 64 20 65 72 72 6f  te extended erro
e6b0: 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65  r code..    inte
e6c0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
e6d0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 45 78  LiteErrorCode Ex
e6e0: 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65  tendedResultCode
e6f0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
e700: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
e710: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
e720: 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72  te3_extended_err
e730: 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20  code(_sql);..   
e740: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64   }....    /// Ad
e750: 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20  d a log message 
e760: 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 73  via the SQLite s
e770: 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72  qlite3_log inter
e780: 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72  face...    inter
e790: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
e7a0: 64 20 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c  d LogMessage(SQL
e7b0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 69 45 72  iteErrorCode iEr
e7c0: 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d  rCode, string zM
e7d0: 65 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a  essage)..    {..
e7e0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
e7f0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
e800: 33 5f 6c 6f 67 28 69 45 72 72 43 6f 64 65 2c 20  3_log(iErrCode, 
e810: 54 6f 55 54 46 38 28 7a 4d 65 73 73 61 67 65 29  ToUTF8(zMessage)
e820: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66  );..    }....#if
e830: 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 0d 0a   INTEROP_CODEC..
e840: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
e850: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 50 61  rride void SetPa
e860: 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 70 61  ssword(byte[] pa
e870: 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20  sswordBytes)..  
e880: 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
e890: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
e8a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
e8b0: 64 73 2e 73 71 6c 69 74 65 33 5f 6b 65 79 28 5f  ds.sqlite3_key(_
e8c0: 73 71 6c 2c 20 70 61 73 73 77 6f 72 64 42 79 74  sql, passwordByt
e8d0: 65 73 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65  es, passwordByte
e8e0: 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20  s.Length);..    
e8f0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
e900: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
e910: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
e920: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
e930: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
e940: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
e950: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
e960: 64 20 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64  d ChangePassword
e970: 28 62 79 74 65 5b 5d 20 6e 65 77 50 61 73 73 77  (byte[] newPassw
e980: 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b  ordBytes)..    {
e990: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
e9a0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
e9b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e9c0: 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 28 5f 73  sqlite3_rekey(_s
e9d0: 71 6c 2c 20 6e 65 77 50 61 73 73 77 6f 72 64 42  ql, newPasswordB
e9e0: 79 74 65 73 2c 20 28 6e 65 77 50 61 73 73 77 6f  ytes, (newPasswo
e9f0: 72 64 42 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29  rdBytes == null)
ea00: 20 3f 20 30 20 3a 20 6e 65 77 50 61 73 73 77 6f   ? 0 : newPasswo
ea10: 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b  rdBytes.Length);
ea20: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
ea30: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
ea40: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
ea50: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
ea60: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
ea70: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69  );..    }..#endi
ea80: 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  f....    interna
ea90: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
eaa0: 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51  SetUpdateHook(SQ
eab0: 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61  LiteUpdateCallba
eac0: 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
ead0: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
eae0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
eaf0: 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f  e3_update_hook(_
eb00: 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
eb10: 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
eb20: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
eb30: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
eb40: 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69  tCommitHook(SQLi
eb50: 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  teCommitCallback
eb60: 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
eb70: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
eb80: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
eb90: 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71  _commit_hook(_sq
eba0: 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
ebb0: 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
ebc0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
ebd0: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54  erride void SetT
ebe0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c  raceCallback(SQL
ebf0: 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b  iteTraceCallback
ec00: 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
ec10: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
ec20: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ec30: 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e  _trace(_sql, fun
ec40: 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
ec50: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
ec60: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
ec70: 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63   void SetRollbac
ec80: 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c  kHook(SQLiteRoll
ec90: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e  backCallback fun
eca0: 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
ecb0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ecc0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c  hods.sqlite3_rol
ecd0: 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c  lback_hook(_sql,
ece0: 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
ecf0: 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
ed00: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
ed10: 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73  ..    /// Allows
ed20: 20 74 68 65 20 73 65 74 74 69 6e 67 20 6f 66 20   the setting of 
ed30: 61 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61  a logging callba
ed40: 63 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20 53 51  ck invoked by SQ
ed50: 4c 69 74 65 20 77 68 65 6e 20 61 0d 0a 20 20 20  Lite when a..   
ed60: 20 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f   /// log event o
ed70: 63 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65  ccurs.  Only one
ed80: 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65   callback may be
ed90: 20 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69   set.  If NULL i
eda0: 73 20 70 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f  s passed,..    /
edb0: 2f 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63  // the logging c
edc0: 61 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72 65 67  allback is unreg
edd0: 69 73 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f  istered...    //
ede0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
edf0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
ee00: 65 3d 22 66 75 6e 63 22 3e 54 68 65 20 63 61 6c  e="func">The cal
ee10: 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74  lback function t
ee20: 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d  o invoke.</param
ee30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
ee40: 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65  rns>Returns a re
ee50: 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72  sult code</retur
ee60: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
ee70: 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
ee80: 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f  eErrorCode SetLo
ee90: 67 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65  gCallback(SQLite
eea0: 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  LogCallback func
eeb0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
eec0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
eed0: 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
eee0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
eef0: 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a  e3_config_log(..
ef00: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
ef10: 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e  teConfigOpsEnum.
ef20: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f  SQLITE_CONFIG_LO
ef30: 47 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  G, func, IntPtr.
ef40: 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Zero);....      
ef50: 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20    return rc;..  
ef60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
ef70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
efd0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
efe0: 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73  .    /// Creates
eff0: 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20 62 61   a new SQLite ba
f000: 63 6b 75 70 20 6f 62 6a 65 63 74 20 62 61 73 65  ckup object base
f010: 64 20 6f 6e 20 74 68 65 20 70 72 6f 76 69 64 65  d on the provide
f020: 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20  d destination.. 
f030: 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20     /// database 
f040: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
f050: 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
f060: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74   connection is t
f070: 68 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20  he one..    /// 
f080: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
f090: 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68  this object.  Th
f0a0: 65 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73  e source and des
f0b0: 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73  tination databas
f0c0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65  e..    /// conne
f0d0: 63 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65  ctions cannot be
f0e0: 20 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20   the same...    
f0f0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
f100: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
f110: 61 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68  ame="destCnn">Th
f120: 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61  e destination da
f130: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
f140: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
f150: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
f160: 22 64 65 73 74 4e 61 6d 65 22 3e 54 68 65 20 64  "destName">The d
f170: 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62  estination datab
f180: 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d  ase name.</param
f190: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
f1a0: 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61  m name="sourceNa
f1b0: 6d 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64  me">The source d
f1c0: 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70  atabase name.</p
f1d0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
f1e0: 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c  returns>The newl
f1f0: 79 20 63 72 65 61 74 65 64 20 62 61 63 6b 75 70  y created backup
f200: 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e   object.</return
f210: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
f220: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
f230: 42 61 63 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a  Backup Initializ
f240: 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  eBackup(..      
f250: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
f260: 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20  on destCnn,..   
f270: 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 74       string dest
f280: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73  Name,..        s
f290: 74 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65  tring sourceName
f2a0: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
f2b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
f2c0: 64 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29  destCnn == null)
f2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
f2e0: 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
f2f0: 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64  NullException("d
f300: 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20  estCnn");....   
f310: 20 20 20 20 20 69 66 20 28 64 65 73 74 4e 61 6d       if (destNam
f320: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
f330: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
f340: 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
f350: 63 65 70 74 69 6f 6e 28 22 64 65 73 74 4e 61 6d  ception("destNam
f360: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
f370: 69 66 20 28 73 6f 75 72 63 65 4e 61 6d 65 20 3d  if (sourceName =
f380: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
f390: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
f3a0: 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
f3b0: 74 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d 65  tion("sourceName
f3c0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
f3d0: 51 4c 69 74 65 33 20 64 65 73 74 53 71 6c 69 74  QLite3 destSqlit
f3e0: 65 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73 71  e3 = destCnn._sq
f3f0: 6c 20 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d  l as SQLite3;...
f400: 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73  .        if (des
f410: 74 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c  tSqlite3 == null
f420: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
f430: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
f440: 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  tException(..   
f450: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
f460: 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63  stination connec
f470: 74 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61 70  tion has no wrap
f480: 70 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  per.",..        
f490: 20 20 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e          "destCnn
f4a0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
f4b0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
f4c0: 61 6e 64 6c 65 20 64 65 73 74 48 61 6e 64 6c 65  andle destHandle
f4d0: 20 3d 20 64 65 73 74 53 71 6c 69 74 65 33 2e 5f   = destSqlite3._
f4e0: 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  sql;....        
f4f0: 69 66 20 28 64 65 73 74 48 61 6e 64 6c 65 20 3d  if (destHandle =
f500: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
f510: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
f520: 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e  rgumentException
f530: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
f540: 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20     "Destination 
f550: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61  connection has a
f560: 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
f570: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
f580: 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b       "destCnn");
f590: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
f5a0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64  teConnectionHand
f5b0: 6c 65 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 20  le sourceHandle 
f5c0: 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = _sql;....     
f5d0: 20 20 20 69 66 20 28 73 6f 75 72 63 65 48 61 6e     if (sourceHan
f5e0: 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
f5f0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
f600: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
f610: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
f620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f630: 22 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74 69  "Source connecti
f640: 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  on has an invali
f650: 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a  d handle.");....
f660: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a          byte[] z
f670: 44 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54 46  DestName = ToUTF
f680: 38 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20 20  8(destName);..  
f690: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 53 6f        byte[] zSo
f6a0: 75 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54 46  urceName = ToUTF
f6b0: 38 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a  8(sourceName);..
f6c0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
f6d0: 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 62 61 63  BackupHandle bac
f6e0: 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c  kupHandle = null
f6f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79  ;....        try
f700: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
f710: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
f720: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
f730: 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61   }..        fina
f740: 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72  lly /* NOTE: Thr
f750: 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74  ead.Abort() prot
f760: 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20  ection. */..    
f770: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f780: 20 20 20 49 6e 74 50 74 72 20 62 61 63 6b 75 70     IntPtr backup
f790: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
f7a0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
f7b0: 61 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20 20  ackup_init(..   
f7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
f7d0: 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61  tHandle, zDestNa
f7e0: 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65  me, sourceHandle
f7f0: 2c 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d  , zSourceName);.
f800: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
f810: 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74  f (backup == Int
f820: 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
f830: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
f840: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
f850: 74 69 6f 6e 28 52 65 73 75 6c 74 43 6f 64 65 28  tion(ResultCode(
f860: 29 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  ), GetLastError(
f870: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
f880: 20 20 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20     backupHandle 
f890: 3d 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63 6b  = new SQLiteBack
f8a0: 75 70 48 61 6e 64 6c 65 28 64 65 73 74 48 61 6e  upHandle(destHan
f8b0: 64 6c 65 2c 20 62 61 63 6b 75 70 29 3b 0d 0a 20  dle, backup);.. 
f8c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
f8d0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53      return new S
f8e0: 51 4c 69 74 65 42 61 63 6b 75 70 28 0d 0a 20 20  QLiteBackup(..  
f8f0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2c 20            this, 
f900: 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64 65  backupHandle, de
f910: 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e  stHandle, zDestN
f920: 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c  ame, sourceHandl
f930: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
f940: 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 20  zSourceName);.. 
f950: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
f960: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
f970: 2f 2f 20 43 6f 70 69 65 73 20 75 70 20 74 6f 20  // Copies up to 
f980: 4e 20 70 61 67 65 73 20 66 72 6f 6d 20 74 68 65  N pages from the
f990: 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
f9a0: 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74   to the destinat
f9b0: 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74  ion..    /// dat
f9c0: 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
f9d0: 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
f9e0: 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ied backup objec
f9f0: 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
fa00: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
fa10: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
fa20: 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
fa30: 6f 62 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f  object to use.</
fa40: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
fa50: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61  <param name="nPa
fa60: 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ge">..    /// Th
fa70: 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
fa80: 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61 74  s to copy, negat
fa90: 69 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20  ive to copy all 
faa0: 72 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73 2e  remaining pages.
fab0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
fac0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
fad0: 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e  am name="retry">
fae0: 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f  ..    /// Set to
faf0: 20 74 72 75 65 20 69 66 20 74 68 65 20 6f 70 65   true if the ope
fb00: 72 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  ration needs to 
fb10: 62 65 20 72 65 74 72 69 65 64 20 64 75 65 20 74  be retried due t
fb20: 6f 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  o database..    
fb30: 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75  /// locking issu
fb40: 65 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 73  es; otherwise, s
fb50: 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20 20  et to false...  
fb60: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
fb70: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
fb80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20  >..    /// True 
fb90: 69 66 20 74 68 65 72 65 20 61 72 65 20 6d 6f 72  if there are mor
fba0: 65 20 70 61 67 65 73 20 74 6f 20 62 65 20 63 6f  e pages to be co
fbb0: 70 69 65 64 2c 20 66 61 6c 73 65 20 6f 74 68 65  pied, false othe
fbc0: 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  rwise...    /// 
fbd0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
fbe0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
fbf0: 65 20 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75  e bool StepBacku
fc00: 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
fc10: 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 2c  teBackup backup,
fc20: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 50  ..        int nP
fc30: 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 6f 75  age,..        ou
fc40: 74 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20 20  t bool retry..  
fc50: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
fc60: 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20          retry = 
fc70: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
fc80: 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
fc90: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
fca0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
fcb0: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
fcc0: 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
fcd0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
fce0: 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
fcf0: 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
fd00: 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
fd10: 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
fd20: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
fd30: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
fd40: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
fd50: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
fd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
fd70: 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
fd80: 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
fd90: 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
fda0: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50    IntPtr handleP
fdb0: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
fdc0: 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
fdd0: 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e  lePtr == IntPtr.
fde0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
fdf0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
fe00: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
fe10: 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
fe20: 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
fe30: 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
fe40: 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f  nvalid handle po
fe50: 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20  inter.");....   
fe60: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
fe70: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
fe80: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
fe90: 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70  ite3_backup_step
fea0: 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61 67  (handlePtr, nPag
feb0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 61 63  e);..        bac
fec0: 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 20  kup._stepResult 
fed0: 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61  = n; /* NOTE: Sa
fee0: 76 65 20 66 6f 72 20 75 73 65 20 62 79 20 46 69  ve for use by Fi
fef0: 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a  nishBackup. */..
ff00: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
ff10: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
ff20: 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
ff30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
ff40: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
ff50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
ff60: 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
ff70: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75  LiteErrorCode.Bu
ff80: 73 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  sy)..        {..
ff90: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72              retr
ffa0: 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
ffb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
ffc0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
ffd0: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
ffe0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
fff0: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20  rCode.Locked).. 
10000 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10010 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74 72        retry = tr
10020 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
10030 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
10040 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10050 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
10060 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
10070 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  Done)..        {
10080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
10090 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
100a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
100b0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  else..        {.
100c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
100d0 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
100e0 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
100f0 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
10100 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
10110 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
10120 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
10130 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
10140 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67   pages remaining
10150 20 74 6f 20 62 65 20 63 6f 70 69 65 64 20 66 72   to be copied fr
10160 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 0d 0a 20  om the source.. 
10170 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20     /// database 
10180 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69  to the destinati
10190 6f 6e 20 64 61 74 61 62 61 73 65 20 61 73 73 6f  on database asso
101a0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
101b0 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f  specified..    /
101c0 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  // backup object
101d0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
101e0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
101f0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
10200 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
10210 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c  bject to check.<
10220 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
10230 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75   <returns>The nu
10240 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72 65  mber of pages re
10250 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f  maining to be co
10260 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  pied.</returns>.
10270 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
10280 65 72 72 69 64 65 20 69 6e 74 20 52 65 6d 61 69  erride int Remai
10290 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20 20  ningBackup(..   
102a0 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
102b0 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20  p backup..      
102c0 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
102d0 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
102e0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
102f0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
10300 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
10310 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
10320 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
10330 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
10340 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
10350 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
10360 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
10370 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
10380 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
10390 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
103a0 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103c0 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
103d0 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
103e0 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
103f0 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
10400 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
10410 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
10420 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
10430 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
10440 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
10450 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
10460 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
10470 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
10480 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
10490 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
104a0 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20  pointer.");.... 
104b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
104c0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
104d0 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
104e0 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64 6c  _remaining(handl
104f0 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ePtr);..    }...
10500 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
10510 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
10520 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  rns the total nu
10530 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
10540 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   the source data
10550 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 0d  base associated.
10560 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68  .    /// with th
10570 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b  e specified back
10580 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20  up object...    
10590 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
105a0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
105b0 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65  ame="backup">The
105c0 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74   backup object t
105d0 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e  o check.</param>
105e0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
105f0 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns>The total num
10600 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
10610 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  the source datab
10620 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ase.</returns>..
10630 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10640 72 72 69 64 65 20 69 6e 74 20 50 61 67 65 43 6f  rride int PageCo
10650 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  untBackup(..    
10660 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
10670 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20   backup..       
10680 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
10690 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
106a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
106b0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
106c0 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
106d0 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
106e0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
106f0 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
10700 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
10710 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
10720 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
10730 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
10740 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
10750 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
10760 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
10770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
10780 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
10790 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
107a0 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
107b0 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
107c0 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
107d0 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
107e0 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72  dlePtr == IntPtr
107f0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
10800 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
10810 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
10820 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
10830 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
10840 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
10850 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
10860 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20  ointer.");....  
10870 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
10880 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10890 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  .sqlite3_backup_
108a0 70 61 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c 65  pagecount(handle
108b0 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  Ptr);..    }....
108c0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
108d0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74 72  >..    /// Destr
108e0 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70 20 6f  oys the backup o
108f0 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62  bject, rolling b
10900 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20 74  ack any backup t
10910 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20  hat may be in.. 
10920 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d     /// progess..
10930 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
10940 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
10950 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
10960 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
10970 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c  ect to destroy.<
10980 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
10990 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
109a0 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70  oid FinishBackup
109b0 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
109c0 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a  eBackup backup..
109d0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
109e0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61  ..        if (ba
109f0 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ckup == null).. 
10a00 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
10a10 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
10a20 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b  lException("back
10a30 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  up");....       
10a40 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
10a50 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63  dle handle = bac
10a60 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b  kup._sqlite_back
10a70 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  up;....        i
10a80 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  f (handle == nul
10a90 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
10aa0 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
10ab0 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
10ac0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
10ad0 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
10ae0 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
10af0 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
10b00 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
10b10 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e   handlePtr = han
10b20 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
10b30 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d  if (handlePtr ==
10b40 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
10b50 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
10b60 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
10b70 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
10b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10b90 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
10ba0 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
10bb0 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29  andle pointer.")
10bc0 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
10bd0 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
10be0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
10bf0 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
10c00 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10c10 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68  e3_backup_finish
10c20 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 50  _interop(handleP
10c30 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  tr);..#else..   
10c40 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
10c50 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
10c60 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10c70 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
10c80 73 68 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a  sh(handlePtr);..
10c90 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
10ca0 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65  handle.SetHandle
10cb0 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a  AsInvalid();....
10cc0 23 69 66 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45  #if COUNT_HANDLE
10cd0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 6e  ..        if ((n
10ce0 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
10cf0 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d 3d  ode.Ok) || (n ==
10d00 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73   backup._stepRes
10d10 75 6c 74 29 29 20 68 61 6e 64 6c 65 2e 57 61 73  ult)) handle.Was
10d20 52 65 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a 23  ReleasedOk();..#
10d30 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
10d40 20 69 66 20 28 28 6e 20 21 3d 20 53 51 4c 69 74   if ((n != SQLit
10d50 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26  eErrorCode.Ok) &
10d60 26 20 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e 5f  & (n != backup._
10d70 73 74 65 70 52 65 73 75 6c 74 29 29 0d 0a 20 20  stepResult))..  
10d80 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
10d90 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
10da0 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
10db0 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
10dc0 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
10dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e20 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
10e30 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
10e40 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69  /// Determines i
10e50 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
10e60 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
10e70 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  en initialized f
10e80 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  or the..    /// 
10e90 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
10ea0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
10eb0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
10ec0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
10ed0 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63   A boolean indic
10ee0 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
10ef0 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20   not the SQLite 
10f00 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
10f10 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69   been..    /// i
10f20 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74  nitialized for t
10f30 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
10f40 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ss...    /// </r
10f50 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
10f60 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
10f70 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a 65  ool IsInitialize
10f80 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  d()..    {..    
10f90 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69      return Stati
10fa0 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29  cIsInitialized()
10fb0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
10fc0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
10fd0 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65     /// Determine
10fe0 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  s if the SQLite 
10ff0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
11000 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65   been initialize
11010 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f  d for the..    /
11020 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  // current proce
11030 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ss...    /// </s
11040 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
11050 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
11060 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e  /// A boolean in
11070 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
11080 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69   or not the SQLi
11090 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
110a0 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f  has been..    //
110b0 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f  / initialized fo
110c0 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  r the current pr
110d0 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ocess...    /// 
110e0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
110f0 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
11100 62 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e 69  bool StaticIsIni
11110 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20  tialized()..    
11120 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  {..        //.. 
11130 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58         // BUGFIX
11140 3a 20 50 72 65 76 65 6e 74 20 72 61 63 65 73 20  : Prevent races 
11150 77 69 74 68 20 6f 74 68 65 72 20 74 68 72 65 61  with other threa
11160 64 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74 69  ds for this enti
11170 72 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20  re block, due.. 
11180 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
11190 20 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69 6e    to the try/fin
111a0 61 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e 20  ally semantics. 
111b0 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32 39   See ticket [729
111c0 30 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20  05c9a77]...     
111d0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c     //..        l
111e0 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a  ock (syncRoot)..
111f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11200 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
11210 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
11220 53 61 76 65 20 74 68 65 20 73 74 61 74 65 20 6f  Save the state o
11230 66 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c  f the logging cl
11240 61 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65 73  ass and then res
11250 74 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20 20  tore it..       
11260 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 66       //       af
11270 74 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65 20  ter we are done 
11280 74 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67  to avoid logging
11290 20 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20   too many false 
112a0 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20  errors...       
112b0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
112c0 20 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 45       bool savedE
112d0 6e 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c  nabled = SQLiteL
112e0 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20  og.Enabled;..   
112f0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
11300 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c  og.Enabled = fal
11310 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
11320 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
11330 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11340 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
11350 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
11360 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20  TE: This method 
11370 5b 61 62 5d 75 73 65 73 20 74 68 65 20 66 61 63  [ab]uses the fac
11380 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 69  t that SQLite wi
11390 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20  ll always..     
113a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
113b0 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
113c0 45 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79 20  E_ERROR for any 
113d0 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72  unknown configur
113e0 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20  ation option..  
113f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11400 20 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20         *unless* 
11410 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
11420 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 62  ry has already b
11430 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  een initialized.
11440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11450 20 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74 68    //       In th
11460 61 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c 20  at case it will 
11470 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53 51  always return SQ
11480 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20  LITE_MISUSE...  
11490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
114a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
114b0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
114c0 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
114d0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
114e0 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d  e3_config_none(.
114f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11500 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69       SQLiteConfi
11510 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  gOpsEnum.SQLITE_
11520 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d  CONFIG_NONE);...
11530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11540 20 72 65 74 75 72 6e 20 28 72 63 20 3d 3d 20 53   return (rc == S
11550 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4d  QLiteErrorCode.M
11560 69 73 75 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  isuse);..       
11570 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11580 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
11590 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
115a0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
115b0 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20  teLog.Enabled = 
115c0 73 61 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a 20  savedEnabled;.. 
115d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
115e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
115f0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
11600 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c  ry>..    /// Hel
11610 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  per function to 
11620 72 65 74 72 69 65 76 65 20 61 20 63 6f 6c 75 6d  retrieve a colum
11630 6e 20 6f 66 20 64 61 74 61 20 66 72 6f 6d 20 61  n of data from a
11640 6e 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  n active stateme
11650 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  nt...    /// </s
11660 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
11670 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74   <param name="st
11680 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e  mt">The statemen
11690 74 20 62 65 69 6e 67 20 73 74 65 70 28 29 27 64  t being step()'d
116a0 20 74 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e   through</param>
116b0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
116c0 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68   name="flags">Th
116d0 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74  e flags associat
116e0 65 64 20 77 69 74 68 20 74 68 65 20 63 6f 6e 6e  ed with the conn
116f0 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  ection.</param>.
11700 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
11710 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68 65  name="index">The
11720 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f   column index to
11730 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
11740 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
11750 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65  m name="typ">The
11760 20 74 79 70 65 20 6f 66 20 64 61 74 61 20 63 6f   type of data co
11770 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63  ntained in the c
11780 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69  olumn.  If Unini
11790 74 69 61 6c 69 7a 65 64 2c 20 74 68 69 73 20 66  tialized, this f
117a0 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74  unction will ret
117b0 72 69 65 76 65 20 74 68 65 20 64 61 74 61 74 79  rieve the dataty
117c0 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c  pe information.<
117d0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
117e0 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
117f0 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 74 68  s the data in th
11800 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e  e column</return
11810 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
11820 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
11830 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74 65   GetValue(SQLite
11840 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
11850 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
11860 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
11870 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54 79   index, SQLiteTy
11880 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a  pe typ)..    {..
11890 20 20 20 20 20 20 69 66 20 28 49 73 4e 75 6c 6c        if (IsNull
118a0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 20 72  (stmt, index)) r
118b0 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c  eturn DBNull.Val
118c0 75 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 41  ue;..      TypeA
118d0 66 66 69 6e 69 74 79 20 61 66 66 20 3d 20 74 79  ffinity aff = ty
118e0 70 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20  p.Affinity;..   
118f0 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c     Type t = null
11900 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 74  ;....      if (t
11910 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79 70  yp.Type != DbTyp
11920 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20  e.Object)..     
11930 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d 20   {..        t = 
11940 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51  SQLiteConvert.SQ
11950 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 74  LiteTypeToType(t
11960 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61 66  yp);..        af
11970 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e 69  f = TypeToAffini
11980 74 79 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ty(t);..      }.
11990 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 28 66 6c  ...      if ((fl
119a0 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
119b0 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41  ectionFlags.GetA
119c0 6c 6c 41 73 54 65 78 74 29 20 3d 3d 20 53 51 4c  llAsText) == SQL
119d0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
119e0 67 73 2e 47 65 74 41 6c 6c 41 73 54 65 78 74 29  gs.GetAllAsText)
119f0 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
11a00 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c  rn GetText(stmt,
11a10 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20   index);....    
11a20 20 20 73 77 69 74 63 68 20 28 61 66 66 29 0d 0a    switch (aff)..
11a30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11a40 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
11a50 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20  ty.Blob:..      
11a60 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65      if (typ.Type
11a70 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20   == DbType.Guid 
11a80 26 26 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20  && typ.Affinity 
11a90 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  == TypeAffinity.
11aa0 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Text)..         
11ab0 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75     return new Gu
11ac0 69 64 28 47 65 74 54 65 78 74 28 73 74 6d 74 2c  id(GetText(stmt,
11ad0 20 69 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20 20   index));....   
11ae0 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 28         int n = (
11af0 69 6e 74 29 47 65 74 42 79 74 65 73 28 73 74 6d  int)GetBytes(stm
11b00 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c  t, index, 0, nul
11b10 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20  l, 0, 0);..     
11b20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20       byte[] b = 
11b30 6e 65 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20  new byte[n];..  
11b40 20 20 20 20 20 20 20 20 47 65 74 42 79 74 65 73          GetBytes
11b50 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c  (stmt, index, 0,
11b60 20 62 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20   b, 0, n);....  
11b70 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 2e          if (typ.
11b80 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47  Type == DbType.G
11b90 75 69 64 20 26 26 20 6e 20 3d 3d 20 31 36 29 0d  uid && n == 16).
11ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
11bb0 75 72 6e 20 6e 65 77 20 47 75 69 64 28 62 29 3b  urn new Guid(b);
11bc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
11bd0 74 75 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20 20  turn b;..       
11be0 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
11bf0 74 79 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20 20  ty.DateTime:..  
11c00 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
11c10 65 74 44 61 74 65 54 69 6d 65 28 73 74 6d 74 2c  etDateTime(stmt,
11c20 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
11c30 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
11c40 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20  ity.Double:..   
11c50 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
11c60 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74  null) return Get
11c70 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64  Double(stmt, ind
11c80 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
11c90 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43  return Convert.C
11ca0 68 61 6e 67 65 54 79 70 65 28 47 65 74 44 6f 75  hangeType(GetDou
11cb0 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ble(stmt, index)
11cc0 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  , t, null);..   
11cd0 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
11ce0 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20  finity.Int64:.. 
11cf0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
11d00 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47  = null) return G
11d10 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e  etInt64(stmt, in
11d20 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
11d30 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
11d40 28 53 42 79 74 65 29 29 20 72 65 74 75 72 6e 20  (SByte)) return 
11d50 47 65 74 53 42 79 74 65 28 73 74 6d 74 2c 20 69  GetSByte(stmt, i
11d60 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
11d70 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
11d80 66 28 42 79 74 65 29 29 20 72 65 74 75 72 6e 20  f(Byte)) return 
11d90 47 65 74 42 79 74 65 28 73 74 6d 74 2c 20 69 6e  GetByte(stmt, in
11da0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
11db0 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
11dc0 28 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20  (Int16)) return 
11dd0 47 65 74 49 6e 74 31 36 28 73 74 6d 74 2c 20 69  GetInt16(stmt, i
11de0 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
11df0 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
11e00 66 28 55 49 6e 74 31 36 29 29 20 72 65 74 75 72  f(UInt16)) retur
11e10 6e 20 47 65 74 55 49 6e 74 31 36 28 73 74 6d 74  n GetUInt16(stmt
11e20 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
11e30 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
11e40 70 65 6f 66 28 49 6e 74 33 32 29 29 20 72 65 74  peof(Int32)) ret
11e50 75 72 6e 20 47 65 74 49 6e 74 33 32 28 73 74 6d  urn GetInt32(stm
11e60 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
11e70 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
11e80 79 70 65 6f 66 28 55 49 6e 74 33 32 29 29 20 72  ypeof(UInt32)) r
11e90 65 74 75 72 6e 20 47 65 74 55 49 6e 74 33 32 28  eturn GetUInt32(
11ea0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
11eb0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
11ec0 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 36 34 29  = typeof(UInt64)
11ed0 29 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74  ) return GetUInt
11ee0 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  64(stmt, index);
11ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
11f00 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67  rn Convert.Chang
11f10 65 54 79 70 65 28 47 65 74 49 6e 74 36 34 28 73  eType(GetInt64(s
11f20 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20  tmt, index), t, 
11f30 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  null);..        
11f40 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20  default:..      
11f50 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 54 65      return GetTe
11f60 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  xt(stmt, index);
11f70 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
11f80 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
11f90 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65   override int Ge
11fa0 74 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65 28  tCursorForTable(
11fb0 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
11fc0 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e  stmt, int db, in
11fd0 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20  t rootPage)..   
11fe0 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
11ff0 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
12000 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
12010 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
12020 65 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72 5f  e3_table_cursor_
12030 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
12040 6c 69 74 65 5f 73 74 6d 74 2c 20 64 62 2c 20 72  lite_stmt, db, r
12050 6f 6f 74 50 61 67 65 29 3b 0d 0a 23 65 6c 73 65  ootPage);..#else
12060 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d  ..      return -
12070 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  1;..#endif..    
12080 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
12090 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
120a0 47 65 74 52 6f 77 49 64 46 6f 72 43 75 72 73 6f  GetRowIdForCurso
120b0 72 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  r(SQLiteStatemen
120c0 74 20 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73  t stmt, int curs
120d0 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  or)..    {..#if 
120e0 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
120f0 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77  ..      long row
12100 69 64 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74  id;..      SQLit
12110 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
12120 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
12130 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 75 72 73  ods.sqlite3_curs
12140 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70  or_rowid_interop
12150 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
12160 6d 74 2c 20 63 75 72 73 6f 72 2c 20 6f 75 74 20  mt, cursor, out 
12170 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20 20 69  rowid);..      i
12180 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  f (rc == SQLiteE
12190 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 72 65 74  rrorCode.Ok) ret
121a0 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20 20  urn rowid;....  
121b0 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23      return 0;..#
121c0 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
121d0 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  rn 0;..#endif.. 
121e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
121f0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
12200 69 64 20 47 65 74 49 6e 64 65 78 43 6f 6c 75 6d  id GetIndexColum
12210 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f 28 73 74  nExtendedInfo(st
12220 72 69 6e 67 20 64 61 74 61 62 61 73 65 2c 20 73  ring database, s
12230 74 72 69 6e 67 20 69 6e 64 65 78 2c 20 73 74 72  tring index, str
12240 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20  ing column, out 
12250 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75  int sortMode, ou
12260 74 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c 20 6f  t int onError, o
12270 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74  ut string collat
12280 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a 20 20  ionSequence)..  
12290 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
122a0 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
122b0 20 49 6e 74 50 74 72 20 63 6f 6c 6c 3b 0d 0a 20   IntPtr coll;.. 
122c0 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65 6e       int colllen
122d0 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  ;..      SQLiteE
122e0 72 72 6f 72 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a  rrorCode rc;....
122f0 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66        rc = Unsaf
12300 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12310 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c  qlite3_index_col
12320 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70  umn_info_interop
12330 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61  (_sql, ToUTF8(da
12340 74 61 62 61 73 65 29 2c 20 54 6f 55 54 46 38 28  tabase), ToUTF8(
12350 69 6e 64 65 78 29 2c 20 54 6f 55 54 46 38 28 63  index), ToUTF8(c
12360 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 73 6f 72 74  olumn), out sort
12370 4d 6f 64 65 2c 20 6f 75 74 20 6f 6e 45 72 72 6f  Mode, out onErro
12380 72 2c 20 6f 75 74 20 63 6f 6c 6c 2c 20 6f 75 74  r, out coll, out
12390 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20   colllen);..    
123a0 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69    if (rc != SQLi
123b0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
123c0 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
123d0 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 6e 75  Exception(rc, nu
123e0 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 63 6f  ll);....      co
123f0 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20  llationSequence 
12400 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63  = UTF8ToString(c
12410 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a  oll, colllen);..
12420 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 73 6f 72  #else..      sor
12430 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20 20 20 20  tMode = 0;..    
12440 20 20 6f 6e 45 72 72 6f 72 20 3d 20 32 3b 0d 0a    onError = 2;..
12450 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53        collationS
12460 65 71 75 65 6e 63 65 20 3d 20 22 42 49 4e 41 52  equence = "BINAR
12470 59 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  Y";..#endif..   
12480 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
12490 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
124a0 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69 6c 65  teErrorCode File
124b0 43 6f 6e 74 72 6f 6c 28 73 74 72 69 6e 67 20 7a  Control(string z
124c0 44 62 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20  DbName, int op, 
124d0 49 6e 74 50 74 72 20 70 41 72 67 29 0d 0a 20 20  IntPtr pArg)..  
124e0 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
124f0 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
12500 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 69  thods.sqlite3_fi
12510 6c 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c  le_control(_sql,
12520 20 28 7a 44 62 4e 61 6d 65 20 21 3d 20 6e 75 6c   (zDbName != nul
12530 6c 29 20 3f 20 54 6f 55 54 46 38 28 7a 44 62 4e  l) ? ToUTF8(zDbN
12540 61 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c  ame) : null, op,
12550 20 70 41 72 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a   pArg);..    }..
12560 20 20 7d 0d 0a 7d 0d 0a                            }..}..