System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 12d10130acd4f2c77dc81a1d65c14b82347c7aee:


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 53 74 72 69 6e 67 2e   = SQLiteString.
d050: 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
d060: 72 69 6e 67 28 6d 6f 64 75 6c 65 2e 4e 61 6d 65  ring(module.Name
d070: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
d080: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
d090: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f  thods.sqlite3_mo
d0a0: 64 75 6c 65 20 6e 61 74 69 76 65 4d 6f 64 75 6c  dule nativeModul
d0b0: 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e =..           
d0c0: 20 20 20 20 20 6d 6f 64 75 6c 65 2e 43 72 65 61       module.Crea
d0d0: 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 29  teNativeModule()
d0e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
d0f0: 20 69 66 20 28 55 6e 73 61 66 65 4e 61 74 69 76   if (UnsafeNativ
d100: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
d110: 5f 63 72 65 61 74 65 5f 64 69 73 70 6f 73 61 62  _create_disposab
d120: 6c 65 5f 6d 6f 64 75 6c 65 28 0d 0a 20 20 20 20  le_module(..    
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d140: 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c 20 72 65 66  _sql, pName, ref
d150: 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2c 20 49   nativeModule, I
d160: 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20  ntPtr.Zero,..   
d170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d180: 20 6e 75 6c 6c 29 20 21 3d 20 49 6e 74 50 74 72   null) != IntPtr
d190: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
d1a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d1b0: 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f 64 75         if (_modu
d1c0: 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  les == null)..  
d1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1e0: 20 20 5f 6d 6f 64 75 6c 65 73 20 3d 20 6e 65 77    _modules = new
d1f0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
d200: 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ng, SQLiteModule
d210: 42 61 73 65 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20  Base>();....    
d220: 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64              _mod
d230: 75 6c 65 73 2e 41 64 64 28 6d 6f 64 75 6c 65 2e  ules.Add(module.
d240: 4e 61 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b 0d 0a  Name, module);..
d250: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
d260: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
d270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d290: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
d2a0: 45 78 63 65 70 74 69 6f 6e 28 53 51 4c 69 74 65  Exception(SQLite
d2b0: 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 2c  ErrorCode.Error,
d2c0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
d2d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
d2e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
d2f0: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
d300: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d310: 20 20 20 20 20 69 66 20 28 70 4e 61 6d 65 20 21       if (pName !
d320: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
d330: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
d340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
d350: 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65  QLiteMemory.Free
d360: 28 70 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  (pName);..      
d370: 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20            pName 
d380: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
d390: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
d3a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
d3b0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
d3c0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61  ary>..    /// Ca
d3d0: 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53  lls the native S
d3e0: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
d3f0: 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  ry in order to c
d400: 6c 65 61 6e 75 70 20 74 68 65 20 72 65 73 6f 75  leanup the resou
d410: 72 63 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 61 73  rces..    /// as
d420: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
d430: 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  module containin
d440: 67 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  g the implementa
d450: 74 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75 61  tion of a virtua
d460: 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f  l table...    //
d470: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
d480: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
d490: 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20  e="module">..   
d4a0: 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20   /// The module 
d4b0: 6f 62 6a 65 63 74 20 70 72 65 76 69 6f 75 73 6c  object previousl
d4c0: 79 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  y passed to the 
d4d0: 3c 73 65 65 20 63 72 65 66 3d 22 43 72 65 61 74  <see cref="Creat
d4e0: 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20  eModule" />..   
d4f0: 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20   /// method...  
d500: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
d510: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d520: 72 72 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f  rride void Dispo
d530: 73 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d  seModule(SQLiteM
d540: 6f 64 75 6c 65 42 61 73 65 20 6d 6f 64 75 6c 65  oduleBase module
d550: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
d560: 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
d570: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
d580: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
d590: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
d5a0: 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d  on("module");...
d5b0: 0a 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e  .        module.
d5c0: 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20  Dispose();..    
d5d0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
d5e0: 6c 20 6f 76 65 72 72 69 64 65 20 49 6e 74 50 74  l override IntPt
d5f0: 72 20 41 67 67 72 65 67 61 74 65 43 6f 6e 74 65  r AggregateConte
d600: 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  xt(IntPtr contex
d610: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
d620: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
d630: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d640: 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f  te3_aggregate_co
d650: 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 31  ntext(context, 1
d660: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
d670: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
d680: 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68      /// Calls th
d690: 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20  e native SQLite 
d6a0: 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20  core library in 
d6b0: 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61 72 65  order to declare
d6c0: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
d6d0: 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20 72 65 73  ..    /// in res
d6e0: 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c 20  ponse to a call 
d6f0: 69 6e 74 6f 20 74 68 65 20 78 43 72 65 61 74 65  into the xCreate
d700: 20 6f 72 20 78 43 6f 6e 6e 65 63 74 20 76 69 72   or xConnect vir
d710: 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f  tual table metho
d720: 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ds...    /// </s
d730: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
d740: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f   <param name="mo
d750: 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  dule">..    /// 
d760: 54 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  The virtual tabl
d770: 65 20 6d 6f 64 75 6c 65 20 74 68 61 74 20 69 73  e module that is
d780: 20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73 69 62   to be responsib
d790: 6c 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75  le for the virtu
d7a0: 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f  al table..    //
d7b0: 2f 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64  / being declared
d7c0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
d7d0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
d7e0: 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 53 71 6c  ram name="strSql
d7f0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
d800: 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
d810: 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  g the SQL statem
d820: 65 6e 74 20 64 65 73 63 72 69 62 69 6e 67 20 74  ent describing t
d830: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
d840: 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20   to..    /// be 
d850: 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f  declared...    /
d860: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
d870: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
d880: 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f  ="error">..    /
d890: 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c  // Upon success,
d8a0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66   the contents of
d8b0: 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
d8c0: 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 20 20  are undefined.  
d8d0: 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20  Upon failure,.. 
d8e0: 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64     /// it should
d8f0: 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70 72   contain an appr
d900: 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d 65  opriate error me
d910: 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ssage...    /// 
d920: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
d930: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
d940: 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
d950: 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
d960: 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  de...    /// </r
d970: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
d980: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
d990: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44  QLiteErrorCode D
d9a0: 65 63 6c 61 72 65 56 69 72 74 75 61 6c 54 61 62  eclareVirtualTab
d9b0: 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  le(..        SQL
d9c0: 69 74 65 4d 6f 64 75 6c 65 42 61 73 65 20 6d 6f  iteModuleBase mo
d9d0: 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 73  dule,..        s
d9e0: 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 0d 0a 20  tring strSql,.. 
d9f0: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
da00: 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
da10: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
da20: 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
da30: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ull)..        {.
da40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72  .            err
da50: 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e  or = "connection
da60: 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
da70: 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20  handle";..      
da80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
da90: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72  iteErrorCode.Err
daa0: 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  or;..        }..
dab0: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
dac0: 20 70 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a   pSql = IntPtr.Z
dad0: 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
dae0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
daf0: 20 20 20 20 20 20 20 20 20 20 20 20 70 53 71 6c              pSql
db00: 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e   = SQLiteString.
db10: 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
db20: 72 69 6e 67 28 73 74 72 53 71 6c 29 3b 0d 0a 0d  ring(strSql);...
db30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
db40: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
db50: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
db60: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 65 63  hods.sqlite3_dec
db70: 6c 61 72 65 5f 76 74 61 62 28 0d 0a 20 20 20 20  lare_vtab(..    
db80: 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
db90: 2c 20 70 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20  , pSql);....    
dba0: 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d          if ((n =
dbb0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
dbc0: 65 2e 4f 6b 29 20 26 26 20 28 6d 6f 64 75 6c 65  e.Ok) && (module
dbd0: 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   != null))..    
dbe0: 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
dbf0: 6c 65 2e 44 65 63 6c 61 72 65 64 20 3d 20 74 72  le.Declared = tr
dc00: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
dc10: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
dc20: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
dc30: 65 72 72 6f 72 20 3d 20 47 65 74 4c 61 73 74 45  error = GetLastE
dc40: 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rror();....     
dc50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b         return n;
dc60: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
dc70: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
dc80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
dc90: 20 20 20 20 20 69 66 20 28 70 53 71 6c 20 21 3d       if (pSql !=
dca0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
dcb0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
dcd0: 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28  LiteMemory.Free(
dce0: 70 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  pSql);..        
dcf0: 20 20 20 20 20 20 20 20 70 53 71 6c 20 3d 20 49          pSql = I
dd00: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
dd10: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
dd20: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
dd30: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
dd40: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c  >..    /// Enabl
dd50: 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65  es or disabled e
dd60: 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e 67  xtension loading
dd70: 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a 20 20 20   by SQLite...   
dd80: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
dd90: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
dda0: 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a  name="bOnOff">..
ddb0: 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 74 6f 20      /// True to 
ddc0: 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67 20 6f  enable loading o
ddd0: 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20 66 61  f extensions, fa
dde0: 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 2e 0d  lse to disable..
ddf0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
de00: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
de10: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
de20: 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 62  tLoadExtension(b
de30: 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20  ool bOnOff)..   
de40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
de50: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
de60: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
de70: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 6e 61 62  ods.sqlite3_enab
de80: 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  le_load_extensio
de90: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
dea0: 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20  _sql, (bOnOff ? 
deb0: 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20  -1 : 0));....   
dec0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
ded0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
dee0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
def0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
df00: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
df10: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
df20: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
df30: 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20 53 51 4c   /// Loads a SQL
df40: 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 20 6c 69  ite extension li
df50: 62 72 61 72 79 20 66 72 6f 6d 20 74 68 65 20 6e  brary from the n
df60: 61 6d 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20  amed file...    
df70: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
df80: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
df90: 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e 0d  ame="fileName">.
dfa0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d  .    /// The nam
dfb0: 65 20 6f 66 20 74 68 65 20 64 79 6e 61 6d 69 63  e of the dynamic
dfc0: 20 6c 69 6e 6b 20 6c 69 62 72 61 72 79 20 66 69   link library fi
dfd0: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
dfe0: 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20  e extension...  
dff0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
e000: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
e010: 61 6d 65 3d 22 70 72 6f 63 4e 61 6d 65 22 3e 0d  ame="procName">.
e020: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d  .    /// The nam
e030: 65 20 6f 66 20 74 68 65 20 65 78 70 6f 72 74 65  e of the exporte
e040: 64 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 64 20  d function used 
e050: 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68  to initialize th
e060: 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20  e extension...  
e070: 20 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c 2c 20 74    /// If null, t
e080: 68 65 20 64 65 66 61 75 6c 74 20 22 73 71 6c 69  he default "sqli
e090: 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e  te3_extension_in
e0a0: 69 74 22 20 77 69 6c 6c 20 62 65 20 75 73 65 64  it" will be used
e0b0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
e0c0: 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
e0d0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
e0e0: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 73 74  LoadExtension(st
e0f0: 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 20 73  ring fileName, s
e100: 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d 65 29 0d  tring procName).
e110: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
e120: 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d 3d 20  if (fileName == 
e130: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
e140: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
e150: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
e160: 6f 6e 28 22 66 69 6c 65 4e 61 6d 65 22 29 3b 0d  on("fileName");.
e170: 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
e180: 72 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74  r pError = IntPt
e190: 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
e1a0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
e1b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  {..            b
e1c0: 79 74 65 5b 5d 20 75 74 66 38 46 69 6c 65 4e 61  yte[] utf8FileNa
e1d0: 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e  me = UTF8Encodin
e1e0: 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73 28  g.UTF8.GetBytes(
e1f0: 66 69 6c 65 4e 61 6d 65 20 2b 20 27 5c 30 27 29  fileName + '\0')
e200: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ;..            b
e210: 79 74 65 5b 5d 20 75 74 66 38 50 72 6f 63 4e 61  yte[] utf8ProcNa
e220: 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  me = null;....  
e230: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 72            if (pr
e240: 6f 63 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d  ocName != null).
e250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e260: 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20   utf8ProcName = 
e270: 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46  UTF8Encoding.UTF
e280: 38 2e 47 65 74 42 79 74 65 73 28 70 72 6f 63 4e  8.GetBytes(procN
e290: 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 0d 0a  ame + '\0');....
e2a0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
e2b0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
e2c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
e2d0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 61 64  ods.sqlite3_load
e2e0: 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20  _extension(..   
e2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71               _sq
e300: 6c 2c 20 75 74 66 38 46 69 6c 65 4e 61 6d 65 2c  l, utf8FileName,
e310: 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 2c 20 72   utf8ProcName, r
e320: 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20  ef pError);.... 
e330: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
e340: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
e350: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
e360: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
e370: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
e380: 6f 6e 28 6e 2c 20 55 54 46 38 54 6f 53 74 72 69  on(n, UTF8ToStri
e390: 6e 67 28 70 45 72 72 6f 72 2c 20 2d 31 29 29 3b  ng(pError, -1));
e3a0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
e3b0: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
e3c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e3d0: 20 20 20 20 20 69 66 20 28 70 45 72 72 6f 72 20       if (pError 
e3e0: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
e3f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
e400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e410: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
e420: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 72 65 65  ods.sqlite3_free
e430: 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  (pError);..     
e440: 20 20 20 20 20 20 20 20 20 20 20 70 45 72 72 6f             pErro
e450: 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
e460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e470: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
e480: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61  }....    /// Ena
e490: 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64  bles or disabled
e4a0: 20 65 78 74 65 6e 64 65 64 20 72 65 73 75 6c 74   extended result
e4b0: 20 63 6f 64 65 73 20 72 65 74 75 72 6e 65 64 20   codes returned 
e4c0: 62 79 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 69  by SQLite..    i
e4d0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
e4e0: 20 76 6f 69 64 20 53 65 74 45 78 74 65 6e 64 65   void SetExtende
e4f0: 64 52 65 73 75 6c 74 43 6f 64 65 73 28 62 6f 6f  dResultCodes(boo
e500: 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b  l bOnOff)..    {
e510: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
e520: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
e530: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e540: 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64  sqlite3_extended
e550: 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28 0d 0a  _result_codes(..
e560: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20            _sql, 
e570: 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30  (bOnOff ? -1 : 0
e580: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  ));....      if 
e590: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
e5a0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
e5b0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
e5c0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
e5d0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
e5e0: 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65      /// Gets the
e5f0: 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65 72 72   last SQLite err
e600: 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74  or code..    int
e610: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
e620: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52  QLiteErrorCode R
e630: 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20  esultCode()..   
e640: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
e650: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
e660: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 72 72  hods.sqlite3_err
e670: 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20  code(_sql);..   
e680: 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73   }..    /// Gets
e690: 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65   the last SQLite
e6a0: 20 65 78 74 65 6e 64 65 64 20 65 72 72 6f 72 20   extended error 
e6b0: 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e  code..    intern
e6c0: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
e6d0: 74 65 45 72 72 6f 72 43 6f 64 65 20 45 78 74 65  teErrorCode Exte
e6e0: 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65 28 29  ndedResultCode()
e6f0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
e700: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
e710: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
e720: 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f  3_extended_errco
e730: 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d  de(_sql);..    }
e740: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20  ....    /// Add 
e750: 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76 69  a log message vi
e760: 61 20 74 68 65 20 53 51 4c 69 74 65 20 73 71 6c  a the SQLite sql
e770: 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61  ite3_log interfa
e780: 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ce...    interna
e790: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
e7a0: 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74  LogMessage(SQLit
e7b0: 65 45 72 72 6f 72 43 6f 64 65 20 69 45 72 72 43  eErrorCode iErrC
e7c0: 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73  ode, string zMes
e7d0: 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sage)..    {..  
e7e0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
e7f0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
e800: 6c 6f 67 28 69 45 72 72 43 6f 64 65 2c 20 54 6f  log(iErrCode, To
e810: 55 54 46 38 28 7a 4d 65 73 73 61 67 65 29 29 3b  UTF8(zMessage));
e820: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49  ..    }....#if I
e830: 4e 54 45 52 4f 50 5f 43 4f 44 45 43 0d 0a 20 20  NTEROP_CODEC..  
e840: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
e850: 69 64 65 20 76 6f 69 64 20 53 65 74 50 61 73 73  ide void SetPass
e860: 77 6f 72 64 28 62 79 74 65 5b 5d 20 70 61 73 73  word(byte[] pass
e870: 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20  wordBytes)..    
e880: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
e890: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
e8a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
e8b0: 2e 73 71 6c 69 74 65 33 5f 6b 65 79 28 5f 73 71  .sqlite3_key(_sq
e8c0: 6c 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65 73  l, passwordBytes
e8d0: 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 2e  , passwordBytes.
e8e0: 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20  Length);..      
e8f0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
e900: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
e910: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
e920: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
e930: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
e940: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
e950: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
e960: 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64 28 62  ChangePassword(b
e970: 79 74 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f 72  yte[] newPasswor
e980: 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a  dBytes)..    {..
e990: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
e9a0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
e9b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e9c0: 6c 69 74 65 33 5f 72 65 6b 65 79 28 5f 73 71 6c  lite3_rekey(_sql
e9d0: 2c 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74  , newPasswordByt
e9e0: 65 73 2c 20 28 6e 65 77 50 61 73 73 77 6f 72 64  es, (newPassword
e9f0: 42 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f  Bytes == null) ?
ea00: 20 30 20 3a 20 6e 65 77 50 61 73 73 77 6f 72 64   0 : newPassword
ea10: 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a  Bytes.Length);..
ea20: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
ea30: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
ea40: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
ea50: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
ea60: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
ea70: 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  ..    }..#endif.
ea80: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
ea90: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
eaa0: 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c 69  tUpdateHook(SQLi
eab0: 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  teUpdateCallback
eac0: 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
ead0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
eae0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
eaf0: 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f 73 71  _update_hook(_sq
eb00: 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
eb10: 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
eb20: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
eb30: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 43  erride void SetC
eb40: 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74 65  ommitHook(SQLite
eb50: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20 66  CommitCallback f
eb60: 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  unc)..    {..   
eb70: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
eb80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
eb90: 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c 2c  ommit_hook(_sql,
eba0: 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
ebb0: 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
ebc0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
ebd0: 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 72 61  ride void SetTra
ebe0: 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74  ceCallback(SQLit
ebf0: 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 66  eTraceCallback f
ec00: 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  unc)..    {..   
ec10: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
ec20: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74  ethods.sqlite3_t
ec30: 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  race(_sql, func,
ec40: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
ec50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
ec60: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
ec70: 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48  oid SetRollbackH
ec80: 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61  ook(SQLiteRollba
ec90: 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ckCallback func)
eca0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
ecb0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
ecc0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62  ds.sqlite3_rollb
ecd0: 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66  ack_hook(_sql, f
ece0: 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
ecf0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
ed00: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
ed10: 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74      /// Allows t
ed20: 68 65 20 73 65 74 74 69 6e 67 20 6f 66 20 61 20  he setting of a 
ed30: 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b  logging callback
ed40: 20 69 6e 76 6f 6b 65 64 20 62 79 20 53 51 4c 69   invoked by SQLi
ed50: 74 65 20 77 68 65 6e 20 61 0d 0a 20 20 20 20 2f  te when a..    /
ed60: 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f 63 63  // log event occ
ed70: 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20 63  urs.  Only one c
ed80: 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65 20 73  allback may be s
ed90: 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69 73 20  et.  If NULL is 
eda0: 70 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f  passed,..    ///
edb0: 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 61 6c   the logging cal
edc0: 6c 62 61 63 6b 20 69 73 20 75 6e 72 65 67 69 73  lback is unregis
edd0: 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  tered...    /// 
ede0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
edf0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
ee00: 22 66 75 6e 63 22 3e 54 68 65 20 63 61 6c 6c 62  "func">The callb
ee10: 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  ack function to 
ee20: 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d  invoke.</param>.
ee30: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
ee40: 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65 73 75  s>Returns a resu
ee50: 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73  lt code</returns
ee60: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
ee70: 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
ee80: 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f 67 43  rrorCode SetLogC
ee90: 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c 6f  allback(SQLiteLo
eea0: 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  gCallback func).
eeb0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
eec0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
eed0: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
eee0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
eef0: 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a 20 20  _config_log(..  
ef00: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
ef10: 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51  ConfigOpsEnum.SQ
ef20: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c  LITE_CONFIG_LOG,
ef30: 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
ef40: 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ro);....        
ef50: 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
ef60: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
efd0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
efe0: 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61     /// Creates a
eff0: 20 6e 65 77 20 53 51 4c 69 74 65 20 62 61 63 6b   new SQLite back
f000: 75 70 20 6f 62 6a 65 63 74 20 62 61 73 65 64 20  up object based 
f010: 6f 6e 20 74 68 65 20 70 72 6f 76 69 64 65 64 20  on the provided 
f020: 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20  destination..   
f030: 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 63 6f   /// database co
f040: 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 73  nnection.  The s
f050: 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20 63  ource database c
f060: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74 68 65  onnection is the
f070: 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 61 73   one..    /// as
f080: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
f090: 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 65 20  is object.  The 
f0a0: 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73 74 69  source and desti
f0b0: 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 0d  nation database.
f0c0: 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74  .    /// connect
f0d0: 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 74  ions cannot be t
f0e0: 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f  he same...    //
f0f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
f100: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
f110: 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68 65 20  e="destCnn">The 
f120: 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61  destination data
f130: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
f140: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
f150: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
f160: 65 73 74 4e 61 6d 65 22 3e 54 68 65 20 64 65 73  estName">The des
f170: 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73  tination databas
f180: 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d  e name.</param>.
f190: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
f1a0: 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d 65  name="sourceName
f1b0: 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64 61 74  ">The source dat
f1c0: 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72  abase name.</par
f1d0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
f1e0: 74 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c 79 20  turns>The newly 
f1f0: 63 72 65 61 74 65 64 20 62 61 63 6b 75 70 20 6f  created backup o
f200: 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e  bject.</returns>
f210: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
f220: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 42 61  verride SQLiteBa
f230: 63 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a 65 42  ckup InitializeB
f240: 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
f250: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
f260: 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20 20 20   destCnn,..     
f270: 20 20 20 73 74 72 69 6e 67 20 64 65 73 74 4e 61     string destNa
f280: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  me,..        str
f290: 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65 0d 0a  ing sourceName..
f2a0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
f2b0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
f2c0: 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  stCnn == null)..
f2d0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
f2e0: 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
f2f0: 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73  llException("des
f300: 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tCnn");....     
f310: 20 20 20 69 66 20 28 64 65 73 74 4e 61 6d 65 20     if (destName 
f320: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
f330: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
f340: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
f350: 70 74 69 6f 6e 28 22 64 65 73 74 4e 61 6d 65 22  ption("destName"
f360: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
f370: 20 28 73 6f 75 72 63 65 4e 61 6d 65 20 3d 3d 20   (sourceName == 
f380: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
f390: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
f3a0: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
f3b0: 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d 65 22 29  on("sourceName")
f3c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
f3d0: 69 74 65 33 20 64 65 73 74 53 71 6c 69 74 65 33  ite3 destSqlite3
f3e0: 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73 71 6c 20   = destCnn._sql 
f3f0: 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a 20  as SQLite3;.... 
f400: 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74 53         if (destS
f410: 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c 29 0d  qlite3 == null).
f420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
f430: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45  ow new ArgumentE
f440: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
f450: 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73 74             "Dest
f460: 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  ination connecti
f470: 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61 70 70 65  on has no wrappe
f480: 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  r.",..          
f490: 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29        "destCnn")
f4a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
f4b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
f4c0: 64 6c 65 20 64 65 73 74 48 61 6e 64 6c 65 20 3d  dle destHandle =
f4d0: 20 64 65 73 74 53 71 6c 69 74 65 33 2e 5f 73 71   destSqlite3._sq
f4e0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  l;....        if
f4f0: 20 28 64 65 73 74 48 61 6e 64 6c 65 20 3d 3d 20   (destHandle == 
f500: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
f510: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
f520: 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d  umentException(.
f530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f540: 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f   "Destination co
f550: 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
f560: 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
f570: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f580: 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a     "destCnn");..
f590: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
f5a0: 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
f5b0: 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 20   sourceHandle = 
f5c0: 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  _sql;....       
f5d0: 20 69 66 20 28 73 6f 75 72 63 65 48 61 6e 64 6c   if (sourceHandl
f5e0: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
f5f0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
f600: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
f610: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
f620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
f630: 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  ource connection
f640: 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
f650: 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20  handle.");....  
f660: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 44 65        byte[] zDe
f670: 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28  stName = ToUTF8(
f680: 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  destName);..    
f690: 20 20 20 20 62 79 74 65 5b 5d 20 7a 53 6f 75 72      byte[] zSour
f6a0: 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28  ceName = ToUTF8(
f6b0: 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  sourceName);....
f6c0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
f6d0: 63 6b 75 70 48 61 6e 64 6c 65 20 62 61 63 6b 75  ckupHandle backu
f6e0: 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d  pHandle = null;.
f6f0: 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  ...        try..
f700: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f710: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
f720: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
f730: 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
f740: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
f750: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
f760: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
f770: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f780: 20 49 6e 74 50 74 72 20 62 61 63 6b 75 70 20 3d   IntPtr backup =
f790: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f7a0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
f7b0: 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20 20 20 20  kup_init(..     
f7c0: 20 20 20 20 20 20 20 20 20 20 20 64 65 73 74 48             destH
f7d0: 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65  andle, zDestName
f7e0: 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 20  , sourceHandle, 
f7f0: 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d  zSourceName);...
f800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
f810: 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50 74  (backup == IntPt
f820: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
f830: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
f840: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
f850: 6f 6e 28 52 65 73 75 6c 74 43 6f 64 65 28 29 2c  on(ResultCode(),
f860: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
f870: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f880: 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20   backupHandle = 
f890: 6e 65 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70  new SQLiteBackup
f8a0: 48 61 6e 64 6c 65 28 64 65 73 74 48 61 6e 64 6c  Handle(destHandl
f8b0: 65 2c 20 62 61 63 6b 75 70 29 3b 0d 0a 20 20 20  e, backup);..   
f8c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f8d0: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c    return new SQL
f8e0: 69 74 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  iteBackup(..    
f8f0: 20 20 20 20 20 20 20 20 74 68 69 73 2c 20 62 61          this, ba
f900: 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64 65 73 74  ckupHandle, dest
f910: 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d  Handle, zDestNam
f920: 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c  e, sourceHandle,
f930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 53  ..            zS
f940: 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 20 20 20  ourceName);..   
f950: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
f960: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
f970: 20 43 6f 70 69 65 73 20 75 70 20 74 6f 20 4e 20   Copies up to N 
f980: 70 61 67 65 73 20 66 72 6f 6d 20 74 68 65 20 73  pages from the s
f990: 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20 74  ource database t
f9a0: 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f  o the destinatio
f9b0: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62  n..    /// datab
f9c0: 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  ase associated w
f9d0: 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65  ith the specifie
f9e0: 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e  d backup object.
f9f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
fa00: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
fa10: 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75  aram name="backu
fa20: 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62  p">The backup ob
fa30: 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61  ject to use.</pa
fa40: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
fa50: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65  aram name="nPage
fa60: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
fa70: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
fa80: 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61 74 69 76  to copy, negativ
fa90: 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20 72 65  e to copy all re
faa0: 6d 61 69 6e 69 6e 67 20 70 61 67 65 73 2e 0d 0a  maining pages...
fab0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
fac0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
fad0: 20 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e 0d 0a   name="retry">..
fae0: 20 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f 20 74      /// Set to t
faf0: 72 75 65 20 69 66 20 74 68 65 20 6f 70 65 72 61  rue if the opera
fb00: 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65  tion needs to be
fb10: 20 72 65 74 72 69 65 64 20 64 75 65 20 74 6f 20   retried due to 
fb20: 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f  database..    //
fb30: 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75 65 73  / locking issues
fb40: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 73 65 74  ; otherwise, set
fb50: 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20   to false...    
fb60: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
fb70: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
fb80: 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66  .    /// True if
fb90: 20 74 68 65 72 65 20 61 72 65 20 6d 6f 72 65 20   there are more 
fba0: 70 61 67 65 73 20 74 6f 20 62 65 20 63 6f 70 69  pages to be copi
fbb0: 65 64 2c 20 66 61 6c 73 65 20 6f 74 68 65 72 77  ed, false otherw
fbc0: 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ise...    /// </
fbd0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
fbe0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
fbf0: 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75 70 28  bool StepBackup(
fc00: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
fc10: 42 61 63 6b 75 70 20 62 61 63 6b 75 70 2c 0d 0a  Backup backup,..
fc20: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 50 61 67          int nPag
fc30: 65 2c 0d 0a 20 20 20 20 20 20 20 20 6f 75 74 20  e,..        out 
fc40: 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20 20 20 20  bool retry..    
fc50: 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
fc60: 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 66 61        retry = fa
fc70: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
fc80: 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75  if (backup == nu
fc90: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
fca0: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
fcb0: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
fcc0: 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20  ("backup");.... 
fcd0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
fce0: 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  kupHandle handle
fcf0: 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74   = backup._sqlit
fd00: 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20  e_backup;....   
fd10: 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20       if (handle 
fd20: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
fd30: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
fd40: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
fd50: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
fd60: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
fd70: 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
fd80: 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
fd90: 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
fda0: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72  IntPtr handlePtr
fdb0: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
fdc0: 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
fdd0: 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  Ptr == IntPtr.Ze
fde0: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
fdf0: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
fe00: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
fe10: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
fe20: 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
fe30: 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
fe40: 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e  alid handle poin
fe50: 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ter.");....     
fe60: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
fe70: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
fe80: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
fe90: 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28 68  e3_backup_step(h
fea0: 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61 67 65 29  andlePtr, nPage)
feb0: 3b 0d 0a 20 20 20 20 20 20 20 20 62 61 63 6b 75  ;..        backu
fec0: 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 20 3d 20  p._stepResult = 
fed0: 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 76 65  n; /* NOTE: Save
fee0: 20 66 6f 72 20 75 73 65 20 62 79 20 46 69 6e 69   for use by Fini
fef0: 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a  shBackup. */....
ff00: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d          if (n ==
ff10: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
ff20: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  .Ok)..        {.
ff30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
ff40: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
ff50: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
ff60: 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69  se if (n == SQLi
ff70: 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79  teErrorCode.Busy
ff80: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
ff90: 20 20 20 20 20 20 20 20 20 20 72 65 74 72 79 20            retry 
ffa0: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
ffb0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
ffc0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
ffd0: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
ffe0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
fff0: 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20 20  ode.Locked)..   
10000 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10010 20 20 20 20 72 65 74 72 79 20 3d 20 74 72 75 65      retry = true
10020 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
10030 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
10040 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
10050 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
10060 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f  LiteErrorCode.Do
10070 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ne)..        {..
10080 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10090 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
100a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
100b0 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  se..        {.. 
100c0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
100d0 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
100e0 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
100f0 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
10100 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
10110 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
10120 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
10130 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
10140 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74  ages remaining t
10150 6f 20 62 65 20 63 6f 70 69 65 64 20 66 72 6f 6d  o be copied from
10160 20 74 68 65 20 73 6f 75 72 63 65 0d 0a 20 20 20   the source..   
10170 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 74 6f   /// database to
10180 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e   the destination
10190 20 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69   database associ
101a0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70  ated with the sp
101b0 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f  ecified..    ///
101c0 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d   backup object..
101d0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
101e0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
101f0 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
10200 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
10210 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70  ect to check.</p
10220 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
10230 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62  returns>The numb
10240 65 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61  er of pages rema
10250 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69  ining to be copi
10260 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ed.</returns>.. 
10270 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
10280 72 69 64 65 20 69 6e 74 20 52 65 6d 61 69 6e 69  ride int Remaini
10290 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  ngBackup(..     
102a0 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20     SQLiteBackup 
102b0 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20  backup..        
102c0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
102d0 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
102e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
102f0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
10300 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
10310 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
10320 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
10330 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
10340 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
10350 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
10360 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
10370 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
10380 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
10390 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
103a0 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
103c0 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
103d0 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
103e0 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
103f0 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50    IntPtr handleP
10400 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
10410 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
10420 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e  lePtr == IntPtr.
10430 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
10440 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
10450 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
10460 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
10470 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
10480 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
10490 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f  nvalid handle po
104a0 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20  inter.");....   
104b0 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
104c0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
104d0 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 72  sqlite3_backup_r
104e0 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64 6c 65 50  emaining(handleP
104f0 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
10500 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
10510 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
10520 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
10530 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
10540 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
10550 73 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  se associated.. 
10560 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 65 20     /// with the 
10570 73 70 65 63 69 66 69 65 64 20 62 61 63 6b 75 70  specified backup
10580 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f   object...    //
10590 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
105a0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
105b0 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62  e="backup">The b
105c0 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20  ackup object to 
105d0 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  check.</param>..
105e0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
105f0 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65  >The total numbe
10600 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
10610 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
10620 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  e.</returns>..  
10630 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
10640 69 64 65 20 69 6e 74 20 50 61 67 65 43 6f 75 6e  ide int PageCoun
10650 74 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  tBackup(..      
10660 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62    SQLiteBackup b
10670 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29  ackup..        )
10680 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
10690 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e   if (backup == n
106a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
106b0 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
106c0 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
106d0 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a  n("backup");....
106e0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
106f0 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c  ckupHandle handl
10700 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69  e = backup._sqli
10710 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20  te_backup;....  
10720 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
10730 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
10740 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
10750 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
10760 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
10770 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
10780 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
10790 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
107a0 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
107b0 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74   IntPtr handlePt
107c0 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
107d0 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
107e0 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  ePtr == IntPtr.Z
107f0 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
10800 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
10810 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
10820 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
10830 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
10840 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
10850 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69  valid handle poi
10860 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  nter.");....    
10870 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
10880 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
10890 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 70 61  qlite3_backup_pa
108a0 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c 65 50 74  gecount(handlePt
108b0 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  r);..    }....  
108c0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
108d0 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74 72 6f 79  .    /// Destroy
108e0 73 20 74 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  s the backup obj
108f0 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62 61 63  ect, rolling bac
10900 6b 20 61 6e 79 20 62 61 63 6b 75 70 20 74 68 61  k any backup tha
10910 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20 20 20  t may be in..   
10920 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d 0a 20   /// progess... 
10930 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
10940 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
10950 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
10960 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
10970 74 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c 2f 70  t to destroy.</p
10980 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
10990 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
109a0 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70 28 0d  d FinishBackup(.
109b0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
109c0 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20  ackup backup..  
109d0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
109e0 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b          if (back
109f0 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  up == null)..   
10a00 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
10a10 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
10a20 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70  xception("backup
10a30 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
10a40 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c  QLiteBackupHandl
10a50 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75  e handle = backu
10a60 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70  p._sqlite_backup
10a70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
10a80 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (handle == null)
10a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
10aa0 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
10ab0 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
10ac0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
10ad0 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
10ae0 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
10af0 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a  d handle.");....
10b00 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
10b10 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c  andlePtr = handl
10b20 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
10b30 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49   (handlePtr == I
10b40 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
10b50 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
10b60 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
10b70 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
10b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
10b90 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
10ba0 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
10bb0 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d  dle pointer.");.
10bc0 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
10bd0 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
10be0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
10bf0 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
10c00 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10c10 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69  _backup_finish_i
10c20 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 50 74 72  nterop(handlePtr
10c30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
10c40 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
10c50 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
10c60 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10c70 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68  e3_backup_finish
10c80 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65  (handlePtr);..#e
10c90 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 68 61  ndif..        ha
10ca0 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65 41 73  ndle.SetHandleAs
10cb0 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a 23 69  Invalid();....#i
10cc0 66 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 0d 0a  f COUNT_HANDLE..
10cd0 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d          if ((n =
10ce0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
10cf0 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d 3d 20 62  e.Ok) || (n == b
10d00 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c  ackup._stepResul
10d10 74 29 29 20 68 61 6e 64 6c 65 2e 57 61 73 52 65  t)) handle.WasRe
10d20 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a 23 65 6e  leasedOk();..#en
10d30 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  dif....        i
10d40 66 20 28 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  f ((n != SQLiteE
10d50 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20  rrorCode.Ok) && 
10d60 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e 5f 73 74  (n != backup._st
10d70 65 70 52 65 73 75 6c 74 29 29 0d 0a 20 20 20 20  epResult))..    
10d80 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
10d90 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
10da0 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
10db0 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
10dc0 20 20 20 20 2f 2f 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 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
10e30 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
10e40 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20  / Determines if 
10e50 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
10e60 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e  library has been
10e70 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72   initialized for
10e80 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75   the..    /// cu
10e90 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a  rrent process...
10ea0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
10eb0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
10ec0 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  urns>..    /// A
10ed0 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74   boolean indicat
10ee0 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
10ef0 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ot the SQLite co
10f00 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
10f10 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69  een..    /// ini
10f20 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65  tialized for the
10f30 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
10f40 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
10f50 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
10f60 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
10f70 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  l IsInitialized(
10f80 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
10f90 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 49    return StaticI
10fa0 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 3b 0d  sInitialized();.
10fb0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
10fc0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
10fd0 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20   /// Determines 
10fe0 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  if the SQLite co
10ff0 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
11000 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  een initialized 
11010 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  for the..    ///
11020 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
11030 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
11040 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
11050 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
11060 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69  / A boolean indi
11070 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
11080 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65  r not the SQLite
11090 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
110a0 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20  s been..    /// 
110b0 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
110c0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
110d0 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
110e0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
110f0 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f  ternal static bo
11100 6f 6c 20 53 74 61 74 69 63 49 73 49 6e 69 74 69  ol StaticIsIniti
11110 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d  alized()..    {.
11120 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
11130 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20       // BUGFIX: 
11140 50 72 65 76 65 6e 74 20 72 61 63 65 73 20 77 69  Prevent races wi
11150 74 68 20 6f 74 68 65 72 20 74 68 72 65 61 64 73  th other threads
11160 20 66 6f 72 20 74 68 69 73 20 65 6e 74 69 72 65   for this entire
11170 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20 20 20   block, due..   
11180 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
11190 74 6f 20 74 68 65 20 74 72 79 2f 66 69 6e 61 6c  to the try/final
111a0 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e 20 20 53  ly semantics.  S
111b0 65 65 20 74 69 63 6b 65 74 20 5b 37 32 39 30 35  ee ticket [72905
111c0 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20 20 20  c9a77]...       
111d0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63   //..        loc
111e0 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20  k (syncRoot)..  
111f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11200 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11210 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 61       // NOTE: Sa
11220 76 65 20 74 68 65 20 73 74 61 74 65 20 6f 66 20  ve the state of 
11230 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c 61 73  the logging clas
11240 73 20 61 6e 64 20 74 68 65 6e 20 72 65 73 74 6f  s and then resto
11250 72 65 20 69 74 0d 0a 20 20 20 20 20 20 20 20 20  re it..         
11260 20 20 20 2f 2f 20 20 20 20 20 20 20 61 66 74 65     //       afte
11270 72 20 77 65 20 61 72 65 20 64 6f 6e 65 20 74 6f  r we are done to
11280 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67 20 74   avoid logging t
11290 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20 65 72  oo many false er
112a0 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  rors...         
112b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
112c0 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 45 6e 61     bool savedEna
112d0 62 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c 6f 67  bled = SQLiteLog
112e0 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20  .Enabled;..     
112f0 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
11300 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c 73 65  .Enabled = false
11310 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11320 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
11330 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11340 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11350 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
11360 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20 5b 61  : This method [a
11370 62 5d 75 73 65 73 20 74 68 65 20 66 61 63 74 20  b]uses the fact 
11380 74 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c 6c  that SQLite will
11390 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 20   always..       
113a0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
113b0 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
113c0 45 52 52 4f 52 20 66 6f 72 20 61 6e 79 20 75 6e  ERROR for any un
113d0 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72 61 74  known configurat
113e0 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20  ion option..    
113f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
11400 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20 74 68       *unless* th
11410 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
11420 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
11430 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0d 0a  n initialized...
11440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11450 2f 2f 20 20 20 20 20 20 20 49 6e 20 74 68 61 74  //       In that
11460 20 63 61 73 65 20 69 74 20 77 69 6c 6c 20 61 6c   case it will al
11470 77 61 79 73 20 72 65 74 75 72 6e 20 53 51 4c 49  ways return SQLI
11480 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20 20 20  TE_MISUSE...    
11490 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
114a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114b0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
114c0 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
114d0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
114e0 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20  _config_none(.. 
114f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11500 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f     SQLiteConfigO
11510 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f  psEnum.SQLITE_CO
11520 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20  NFIG_NONE);.... 
11530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11540 65 74 75 72 6e 20 28 72 63 20 3d 3d 20 53 51 4c  eturn (rc == SQL
11550 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4d 69 73  iteErrorCode.Mis
11560 75 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  use);..         
11570 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
11580 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
11590 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
115a0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
115b0 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 73 61  Log.Enabled = sa
115c0 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20  vedEnabled;..   
115d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
115e0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
115f0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
11600 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65  >..    /// Helpe
11610 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65  r function to re
11620 74 72 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20  trieve a column 
11630 6f 66 20 64 61 74 61 20 66 72 6f 6d 20 61 6e 20  of data from an 
11640 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
11650 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
11660 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
11670 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74  param name="stmt
11680 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  ">The statement 
11690 62 65 69 6e 67 20 73 74 65 70 28 29 27 64 20 74  being step()'d t
116a0 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a  hrough</param>..
116b0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
116c0 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68 65 20  ame="flags">The 
116d0 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  flags associated
116e0 20 77 69 74 68 20 74 68 65 20 63 6f 6e 6e 65 63   with the connec
116f0 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  tion.</param>.. 
11700 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
11710 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68 65 20 63  me="index">The c
11720 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72  olumn index to r
11730 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d  etrieve</param>.
11740 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
11750 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74  name="typ">The t
11760 79 70 65 20 6f 66 20 64 61 74 61 20 63 6f 6e 74  ype of data cont
11770 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c  ained in the col
11780 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74 69  umn.  If Uniniti
11790 61 6c 69 7a 65 64 2c 20 74 68 69 73 20 66 75 6e  alized, this fun
117a0 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69  ction will retri
117b0 65 76 65 20 74 68 65 20 64 61 74 61 74 79 70 65  eve the datatype
117c0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70   information.</p
117d0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
117e0 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20  returns>Returns 
117f0 74 68 65 20 64 61 74 61 20 69 6e 20 74 68 65 20  the data in the 
11800 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e  column</returns>
11810 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11820 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47  verride object G
11830 65 74 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74  etValue(SQLiteSt
11840 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
11850 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
11860 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
11870 6e 64 65 78 2c 20 53 51 4c 69 74 65 54 79 70 65  ndex, SQLiteType
11880 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   typ)..    {..  
11890 20 20 20 20 69 66 20 28 49 73 4e 75 6c 6c 28 73      if (IsNull(s
118a0 74 6d 74 2c 20 69 6e 64 65 78 29 29 20 72 65 74  tmt, index)) ret
118b0 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65  urn DBNull.Value
118c0 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66 66  ;..      TypeAff
118d0 69 6e 69 74 79 20 61 66 66 20 3d 20 74 79 70 2e  inity aff = typ.
118e0 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20  Affinity;..     
118f0 20 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c 3b 0d   Type t = null;.
11900 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 74 79 70  ...      if (typ
11910 2e 54 79 70 65 20 21 3d 20 44 62 54 79 70 65 2e  .Type != DbType.
11920 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20 20 7b  Object)..      {
11930 0d 0a 20 20 20 20 20 20 20 20 74 20 3d 20 53 51  ..        t = SQ
11940 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69  LiteConvert.SQLi
11950 74 65 54 79 70 65 54 6f 54 79 70 65 28 74 79 70  teTypeToType(typ
11960 29 3b 0d 0a 20 20 20 20 20 20 20 20 61 66 66 20  );..        aff 
11970 3d 20 54 79 70 65 54 6f 41 66 66 69 6e 69 74 79  = TypeToAffinity
11980 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  (t);..      }...
11990 0a 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67  .      if ((flag
119a0 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
119b0 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c  tionFlags.GetAll
119c0 41 73 54 65 78 74 29 20 3d 3d 20 53 51 4c 69 74  AsText) == SQLit
119d0 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
119e0 2e 47 65 74 41 6c 6c 41 73 54 65 78 74 29 0d 0a  .GetAllAsText)..
119f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11a00 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69   GetText(stmt, i
11a10 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
11a20 73 77 69 74 63 68 20 28 61 66 66 29 0d 0a 20 20  switch (aff)..  
11a30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63      {..        c
11a40 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
11a50 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20  .Blob:..        
11a60 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d    if (typ.Type =
11a70 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26  = DbType.Guid &&
11a80 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d   typ.Affinity ==
11a90 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65   TypeAffinity.Te
11aa0 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt)..           
11ab0 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64   return new Guid
11ac0 28 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69  (GetText(stmt, i
11ad0 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndex));....     
11ae0 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e       int n = (in
11af0 74 29 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c  t)GetBytes(stmt,
11b00 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c   index, 0, null,
11b10 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 20   0, 0);..       
11b20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 6e 65     byte[] b = ne
11b30 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20  w byte[n];..    
11b40 20 20 20 20 20 20 47 65 74 42 79 74 65 73 28 73        GetBytes(s
11b50 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62  tmt, index, 0, b
11b60 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20  , 0, n);....    
11b70 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79        if (typ.Ty
11b80 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69  pe == DbType.Gui
11b90 64 20 26 26 20 6e 20 3d 3d 20 31 36 29 0d 0a 20  d && n == 16).. 
11ba0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11bb0 6e 20 6e 65 77 20 47 75 69 64 28 62 29 3b 0d 0a  n new Guid(b);..
11bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
11bd0 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20 20 20 63  rn b;..        c
11be0 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
11bf0 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20 20 20 20  .DateTime:..    
11c00 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
11c10 44 61 74 65 54 69 6d 65 28 73 74 6d 74 2c 20 69  DateTime(stmt, i
11c20 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
11c30 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
11c40 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20  y.Double:..     
11c50 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75       if (t == nu
11c60 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74 44 6f  ll) return GetDo
11c70 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  uble(stmt, index
11c80 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  );..          re
11c90 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61  turn Convert.Cha
11ca0 6e 67 65 54 79 70 65 28 47 65 74 44 6f 75 62 6c  ngeType(GetDoubl
11cb0 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e(stmt, index), 
11cc0 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  t, null);..     
11cd0 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
11ce0 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20  nity.Int64:..   
11cf0 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
11d00 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74  null) return Get
11d10 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65  Int64(stmt, inde
11d20 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
11d30 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 53  f (t == typeof(S
11d40 42 79 74 65 29 29 20 72 65 74 75 72 6e 20 47 65  Byte)) return Ge
11d50 74 53 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64  tSByte(stmt, ind
11d60 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
11d70 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
11d80 42 79 74 65 29 29 20 72 65 74 75 72 6e 20 47 65  Byte)) return Ge
11d90 74 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64 65  tByte(stmt, inde
11da0 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
11db0 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49  f (t == typeof(I
11dc0 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20 47 65  nt16)) return Ge
11dd0 74 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e 64  tInt16(stmt, ind
11de0 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
11df0 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
11e00 55 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20  UInt16)) return 
11e10 47 65 74 55 49 6e 74 31 36 28 73 74 6d 74 2c 20  GetUInt16(stmt, 
11e20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
11e30 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
11e40 6f 66 28 49 6e 74 33 32 29 29 20 72 65 74 75 72  of(Int32)) retur
11e50 6e 20 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  n GetInt32(stmt,
11e60 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
11e70 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
11e80 65 6f 66 28 55 49 6e 74 33 32 29 29 20 72 65 74  eof(UInt32)) ret
11e90 75 72 6e 20 47 65 74 55 49 6e 74 33 32 28 73 74  urn GetUInt32(st
11ea0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
11eb0 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
11ec0 74 79 70 65 6f 66 28 55 49 6e 74 36 34 29 29 20  typeof(UInt64)) 
11ed0 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 36 34  return GetUInt64
11ee0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
11ef0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11f00 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54   Convert.ChangeT
11f10 79 70 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d  ype(GetInt64(stm
11f20 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75  t, index), t, nu
11f30 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 64 65  ll);..        de
11f40 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20  fault:..        
11f50 20 20 72 65 74 75 72 6e 20 47 65 74 54 65 78 74    return GetText
11f60 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
11f70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
11f80 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11f90 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 43  verride int GetC
11fa0 75 72 73 6f 72 46 6f 72 54 61 62 6c 65 28 53 51  ursorForTable(SQ
11fb0 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
11fc0 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e 74 20  mt, int db, int 
11fd0 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20 20 7b  rootPage)..    {
11fe0 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
11ff0 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 72 65  ANDARD..      re
12000 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
12010 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12020 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e  _table_cursor_in
12030 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
12040 74 65 5f 73 74 6d 74 2c 20 64 62 2c 20 72 6f 6f  te_stmt, db, roo
12050 74 50 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  tPage);..#else..
12060 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b        return -1;
12070 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
12080 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
12090 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
120a0 74 52 6f 77 49 64 46 6f 72 43 75 72 73 6f 72 28  tRowIdForCursor(
120b0 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
120c0 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f 72  stmt, int cursor
120d0 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
120e0 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
120f0 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 69 64        long rowid
12100 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  ;..      SQLiteE
12110 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e  rrorCode rc = Un
12120 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12130 73 2e 73 71 6c 69 74 65 33 5f 63 75 72 73 6f 72  s.sqlite3_cursor
12140 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28 73  _rowid_interop(s
12150 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
12160 2c 20 63 75 72 73 6f 72 2c 20 6f 75 74 20 72 6f  , cursor, out ro
12170 77 69 64 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  wid);..      if 
12180 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  (rc == SQLiteErr
12190 6f 72 43 6f 64 65 2e 4f 6b 29 20 72 65 74 75 72  orCode.Ok) retur
121a0 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20 20 20 20  n rowid;....    
121b0 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6c    return 0;..#el
121c0 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
121d0 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20   0;..#endif..   
121e0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
121f0 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
12200 20 47 65 74 49 6e 64 65 78 43 6f 6c 75 6d 6e 45   GetIndexColumnE
12210 78 74 65 6e 64 65 64 49 6e 66 6f 28 73 74 72 69  xtendedInfo(stri
12220 6e 67 20 64 61 74 61 62 61 73 65 2c 20 73 74 72  ng database, str
12230 69 6e 67 20 69 6e 64 65 78 2c 20 73 74 72 69 6e  ing index, strin
12240 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 69 6e  g column, out in
12250 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74 20  t sortMode, out 
12260 69 6e 74 20 6f 6e 45 72 72 6f 72 2c 20 6f 75 74  int onError, out
12270 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 69 6f   string collatio
12280 6e 53 65 71 75 65 6e 63 65 29 0d 0a 20 20 20 20  nSequence)..    
12290 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
122a0 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 49  TANDARD..      I
122b0 6e 74 50 74 72 20 63 6f 6c 6c 3b 0d 0a 20 20 20  ntPtr coll;..   
122c0 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65 6e 3b 0d     int colllen;.
122d0 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
122e0 6f 72 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20 20  orCode rc;....  
122f0 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e      rc = UnsafeN
12300 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
12310 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d  ite3_index_colum
12320 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f  n_info_interop(_
12330 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61  sql, ToUTF8(data
12340 62 61 73 65 29 2c 20 54 6f 55 54 46 38 28 69 6e  base), ToUTF8(in
12350 64 65 78 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c  dex), ToUTF8(col
12360 75 6d 6e 29 2c 20 6f 75 74 20 73 6f 72 74 4d 6f  umn), out sortMo
12370 64 65 2c 20 6f 75 74 20 6f 6e 45 72 72 6f 72 2c  de, out onError,
12380 20 6f 75 74 20 63 6f 6c 6c 2c 20 6f 75 74 20 63   out coll, out c
12390 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20  olllen);..      
123a0 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65  if (rc != SQLite
123b0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
123c0 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
123d0 63 65 70 74 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c  ception(rc, null
123e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c  );....      coll
123f0 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20  ationSequence = 
12400 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c  UTF8ToString(col
12410 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65  l, colllen);..#e
12420 6c 73 65 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d  lse..      sortM
12430 6f 64 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ode = 0;..      
12440 6f 6e 45 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20  onError = 2;..  
12450 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71      collationSeq
12460 75 65 6e 63 65 20 3d 20 22 42 49 4e 41 52 59 22  uence = "BINARY"
12470 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
12480 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
12490 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
124a0 45 72 72 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f  ErrorCode FileCo
124b0 6e 74 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62  ntrol(string zDb
124c0 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e  Name, int op, In
124d0 74 50 74 72 20 70 41 72 67 29 0d 0a 20 20 20 20  tPtr pArg)..    
124e0 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
124f0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
12500 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65  ods.sqlite3_file
12510 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28  _control(_sql, (
12520 7a 44 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  zDbName != null)
12530 20 3f 20 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d   ? ToUTF8(zDbNam
12540 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70  e) : null, op, p
12550 41 72 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  Arg);..    }..  
12560 7d 0d 0a 7d 0d 0a                                }..}..