System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 639dd4ba1bf2dc415fe703151683339bf4c6426c:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 20 0d 0a  soft.com).. * ..
00b0: 20 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74   * Released to t
00c0: 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e  he public domain
00d0: 2c 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77  , use at your ow
00e0: 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a  n risk!.. ******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65  **/....namespace
0130: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
0140: 69 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20  ite..{..  using 
0150: 53 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67  System;..  using
0160: 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69   System.Collecti
0170: 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 0d 0a  ons.Generic;....
0180: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
0190: 5f 32 30 20 26 26 20 28 54 52 41 43 45 5f 43 4f  _20 && (TRACE_CO
01a0: 4e 4e 45 43 54 49 4f 4e 20 7c 7c 20 54 52 41 43  NNECTION || TRAC
01b0: 45 5f 53 54 41 54 45 4d 45 4e 54 29 0d 0a 20 20  E_STATEMENT)..  
01c0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61  using System.Dia
01d0: 67 6e 6f 73 74 69 63 73 3b 0d 0a 23 65 6e 64 69  gnostics;..#endi
01e0: 66 0d 0a 0d 0a 20 20 75 73 69 6e 67 20 53 79 73  f....  using Sys
01f0: 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f  tem.Globalizatio
0200: 6e 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  n;..  using Syst
0210: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0220: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 20 20 75  opServices;..  u
0230: 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74  sing System.Text
0240: 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;....  /// <summ
0250: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  ary>..  /// This
0260: 20 69 73 20 74 68 65 20 6d 65 74 68 6f 64 20 73   is the method s
0270: 69 67 6e 61 74 75 72 65 20 66 6f 72 20 74 68 65  ignature for the
0280: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
0290: 72 61 72 79 20 6c 6f 67 67 69 6e 67 20 63 61 6c  rary logging cal
02a0: 6c 62 61 63 6b 0d 0a 20 20 2f 2f 2f 20 66 75 6e  lback..  /// fun
02b0: 63 74 69 6f 6e 20 66 6f 72 20 75 73 65 20 77 69  ction for use wi
02c0: 74 68 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  th sqlite3_log()
02d0: 20 61 6e 64 20 74 68 65 20 53 51 4c 49 54 45 5f   and the SQLITE_
02e0: 43 4f 4e 46 49 47 5f 4c 4f 47 2e 0d 0a 20 20 2f  CONFIG_LOG...  /
02f0: 2f 2f 0d 0a 20 20 2f 2f 2f 20 57 41 52 4e 49 4e  //..  /// WARNIN
0300: 47 3a 20 54 68 69 73 20 64 65 6c 65 67 61 74 65  G: This delegate
0310: 20 69 73 20 75 73 65 64 20 6d 6f 72 65 2d 6f 72   is used more-or
0320: 2d 6c 65 73 73 20 64 69 72 65 63 74 6c 79 20 62  -less directly b
0330: 79 20 6e 61 74 69 76 65 20 63 6f 64 65 2c 20 64  y native code, d
0340: 6f 0d 0a 20 20 2f 2f 2f 20 20 20 20 20 20 20 20  o..  ///        
0350: 20 20 6e 6f 74 20 6d 6f 64 69 66 79 20 69 74 73    not modify its
0360: 20 74 79 70 65 20 73 69 67 6e 61 74 75 72 65 2e   type signature.
0370: 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
0380: 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  y>..  /// <param
0390: 20 6e 61 6d 65 3d 22 70 55 73 65 72 44 61 74 61   name="pUserData
03a0: 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 65 78  ">..  /// The ex
03b0: 74 72 61 20 64 61 74 61 20 61 73 73 6f 63 69 61  tra data associa
03c0: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6d 65  ted with this me
03d0: 73 73 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d 0a  ssage, if any...
03e0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
03f0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
0400: 65 3d 22 65 72 72 6f 72 43 6f 64 65 22 3e 0d 0a  e="errorCode">..
0410: 20 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72 20    /// The error 
0420: 63 6f 64 65 20 61 73 73 6f 63 69 61 74 65 64 20  code associated 
0430: 77 69 74 68 20 74 68 69 73 20 6d 65 73 73 61 67  with this messag
0440: 65 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  e...  /// </para
0450: 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  m>..  /// <param
0460: 20 6e 61 6d 65 3d 22 70 4d 65 73 73 61 67 65 22   name="pMessage"
0470: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 6d 65 73  >..  /// The mes
0480: 73 61 67 65 20 73 74 72 69 6e 67 20 74 6f 20 62  sage string to b
0490: 65 20 6c 6f 67 67 65 64 2e 0d 0a 20 20 2f 2f 2f  e logged...  ///
04a0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 23 69 66 20 21   </param>..#if !
04b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
04c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 5b 55 6e  FRAMEWORK..  [Un
04d0: 6d 61 6e 61 67 65 64 46 75 6e 63 74 69 6f 6e 50  managedFunctionP
04e0: 6f 69 6e 74 65 72 28 43 61 6c 6c 69 6e 67 43 6f  ointer(CallingCo
04f0: 6e 76 65 6e 74 69 6f 6e 2e 43 64 65 63 6c 29 5d  nvention.Cdecl)]
0500: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 69 6e 74 65  ..#endif..  inte
0510: 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f  rnal delegate vo
0520: 69 64 20 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c  id SQLiteLogCall
0530: 62 61 63 6b 28 49 6e 74 50 74 72 20 70 55 73 65  back(IntPtr pUse
0540: 72 44 61 74 61 2c 20 69 6e 74 20 65 72 72 6f 72  rData, int error
0550: 43 6f 64 65 2c 20 49 6e 74 50 74 72 20 70 4d 65  Code, IntPtr pMe
0560: 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f  ssage);....  ///
0570: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f   <summary>..  //
0580: 2f 20 54 68 69 73 20 63 6c 61 73 73 20 69 6d 70  / This class imp
0590: 6c 65 6d 65 6e 74 73 20 53 51 4c 69 74 65 42 61  lements SQLiteBa
05a0: 73 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2c 20 61  se completely, a
05b0: 6e 64 20 69 73 20 74 68 65 20 67 75 74 73 20 6f  nd is the guts o
05c0: 66 20 74 68 65 20 63 6f 64 65 20 74 68 61 74 20  f the code that 
05d0: 69 6e 74 65 72 6f 70 27 73 20 53 51 4c 69 74 65  interop's SQLite
05e0: 20 77 69 74 68 20 2e 4e 45 54 0d 0a 20 20 2f 2f   with .NET..  //
05f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0600: 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 53  internal class S
0610: 51 4c 69 74 65 33 20 3a 20 53 51 4c 69 74 65 42  QLite3 : SQLiteB
0620: 61 73 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 70 72  ase..  {..    pr
0630: 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a  ivate static obj
0640: 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e  ect syncRoot = n
0650: 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 0d 0a  ew object();....
0660: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 2f 2f 20 4e      //..    // N
0670: 4f 54 45 3a 20 54 68 69 73 20 69 73 20 74 68 65  OTE: This is the
0680: 20 70 75 62 6c 69 63 20 6b 65 79 20 66 6f 72 20   public key for 
0690: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
06a0: 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 2e  SQLite assembly.
06b0: 20 20 49 66 20 79 6f 75 20 63 68 61 6e 67 65 20    If you change 
06c0: 74 68 65 0d 0a 20 20 20 20 2f 2f 20 20 20 20 20  the..    //     
06d0: 20 20 53 4e 4b 20 66 69 6c 65 2c 20 79 6f 75 20    SNK file, you 
06e0: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 63 68 61  will need to cha
06f0: 6e 67 65 20 74 68 69 73 20 61 73 20 77 65 6c 6c  nge this as well
0700: 2e 0d 0a 20 20 20 20 2f 2f 0d 0a 20 20 20 20 69  ...    //..    i
0710: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74  nternal const st
0720: 72 69 6e 67 20 50 75 62 6c 69 63 4b 65 79 20 3d  ring PublicKey =
0730: 0d 0a 20 20 20 20 20 20 20 20 22 30 30 32 34 30  ..        "00240
0740: 30 30 30 30 34 38 30 30 30 30 30 39 34 30 30 30  0000480000094000
0750: 30 30 30 30 36 30 32 30 30 30 30 30 30 32 34 30  0000602000000240
0760: 30 30 30 35 32 35 33 34 31 33 31 30 30 30 34 30  0005253413100040
0770: 30 30 30 30 31 30 30 30 31 30 30 30 35 61 32 38  0000100010005a28
0780: 38 64 65 35 36 38 37 63 34 65 31 22 20 2b 0d 0a  8de5687c4e1" +..
0790: 20 20 20 20 20 20 20 20 22 62 36 32 31 64 64 66          "b621ddf
07a0: 66 35 64 38 34 34 37 32 37 34 31 38 39 35 36 39  f5d8447274189569
07b0: 39 37 66 34 37 35 65 62 38 32 39 34 32 39 65 34  97f475eb829429e4
07c0: 31 31 61 66 66 33 65 39 33 66 39 37 62 37 30 64  11aff3e93f97b70d
07d0: 65 36 39 38 62 39 37 32 36 34 30 39 32 35 62 64  e698b972640925bd
07e0: 64 34 34 32 38 30 64 66 30 22 20 2b 0d 0a 20 20  d44280df0" +..  
07f0: 20 20 20 20 20 20 22 61 32 35 61 38 34 33 32 36        "a25a84326
0800: 36 39 37 33 37 30 34 31 33 37 63 62 62 30 65 37  6973704137cbb0e7
0810: 34 34 31 63 31 66 65 37 63 61 65 34 65 32 34 34  441c1fe7cae4e244
0820: 30 61 65 39 31 61 62 38 63 64 65 33 39 33 33 66  0ae91ab8cde3933f
0830: 65 62 63 62 31 61 63 34 38 64 64 33 33 62 34 30  ebcb1ac48dd33b40
0840: 65 31 33 63 34 32 31 22 20 2b 0d 0a 20 20 20 20  e13c421" +..    
0850: 20 20 20 20 22 64 38 32 31 35 63 31 38 61 34 33      "d8215c18a43
0860: 34 39 61 34 33 36 64 64 34 39 39 65 33 63 33 38  49a436dd499e3c38
0870: 35 63 63 36 38 33 30 31 35 66 38 38 36 66 36 63  5cc683015f886f6c
0880: 31 30 62 64 39 30 31 31 35 65 62 32 62 64 36 31  10bd90115eb2bd61
0890: 62 36 37 37 35 30 38 33 39 65 33 61 31 39 39 34  b67750839e3a1994
08a0: 31 64 63 39 63 22 3b 0d 0a 0d 0a 23 69 66 20 21  1dc9c";....#if !
08b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
08c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 69  FRAMEWORK..    i
08d0: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74  nternal const st
08e0: 72 69 6e 67 20 44 65 73 69 67 6e 65 72 56 65 72  ring DesignerVer
08f0: 73 69 6f 6e 20 3d 20 22 31 2e 30 2e 38 37 2e 30  sion = "1.0.87.0
0900: 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  ";..#endif....  
0910: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0920: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 70 61  .    /// The opa
0930: 71 75 65 20 70 6f 69 6e 74 65 72 20 72 65 74 75  que pointer retu
0940: 72 6e 65 64 20 74 6f 20 75 73 20 62 79 20 74 68  rned to us by th
0950: 65 20 73 71 6c 69 74 65 20 70 72 6f 76 69 64 65  e sqlite provide
0960: 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  r..    /// </sum
0970: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0980: 63 74 65 64 20 69 6e 74 65 72 6e 61 6c 20 53 51  cted internal SQ
0990: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
09a0: 6e 64 6c 65 20 5f 73 71 6c 3b 0d 0a 20 20 20 20  ndle _sql;..    
09b0: 70 72 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67  protected string
09c0: 20 5f 66 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20   _fileName;..   
09d0: 20 70 72 6f 74 65 63 74 65 64 20 62 6f 6f 6c 20   protected bool 
09e0: 5f 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 70  _usePool;..    p
09f0: 72 6f 74 65 63 74 65 64 20 69 6e 74 20 5f 70 6f  rotected int _po
0a00: 6f 6c 56 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 23 69  olVersion;....#i
0a10: 66 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54  f (NET_35 || NET
0a20: 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 29 20 26  _40 || NET_45) &
0a30: 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  & !PLATFORM_COMP
0a40: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
0a50: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 5f    private bool _
0a60: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 3b 0d  buildingSchema;.
0a70: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
0a80: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0a90: 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72 2d 64    /// The user-d
0aa0: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
0ab0: 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e 20 74   registered on t
0ac0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  his connection..
0ad0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ae0: 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  y>..    protecte
0af0: 64 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  d SQLiteFunction
0b00: 5b 5d 20 5f 66 75 6e 63 74 69 6f 6e 73 41 72 72  [] _functionsArr
0b10: 61 79 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52  ay;....#if INTER
0b20: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
0b30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0b40: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
0b50: 20 6d 6f 64 75 6c 65 73 20 63 72 65 61 74 65 64   modules created
0b60: 20 75 73 69 6e 67 20 74 68 69 73 20 63 6f 6e 6e   using this conn
0b70: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
0b80: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0b90: 20 70 72 6f 74 65 63 74 65 64 20 44 69 63 74 69   protected Dicti
0ba0: 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51  onary<string, SQ
0bb0: 4c 69 74 65 4d 6f 64 75 6c 65 3e 20 5f 6d 6f 64  LiteModule> _mod
0bc0: 75 6c 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ules;..#endif...
0bd0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
0be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c30: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ////....    inte
0c40: 72 6e 61 6c 20 53 51 4c 69 74 65 33 28 0d 0a 20  rnal SQLite3(.. 
0c50: 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74         SQLiteDat
0c60: 65 46 6f 72 6d 61 74 73 20 66 6d 74 2c 0d 0a 20  eFormats fmt,.. 
0c70: 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 4b         DateTimeK
0c80: 69 6e 64 20 6b 69 6e 64 2c 0d 0a 20 20 20 20 20  ind kind,..     
0c90: 20 20 20 73 74 72 69 6e 67 20 66 6d 74 53 74 72     string fmtStr
0ca0: 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 49 6e  ing,..        In
0cb0: 74 50 74 72 20 64 62 2c 0d 0a 20 20 20 20 20 20  tPtr db,..      
0cc0: 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
0cd0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  e,..        bool
0ce0: 20 6f 77 6e 48 61 6e 64 6c 65 0d 0a 20 20 20 20   ownHandle..    
0cf0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 3a 20 62      )..      : b
0d00: 61 73 65 28 66 6d 74 2c 20 6b 69 6e 64 2c 20 66  ase(fmt, kind, f
0d10: 6d 74 53 74 72 69 6e 67 29 0d 0a 20 20 20 20 7b  mtString)..    {
0d20: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 62  ..        if (db
0d30: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
0d40: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
0d50: 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20           _sql = 
0d60: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  new SQLiteConnec
0d70: 74 69 6f 6e 48 61 6e 64 6c 65 28 64 62 2c 20 6f  tionHandle(db, o
0d80: 77 6e 48 61 6e 64 6c 65 29 3b 0d 0a 20 20 20 20  wnHandle);..    
0d90: 20 20 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d          _fileNam
0da0: 65 20 3d 20 66 69 6c 65 4e 61 6d 65 3b 0d 0a 20  e = fileName;.. 
0db0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
0dc0: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
0dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e20: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
0e30: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
0e40: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
0e50: 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ers..    private
0e60: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
0e70: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
0e80: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
0e90: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
0ea0: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
0eb0: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
0ec0: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
0ed0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
0ee0: 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74  throw new Object
0ef0: 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
0f00: 6e 28 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33  n(typeof(SQLite3
0f10: 29 2e 4e 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66  ).Name);..#endif
0f20: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
0f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0f90: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
0fa0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 44 69  override void Di
0fb0: 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f  spose(bool dispo
0fc0: 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sing)..    {..  
0fd0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
0fe0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
0ff0: 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29    if (!disposed)
1000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1020: 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67   //if (disposing
1030: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1040: 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20     //{..        
1050: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f          //    //
1060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1080: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1090: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73      //    // dis
10a0: 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73  pose managed res
10b0: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
10c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d0: 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  //    //////////
10e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
1100: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d              //}.
1110: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1120: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
1150: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65             // re
1160: 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20  lease unmanaged 
1170: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
1180: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1190: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
11a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66  /////////....#if
11c0: 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c   INTEROP_VIRTUAL
11d0: 5f 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20  _TABLE..        
11e0: 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f 64          if (_mod
11f0: 75 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  ules != null).. 
1200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1220: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 4b        foreach (K
1230: 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74 72 69  eyValuePair<stri
1240: 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ng, SQLiteModule
1250: 3e 20 70 61 69 72 20 69 6e 20 5f 6d 6f 64 75 6c  > pair in _modul
1260: 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es)..           
1270: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1290: 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65      SQLiteModule
12a0: 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69 72 2e 56   module = pair.V
12b0: 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
12c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d0: 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
12e0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
12f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1300: 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
1310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1320: 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69         module.Di
1330: 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  spose();..      
1340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1360: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
1370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6c                Cl
1380: 6f 73 65 28 66 61 6c 73 65 29 3b 20 2f 2a 20 44  ose(false); /* D
1390: 69 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e 6f 74  isposing, cannot
13a0: 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a 0d 0a 20 20   throw. */....  
13b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
13c0: 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a  sposed = true;..
13d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
13e0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
13f0: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
1400: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1410: 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28 64    base.Dispose(d
1420: 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 20 20 20 20  isposing);..    
1430: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
1440: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1450: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49 74  ///....    // It
14c0: 20 69 73 6e 27 74 20 6e 65 63 65 73 73 61 72 79   isn't necessary
14d0: 20 74 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79 20   to cleanup any 
14e0: 66 75 6e 63 74 69 6f 6e 73 20 77 65 27 76 65 20  functions we've 
14f0: 72 65 67 69 73 74 65 72 65 64 2e 20 20 49 66 20  registered.  If 
1500: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  the connection..
1510: 20 20 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20 74      // goes to t
1520: 68 65 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20 72  he pool and is r
1530: 65 73 75 72 72 65 63 74 65 64 20 6c 61 74 65 72  esurrected later
1540: 2c 20 72 65 2d 72 65 67 69 73 74 65 72 65 64 20  , re-registered 
1550: 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 6f  functions will o
1560: 76 65 72 77 72 69 74 65 20 74 68 65 0d 0a 20 20  verwrite the..  
1570: 20 20 2f 2f 20 70 72 65 76 69 6f 75 73 20 66 75    // previous fu
1580: 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 53 51  nctions.  The SQ
1590: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b  LiteFunctionCook
15a0: 69 65 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74 61  ieHandle will ta
15b0: 6b 65 20 63 61 72 65 20 6f 66 20 66 72 65 65 69  ke care of freei
15c0: 6e 67 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20 20  ng unmanaged..  
15d0: 20 20 2f 2f 20 72 65 73 6f 75 72 63 65 73 20 62    // resources b
15e0: 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20  elonging to the 
15f0: 70 72 65 76 69 6f 75 73 6c 79 2d 72 65 67 69 73  previously-regis
1600: 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e  tered functions.
1610: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1620: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c 6f  verride void Clo
1630: 73 65 28 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77  se(bool canThrow
1640: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1650: 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c  if (_sql != null
1660: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
1670: 20 20 20 20 20 20 69 66 20 28 21 5f 73 71 6c 2e        if (!_sql.
1680: 4f 77 6e 48 61 6e 64 6c 65 29 0d 0a 20 20 20 20  OwnHandle)..    
1690: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16a0: 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75         _sql = nu
16b0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
16c0: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20     return;..    
16d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
16e0: 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f       if (_usePoo
16f0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  l)..          {.
1700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1710: 66 20 28 53 51 4c 69 74 65 42 61 73 65 2e 52 65  f (SQLiteBase.Re
1720: 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f 73  setConnection(_s
1730: 71 6c 2c 20 5f 73 71 6c 2c 20 63 61 6e 54 68 72  ql, _sql, canThr
1740: 6f 77 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ow))..          
1750: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1760: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
1770: 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41 64  onnectionPool.Ad
1780: 64 28 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 73 71  d(_fileName, _sq
1790: 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29  l, _poolVersion)
17a0: 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  ;....#if !NET_CO
17b0: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
17c0: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
17d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e0: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
17f0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43  String.Format("C
1800: 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 53 75 63 63  lose (Pool) Succ
1810: 65 73 73 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29  ess: {0}", _sql)
1820: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
1830: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66            }..#if
1840: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
1850: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
1860: 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
1870: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
1880: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1890: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
18a0: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72  ce.WriteLine(Str
18b0: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43 6c 6f 73  ing.Format("Clos
18c0: 65 20 28 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65  e (Pool) Failure
18d0: 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29 29 3b 0d  : {0}", _sql));.
18e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
18f0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
1900: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1910: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
1920: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1930: 20 20 5f 73 71 6c 2e 44 69 73 70 6f 73 65 28 29    _sql.Dispose()
1940: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
1950: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d            _sql =
1960: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d   null;..      }.
1970: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
1980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
19e0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
19f0: 65 72 72 69 64 65 20 76 6f 69 64 20 43 61 6e 63  erride void Canc
1a00: 65 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  el()..    {..   
1a10: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
1a20: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
1a30: 6e 74 65 72 72 75 70 74 28 5f 73 71 6c 29 3b 0d  nterrupt(_sql);.
1a40: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
1a50: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
1a60: 73 74 72 69 6e 67 20 56 65 72 73 69 6f 6e 0d 0a  string Version..
1a70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
1a80: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
1a90: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
1aa0: 33 2e 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b  3.SQLiteVersion;
1ab0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
1ac0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
1ad0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 65   override int Ve
1ae0: 72 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20  rsionNumber..   
1af0: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
1b00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b10: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 33 2e 53  return SQLite3.S
1b20: 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62  QLiteVersionNumb
1b30: 65 72 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  er;..      }..  
1b40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1b50: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
1b60: 67 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  g DefineConstant
1b70: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
1b80: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
1b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 74  ..            St
1ba0: 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75  ringBuilder resu
1bb0: 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42  lt = new StringB
1bc0: 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20  uilder();..     
1bd0: 20 20 20 20 20 20 20 49 4c 69 73 74 3c 73 74 72         IList<str
1be0: 69 6e 67 3e 20 6c 69 73 74 20 3d 20 53 51 4c 69  ing> list = SQLi
1bf0: 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  teDefineConstant
1c00: 73 2e 4f 70 74 69 6f 6e 4c 69 73 74 3b 0d 0a 0d  s.OptionList;...
1c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1c20: 28 6c 69 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a  (list != null)..
1c30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1c50: 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67 20 65  oreach (string e
1c60: 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 73 74 29 0d  lement in list).
1c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c90: 20 20 20 20 20 20 20 20 69 66 20 28 65 6c 65 6d          if (elem
1ca0: 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent == null)..  
1cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc0: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1cd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ce0: 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c         if (resul
1cf0: 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20  t.Length > 0).. 
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d10: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
1d20: 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20  pend(' ');....  
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d40: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
1d50: 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20  element);..     
1d60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1d70: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1d80: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1d90: 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e  n result.ToStrin
1da0: 67 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  g();..        }.
1db0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
1dc0: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74  ternal static st
1dd0: 72 69 6e 67 20 53 51 4c 69 74 65 56 65 72 73 69  ring SQLiteVersi
1de0: 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  on..    {..     
1df0: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
1e00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54         return UT
1e10: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
1e20: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1e30: 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f  qlite3_libversio
1e40: 6e 28 29 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20  n(), -1);..     
1e50: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
1e60: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
1e70: 20 69 6e 74 20 53 51 4c 69 74 65 56 65 72 73 69   int SQLiteVersi
1e80: 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d  onNumber..    {.
1e90: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
1ea0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
1eb0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
1ec0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
1ed0: 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65  libversion_numbe
1ee0: 72 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  r();..      }.. 
1ef0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
1f00: 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69  rnal static stri
1f10: 6e 67 20 53 51 4c 69 74 65 53 6f 75 72 63 65 49  ng SQLiteSourceI
1f20: 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  d..    {..      
1f30: 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  get..      {..  
1f40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
1f50: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
1f60: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1f70: 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29  lite3_sourceid()
1f80: 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  , -1);..      }.
1f90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
1fa0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
1fb0: 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69 74 0d  bool AutoCommit.
1fc0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
1fd0: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
1fe0: 20 20 20 20 72 65 74 75 72 6e 20 49 73 41 75 74      return IsAut
1ff0: 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c 20 5f 73  ocommit(_sql, _s
2000: 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ql);..      }.. 
2010: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
2020: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
2030: 6e 67 20 4c 61 73 74 49 6e 73 65 72 74 52 6f 77  ng LastInsertRow
2040: 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  Id..    {..     
2050: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23   get..      {..#
2060: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
2070: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
2080: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
2090: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
20a0: 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  s.sqlite3_last_i
20b0: 6e 73 65 72 74 5f 72 6f 77 69 64 28 5f 73 71 6c  nsert_rowid(_sql
20c0: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
20d0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
20e0: 20 20 20 20 6c 6f 6e 67 20 72 6f 77 49 64 20 3d      long rowId =
20f0: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73   0;..        Uns
2100: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2110: 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e  .sqlite3_last_in
2120: 73 65 72 74 5f 72 6f 77 69 64 5f 69 6e 74 65 72  sert_rowid_inter
2130: 6f 70 28 5f 73 71 6c 2c 20 72 65 66 20 72 6f 77  op(_sql, ref row
2140: 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  Id);..        re
2150: 74 75 72 6e 20 72 6f 77 49 64 3b 0d 0a 23 65 6c  turn rowId;..#el
2160: 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  se..        thro
2170: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
2180: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
2190: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
21a0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
21b0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
21c0: 65 20 69 6e 74 20 43 68 61 6e 67 65 73 0d 0a 20  e int Changes.. 
21d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
21e0: 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  .      {..#if !S
21f0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
2200: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
2210: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2220: 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  ds.sqlite3_chang
2230: 65 73 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 29  es_interop(_sql)
2240: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
2250: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
2260: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
2270: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 5f 73 71  ite3_changes(_sq
2280: 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  l);..#endif..   
2290: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
22a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
22b0: 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79  ride long Memory
22c0: 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  Used..    {..   
22d0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
22e0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
22f0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
2300: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
2310: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2320: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f  ods.sqlite3_memo
2330: 72 79 5f 75 73 65 64 28 29 3b 0d 0a 23 65 6c 69  ry_used();..#eli
2340: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
2350: 52 44 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67  RD..        long
2360: 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20   bytes = 0;..   
2370: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
2380: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
2390: 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 5f 69 6e 74  _memory_used_int
23a0: 65 72 6f 70 28 72 65 66 20 62 79 74 65 73 29 3b  erop(ref bytes);
23b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
23c0: 20 62 79 74 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a   bytes;..#else..
23d0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
23e0: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
23f0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
2400: 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ndif..      }.. 
2410: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
2420: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
2430: 6e 67 20 4d 65 6d 6f 72 79 48 69 67 68 77 61 74  ng MemoryHighwat
2440: 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  er..    {..     
2450: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23   get..      {..#
2460: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
2470: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
2480: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
2490: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
24a0: 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79  s.sqlite3_memory
24b0: 5f 68 69 67 68 77 61 74 65 72 28 30 29 3b 0d 0a  _highwater(0);..
24c0: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
24d0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
24e0: 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20 30 3b 0d  long bytes = 0;.
24f0: 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e  .        UnsafeN
2500: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
2510: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68  ite3_memory_high
2520: 77 61 74 65 72 5f 69 6e 74 65 72 6f 70 28 30 2c  water_interop(0,
2530: 20 72 65 66 20 62 79 74 65 73 29 3b 0d 0a 20 20   ref bytes);..  
2540: 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74        return byt
2550: 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  es;..#else..    
2560: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
2570: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
2580: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
2590: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
25a0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
25b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
25c0: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20  eturns non-zero 
25d0: 69 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  if the underlyin
25e0: 67 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63 74  g native connect
25f0: 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f 77  ion handle is ow
2600: 6e 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 79 20  ned..    /// by 
2610: 74 68 69 73 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  this instance...
2620: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2630: 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  y>..    internal
2640: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 4f   override bool O
2650: 77 6e 48 61 6e 64 6c 65 0d 0a 20 20 20 20 7b 0d  wnHandle..    {.
2660: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
2670: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2680: 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d       if (_sql ==
2690: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
26a0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
26b0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
26c0: 6e 28 22 6e 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e  n("no connection
26d0: 20 68 61 6e 64 6c 65 20 61 76 61 69 6c 61 62 6c   handle availabl
26e0: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
26f0: 20 20 20 20 72 65 74 75 72 6e 20 5f 73 71 6c 2e      return _sql.
2700: 4f 77 6e 48 61 6e 64 6c 65 3b 0d 0a 20 20 20 20  OwnHandle;..    
2710: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
2720: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
2730: 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
2740: 72 43 6f 64 65 20 53 65 74 4d 65 6d 6f 72 79 53  rCode SetMemoryS
2750: 74 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65  tatus(bool value
2760: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
2770: 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 53    return StaticS
2780: 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 76  etMemoryStatus(v
2790: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  alue);..    }...
27a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
27b0: 61 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72  atic SQLiteError
27c0: 43 6f 64 65 20 53 74 61 74 69 63 53 65 74 4d 65  Code StaticSetMe
27d0: 6d 6f 72 79 53 74 61 74 75 73 28 62 6f 6f 6c 20  moryStatus(bool 
27e0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
27f0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
2800: 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61  orCode rc = Unsa
2810: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2820: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 69  sqlite3_config_i
2830: 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt(..           
2840: 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73   SQLiteConfigOps
2850: 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46  Enum.SQLITE_CONF
2860: 49 47 5f 4d 45 4d 53 54 41 54 55 53 2c 20 76 61  IG_MEMSTATUS, va
2870: 6c 75 65 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 0d  lue ? 1 : 0);...
2880: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
2890: 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  rc;..    }....  
28a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
28b0: 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77  .    /// Shutdow
28c0: 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67  n the SQLite eng
28d0: 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20 63  ine so that it c
28e0: 61 6e 20 62 65 20 72 65 73 74 61 72 74 65 64 20  an be restarted 
28f0: 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 20 63  with different c
2900: 6f 6e 66 69 67 20 6f 70 74 69 6f 6e 73 2e 0d 0a  onfig options...
2910: 20 20 20 20 2f 2f 2f 20 57 65 20 64 65 70 65 6e      /// We depen
2920: 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69 61  d on auto initia
2930: 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f  lization to reco
2940: 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ver...    /// </
2950: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2960: 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72  / <returns>Retur
2970: 6e 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64 65  ns a result code
2980: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
2990: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
29a0: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
29b0: 65 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a 20 20  e Shutdown()..  
29c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
29d0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
29e0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
29f0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 68  thods.sqlite3_sh
2a00: 75 74 64 6f 77 6e 28 29 3b 0d 0a 20 20 20 20 20  utdown();..     
2a10: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20     return rc;.. 
2a20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
2a30: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
2a40: 6f 6c 20 49 73 4f 70 65 6e 28 29 0d 0a 20 20 20  ol IsOpen()..   
2a50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
2a60: 72 6e 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c  rn (_sql != null
2a70: 29 20 26 26 20 21 5f 73 71 6c 2e 49 73 49 6e 76  ) && !_sql.IsInv
2a80: 61 6c 69 64 20 26 26 20 21 5f 73 71 6c 2e 49 73  alid && !_sql.Is
2a90: 43 6c 6f 73 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a  Closed;..    }..
2aa0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
2ab0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 4f 70 65  verride void Ope
2ac0: 6e 28 73 74 72 69 6e 67 20 73 74 72 46 69 6c 65  n(string strFile
2ad0: 6e 61 6d 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  name, SQLiteConn
2ae0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e  ectionFlags conn
2af0: 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51 4c  ectionFlags, SQL
2b00: 69 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d  iteOpenFlagsEnum
2b10: 20 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74 20   openFlags, int 
2b20: 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f  maxPoolSize, boo
2b30: 6c 20 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20  l usePool)..    
2b40: 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71  {..      if (_sq
2b50: 6c 20 21 3d 20 6e 75 6c 6c 29 20 43 6c 6f 73 65  l != null) Close
2b60: 28 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  (true);....     
2b70: 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c   if (_sql != nul
2b80: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68  l)..          th
2b90: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
2ba0: 63 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74  ception("connect
2bb0: 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 73 74  ion handle is st
2bc0: 69 6c 6c 20 61 63 74 69 76 65 22 29 3b 0d 0a 0d  ill active");...
2bd0: 0a 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20  .      _usePool 
2be0: 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20  = usePool;..    
2bf0: 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 73 74    _fileName = st
2c00: 72 46 69 6c 65 6e 61 6d 65 3b 0d 0a 0d 0a 20 20  rFilename;....  
2c10: 20 20 20 20 69 66 20 28 75 73 65 50 6f 6f 6c 29      if (usePool)
2c20: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
2c30: 20 20 20 5f 73 71 6c 20 3d 20 53 51 4c 69 74 65     _sql = SQLite
2c40: 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 52  ConnectionPool.R
2c50: 65 6d 6f 76 65 28 73 74 72 46 69 6c 65 6e 61 6d  emove(strFilenam
2c60: 65 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20  e, maxPoolSize, 
2c70: 6f 75 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e  out _poolVersion
2c80: 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  );....#if !NET_C
2c90: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
2ca0: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
2cb0: 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
2cc0: 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f  teLine(String.Fo
2cd0: 72 6d 61 74 28 22 4f 70 65 6e 20 28 50 6f 6f 6c  rmat("Open (Pool
2ce0: 29 3a 20 7b 30 7d 22 2c 20 28 5f 73 71 6c 20 21  ): {0}", (_sql !
2cf0: 3d 20 6e 75 6c 6c 29 20 3f 20 5f 73 71 6c 2e 54  = null) ? _sql.T
2d00: 6f 53 74 72 69 6e 67 28 29 20 3a 20 22 3c 6e 75  oString() : "<nu
2d10: 6c 6c 3e 22 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ll>"));..#endif.
2d20: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
2d30: 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75    if (_sql == nu
2d40: 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ll)..      {..  
2d50: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
2d60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d70: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
2d80: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
2d90: 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20       finally /* 
2da0: 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f  NOTE: Thread.Abo
2db0: 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e  rt() protection.
2dc0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
2dd0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2de0: 20 64 62 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   db;..          
2df0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2e00: 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  n;....#if !SQLIT
2e10: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
2e20: 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 6e 65        if ((conne
2e30: 63 74 69 6f 6e 46 6c 61 67 73 20 26 20 53 51 4c  ctionFlags & SQL
2e40: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
2e50: 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75  gs.NoExtensionFu
2e60: 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69  nctions) != SQLi
2e70: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
2e80: 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e  s.NoExtensionFun
2e90: 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20  ctions)..       
2ea0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2eb0: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
2ec0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
2ed0: 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28 54  3_open_interop(T
2ee0: 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e 61 6d  oUTF8(strFilenam
2ef0: 65 29 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 6f  e), openFlags, o
2f00: 75 74 20 64 62 29 3b 0d 0a 20 20 20 20 20 20 20  ut db);..       
2f10: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2f20: 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  else..#endif..  
2f30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f40: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
2f50: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
2f60: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 54  qlite3_open_v2(T
2f70: 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e 61 6d  oUTF8(strFilenam
2f80: 65 29 2c 20 6f 75 74 20 64 62 2c 20 6f 70 65 6e  e), out db, open
2f90: 46 6c 61 67 73 2c 20 49 6e 74 50 74 72 2e 5a 65  Flags, IntPtr.Ze
2fa0: 72 6f 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ro);..          
2fb0: 7d 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  }....#if !NET_CO
2fc0: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
2fd0: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
2fe0: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
2ff0: 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46  iteLine(String.F
3000: 6f 72 6d 61 74 28 22 4f 70 65 6e 3a 20 7b 30 7d  ormat("Open: {0}
3010: 22 2c 20 64 62 29 29 3b 0d 0a 23 65 6e 64 69 66  ", db));..#endif
3020: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
3030: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
3040: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
3050: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
3060: 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a  tion(n, null);..
3070: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d            _sql =
3080: 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65   new SQLiteConne
3090: 63 74 69 6f 6e 48 61 6e 64 6c 65 28 64 62 2c 20  ctionHandle(db, 
30a0: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
30b0: 7d 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20  }..        lock 
30c0: 28 5f 73 71 6c 29 20 7b 20 2f 2a 20 48 41 43 4b  (_sql) { /* HACK
30d0: 3a 20 46 6f 72 63 65 20 74 68 65 20 53 79 6e 63  : Force the Sync
30e0: 42 6c 6f 63 6b 20 74 6f 20 62 65 20 22 63 72 65  Block to be "cre
30f0: 61 74 65 64 22 20 6e 6f 77 2e 20 2a 2f 20 7d 0d  ated" now. */ }.
3100: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
3110: 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e  // Bind function
3120: 73 20 74 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63  s to this connec
3130: 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79 20 70 72  tion.  If any pr
3140: 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73  evious functions
3150: 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d   of the same nam
3160: 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77 65 72 65  e..      // were
3170: 20 61 6c 72 65 61 64 79 20 62 6f 75 6e 64 2c 20   already bound, 
3180: 74 68 65 6e 20 74 68 65 20 6e 65 77 20 62 69 6e  then the new bin
3190: 64 69 6e 67 73 20 72 65 70 6c 61 63 65 20 74 68  dings replace th
31a0: 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20 20 5f 66  e old...      _f
31b0: 75 6e 63 74 69 6f 6e 73 41 72 72 61 79 20 3d 20  unctionsArray = 
31c0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42  SQLiteFunction.B
31d0: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 74 68 69  indFunctions(thi
31e0: 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  s, connectionFla
31f0: 67 73 29 3b 0d 0a 20 20 20 20 20 20 53 65 74 54  gs);..      SetT
3200: 69 6d 65 6f 75 74 28 30 29 3b 0d 0a 20 20 20 20  imeout(0);..    
3210: 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65 28 5f    GC.KeepAlive(_
3220: 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  sql);..    }....
3230: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3240: 72 72 69 64 65 20 76 6f 69 64 20 43 6c 65 61 72  rride void Clear
3250: 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Pool()..    {.. 
3260: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
3270: 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50  ctionPool.ClearP
3280: 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d  ool(_fileName);.
3290: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
32a0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
32b0: 69 6e 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29 0d  int CountPool().
32c0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
32d0: 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
32e0: 67 2c 20 69 6e 74 3e 20 63 6f 75 6e 74 73 20 3d  g, int> counts =
32f0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
3300: 69 6e 74 20 6f 70 65 6e 43 6f 75 6e 74 20 3d 20  int openCount = 
3310: 30 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  0;..        int 
3320: 63 6c 6f 73 65 43 6f 75 6e 74 20 3d 20 30 3b 0d  closeCount = 0;.
3330: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 74 6f 74  .        int tot
3340: 61 6c 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a  alCount = 0;....
3350: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
3360: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65 74  nnectionPool.Get
3370: 43 6f 75 6e 74 73 28 5f 66 69 6c 65 4e 61 6d 65  Counts(_fileName
3380: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
3390: 65 66 20 63 6f 75 6e 74 73 2c 20 72 65 66 20 6f  ef counts, ref o
33a0: 70 65 6e 43 6f 75 6e 74 2c 20 72 65 66 20 63 6c  penCount, ref cl
33b0: 6f 73 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20  oseCount,..     
33c0: 20 20 20 20 20 20 20 72 65 66 20 74 6f 74 61 6c         ref total
33d0: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
33e0: 20 20 20 72 65 74 75 72 6e 20 74 6f 74 61 6c 43     return totalC
33f0: 6f 75 6e 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ount;..    }....
3400: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3410: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 69  rride void SetTi
3420: 6d 65 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f  meout(int nTimeo
3430: 75 74 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  utMS)..    {..  
3440: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
3450: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
3460: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3470: 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  te3_busy_timeout
3480: 28 5f 73 71 6c 2c 20 6e 54 69 6d 65 6f 75 74 4d  (_sql, nTimeoutM
3490: 53 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  S);..      if (n
34a0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
34b0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
34c0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
34d0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
34e0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
34f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3500: 72 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 28  rride bool Step(
3510: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
3520: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
3530: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
3540: 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61  ode n;..      Ra
3550: 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b  ndom rnd = null;
3560: 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74 61  ..      uint sta
3570: 72 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45  rttick = (uint)E
3580: 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43  nvironment.TickC
3590: 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e  ount;..      uin
35a0: 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e  t timeout = (uin
35b0: 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64  t)(stmt._command
35c0: 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74  ._commandTimeout
35d0: 20 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20   * 1000);....   
35e0: 20 20 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d     while (true).
35f0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
3600: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
3610: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
3620: 33 5f 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c  3_step(stmt._sql
3630: 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20  ite_stmt);....  
3640: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
3650: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 52  QLiteErrorCode.R
3660: 6f 77 29 20 72 65 74 75 72 6e 20 74 72 75 65 3b  ow) return true;
3670: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
3680: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
3690: 64 65 2e 44 6f 6e 65 29 20 72 65 74 75 72 6e 20  de.Done) return 
36a0: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
36b0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
36c0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
36d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
36e0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
36f0: 43 6f 64 65 20 72 3b 0d 0a 0d 0a 20 20 20 20 20  Code r;....     
3700: 20 20 20 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72       // An error
3710: 20 6f 63 63 75 72 72 65 64 2c 20 61 74 74 65 6d   occurred, attem
3720: 70 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20  pt to reset the 
3730: 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 66 20 74  statement.  If t
3740: 68 65 20 72 65 73 65 74 20 77 6f 72 6b 65 64 20  he reset worked 
3750: 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20  because the..   
3760: 20 20 20 20 20 20 20 2f 2f 20 73 63 68 65 6d 61         // schema
3770: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 72 65   has changed, re
3780: 2d 74 72 79 20 74 68 65 20 73 74 65 70 20 61 67  -try the step ag
3790: 61 69 6e 2e 20 20 49 66 20 69 74 20 65 72 72 6f  ain.  If it erro
37a0: 72 65 64 20 6f 75 72 20 62 65 63 61 75 73 65 20  red our because 
37b0: 74 68 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20  the database..  
37c0: 20 20 20 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f          // is lo
37d0: 63 6b 65 64 2c 20 74 68 65 6e 20 6b 65 65 70 20  cked, then keep 
37e0: 72 65 74 72 79 69 6e 67 20 75 6e 74 69 6c 20 74  retrying until t
37f0: 68 65 20 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f  he command timeo
3800: 75 74 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20  ut occurs...    
3810: 20 20 20 20 20 20 72 20 3d 20 52 65 73 65 74 28        r = Reset(
3820: 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  stmt);....      
3830: 20 20 20 20 69 66 20 28 72 20 3d 3d 20 53 51 4c      if (r == SQL
3840: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
3850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
3860: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
3870: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
3880: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
3890: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
38a0: 20 28 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72   ((r == SQLiteEr
38b0: 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c  rorCode.Locked |
38c0: 7c 20 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  | r == SQLiteErr
38d0: 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20  orCode.Busy) && 
38e0: 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d  stmt._command !=
38f0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
3900: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3910: 20 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d   // Keep trying.
3920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
3930: 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f  (rnd == null) //
3940: 20 46 69 72 73 74 20 74 69 6d 65 20 77 65 27 76   First time we'v
3950: 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68  e encountered th
3960: 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20  e lock..        
3970: 20 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20        rnd = new 
3980: 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20  Random();....   
3990: 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77           // If w
39a0: 65 27 76 65 20 65 78 63 65 65 64 65 64 20 74 68  e've exceeded th
39b0: 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65  e command's time
39c0: 6f 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64  out, give up and
39d0: 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d   throw an error.
39e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
39f0: 28 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65  ((uint)Environme
3a00: 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73  nt.TickCount - s
3a10: 74 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f  tarttick > timeo
3a20: 75 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ut)..           
3a30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3a40: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
3a50: 74 65 45 78 63 65 70 74 69 6f 6e 28 72 2c 20 47  teException(r, G
3a60: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
3a70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
3a80: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
3a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
3aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  .              /
3ab0: 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65  / Otherwise slee
3ac0: 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61  p for a random a
3ad0: 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70  mount of time up
3ae0: 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20   to 150ms..     
3af0: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
3b00: 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64  Threading.Thread
3b10: 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28  .Sleep(rnd.Next(
3b20: 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20  1, 150));..     
3b30: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3b40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
3b50: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
3b60: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
3b70: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
3b80: 45 72 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28  ErrorCode Reset(
3b90: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
3ba0: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
3bb0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
3bc0: 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  ode n;....#if !S
3bd0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
3be0: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
3bf0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
3c00: 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65  lite3_reset_inte
3c10: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
3c20: 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a  _stmt);..#else..
3c30: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
3c40: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
3c50: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74  lite3_reset(stmt
3c60: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
3c70: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
3c80: 20 2f 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d   // If the schem
3c90: 61 20 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61  a changed, try a
3ca0: 6e 64 20 72 65 2d 70 72 65 70 61 72 65 20 69 74  nd re-prepare it
3cb0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
3cc0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
3cd0: 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20  .Schema)..      
3ce0: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65  {..        // Re
3cf0: 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73  create a dummy s
3d00: 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20  tatement..      
3d10: 20 20 73 74 72 69 6e 67 20 73 74 72 3b 0d 0a 20    string str;.. 
3d20: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
3d30: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6d  LiteStatement tm
3d40: 70 20 3d 20 50 72 65 70 61 72 65 28 6e 75 6c 6c  p = Prepare(null
3d50: 2c 20 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65  , stmt._sqlState
3d60: 6d 65 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e  ment, null, (uin
3d70: 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64  t)(stmt._command
3d80: 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74  ._commandTimeout
3d90: 20 2a 20 31 30 30 30 29 2c 20 6f 75 74 20 73 74   * 1000), out st
3da0: 72 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  r))..        {..
3db0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e            // Fin
3dc0: 61 6c 69 7a 65 20 74 68 65 20 65 78 69 73 74 69  alize the existi
3dd0: 6e 67 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20  ng statement..  
3de0: 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71          stmt._sq
3df0: 6c 69 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73  lite_stmt.Dispos
3e00: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
3e10: 2f 2f 20 52 65 61 73 73 69 67 6e 20 61 20 6e 65  // Reassign a ne
3e20: 77 20 73 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e  w statement poin
3e30: 74 65 72 20 74 6f 20 74 68 65 20 6f 6c 64 20 73  ter to the old s
3e40: 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65  tatement and cle
3e50: 61 72 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  ar the temporary
3e60: 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20   one..          
3e70: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
3e80: 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f  t = tmp._sqlite_
3e90: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  stmt;..         
3ea0: 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d   tmp._sqlite_stm
3eb0: 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  t = null;....   
3ec0: 20 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c         // Reappl
3ed0: 79 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20  y parameters..  
3ee0: 20 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e          stmt.Bin
3ef0: 64 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a  dParameters();..
3f00: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3f10: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
3f20: 45 72 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e 6f 77  ErrorCode.Unknow
3f30: 6e 3b 20 2f 2f 20 52 65 73 65 74 20 77 61 73 20  n; // Reset was 
3f40: 4f 4b 2c 20 77 69 74 68 20 73 63 68 65 6d 61 20  OK, with schema 
3f50: 63 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d 0d  change..      }.
3f60: 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28  .      else if (
3f70: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
3f80: 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e  Code.Locked || n
3f90: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
3fa0: 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20  ode.Busy)..     
3fb0: 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a     return n;....
3fc0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
3fd0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
3fe0: 6b 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  k)..        thro
3ff0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
4000: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
4010: 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
4020: 20 20 20 72 65 74 75 72 6e 20 6e 3b 20 2f 2f 20     return n; // 
4030: 57 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20  We reset OK, no 
4040: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a  schema changes..
4050: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
4060: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
4070: 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72  tring GetLastErr
4080: 6f 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  or()..    {..   
4090: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
40a0: 42 61 73 65 2e 47 65 74 4c 61 73 74 45 72 72 6f  Base.GetLastErro
40b0: 72 28 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a  r(_sql, _sql);..
40c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
40d0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
40e0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 50  QLiteStatement P
40f0: 72 65 70 61 72 65 28 53 51 4c 69 74 65 43 6f 6e  repare(SQLiteCon
4100: 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72  nection cnn, str
4110: 69 6e 67 20 73 74 72 53 71 6c 2c 20 53 51 4c 69  ing strSql, SQLi
4120: 74 65 53 74 61 74 65 6d 65 6e 74 20 70 72 65 76  teStatement prev
4130: 69 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f  ious, uint timeo
4140: 75 74 4d 53 2c 20 6f 75 74 20 73 74 72 69 6e 67  utMS, out string
4150: 20 73 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20 20   strRemain)..   
4160: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 21 53   {..      if (!S
4170: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
4180: 70 74 79 28 73 74 72 53 71 6c 29 29 0d 0a 20 20  pty(strSql))..  
4190: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f      {..        /
41a0: 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f  /..        // NO
41b0: 54 45 3a 20 53 51 4c 69 74 65 20 64 6f 65 73 20  TE: SQLite does 
41c0: 6e 6f 74 20 73 75 70 70 6f 72 74 20 74 68 65 20  not support the 
41d0: 63 6f 6e 63 65 70 74 20 6f 66 20 73 65 70 61 72  concept of separ
41e0: 61 74 65 20 73 63 68 65 6d 61 73 0d 0a 20 20 20  ate schemas..   
41f0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e       //       in
4200: 20 6f 6e 65 20 64 61 74 61 62 61 73 65 3b 20 74   one database; t
4210: 68 65 72 65 66 6f 72 65 2c 20 72 65 6d 6f 76 65  herefore, remove
4220: 20 74 68 65 20 62 61 73 65 20 73 63 68 65 6d 61   the base schema
4230: 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f   name..        /
4240: 2f 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20  /       used to 
4250: 73 6d 6f 6f 74 68 20 69 6e 74 65 67 72 61 74 69  smooth integrati
4260: 6f 6e 20 77 69 74 68 20 74 68 65 20 62 61 73 65  on with the base
4270: 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d   .NET Framework.
4280: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
4290: 20 20 64 61 74 61 20 63 6c 61 73 73 65 73 2e 0d    data classes..
42a0: 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
42b0: 20 20 20 20 20 73 74 72 69 6e 67 20 62 61 73 65       string base
42c0: 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 28 63 6e  SchemaName = (cn
42d0: 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e  n != null) ? cnn
42e0: 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  ._baseSchemaName
42f0: 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   : null;....    
4300: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
4310: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 62 61  IsNullOrEmpty(ba
4320: 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 29 0d 0a  seSchemaName))..
4330: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4340: 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74       strSql = st
4350: 72 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20  rSql.Replace(.. 
4360: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
4370: 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75  ing.Format(Cultu
4380: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
4390: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
43a0: 20 20 20 20 20 20 20 20 22 5b 7b 30 7d 5d 2e 22          "[{0}]."
43b0: 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  , baseSchemaName
43c0: 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29  ), String.Empty)
43d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ;....          s
43e0: 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52  trSql = strSql.R
43f0: 65 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20  eplace(..       
4400: 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
4410: 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f  rmat(CultureInfo
4420: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
4430: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
4440: 20 20 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63    "{0}.", baseSc
4450: 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e  hemaName), Strin
4460: 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20  g.Empty);..     
4470: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
4480: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e  .      SQLiteCon
4490: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
44a0: 67 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  gs =..          
44b0: 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (cnn != null) ? 
44c0: 63 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69  cnn.Flags : SQLi
44d0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
44e0: 73 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20 20  s.Default;....  
44f0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
4500: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
4510: 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61 72  nFlags.LogPrepar
4520: 65 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  e) == SQLiteConn
4530: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50  ectionFlags.LogP
4540: 72 65 70 61 72 65 29 0d 0a 20 20 20 20 20 20 7b  repare)..      {
4550: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
4560: 28 73 74 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c 29  (strSql == null)
4570: 20 7c 7c 20 28 73 74 72 53 71 6c 2e 4c 65 6e 67   || (strSql.Leng
4580: 74 68 20 3d 3d 20 30 29 20 7c 7c 20 28 73 74 72  th == 0) || (str
4590: 53 71 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e 67 74  Sql.Trim().Lengt
45a0: 68 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20 20  h == 0))..      
45b0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
45c0: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 22 50 72  g.LogMessage("Pr
45d0: 65 70 61 72 69 6e 67 20 7b 3c 6e 6f 74 68 69 6e  eparing {<nothin
45e0: 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20 20 20  g>}...");..     
45f0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
4600: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
4610: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
4620: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
4630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4640: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
4650: 65 6e 74 43 75 6c 74 75 72 65 2c 20 22 50 72 65  entCulture, "Pre
4660: 70 61 72 69 6e 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e  paring {{{0}}}..
4670: 2e 22 2c 20 73 74 72 53 71 6c 29 29 3b 0d 0a 20  .", strSql));.. 
4680: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4690: 49 6e 74 50 74 72 20 73 74 6d 74 20 3d 20 49 6e  IntPtr stmt = In
46a0: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
46b0: 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 49    IntPtr ptr = I
46c0: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
46d0: 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d     int len = 0;.
46e0: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
46f0: 6f 72 43 6f 64 65 20 6e 20 3d 20 53 51 4c 69 74  orCode n = SQLit
4700: 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d  eErrorCode.Schem
4710: 61 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72 65  a;..      int re
4720: 74 72 69 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20  tries = 0;..    
4730: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
4740: 54 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20  TF8(strSql);..  
4750: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 64      string typed
4760: 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  efs = null;..   
4770: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
4780: 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a  nt cmd = null;..
4790: 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64        Random rnd
47a0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
47b0: 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d  uint starttick =
47c0: 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65   (uint)Environme
47d0: 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d  nt.TickCount;...
47e0: 0a 20 20 20 20 20 20 47 43 48 61 6e 64 6c 65 20  .      GCHandle 
47f0: 68 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e 64 6c  handle = GCHandl
4800: 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48 61 6e  e.Alloc(b, GCHan
4810: 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64 29 3b  dleType.Pinned);
4820: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
4830: 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41 64 64  sql = handle.Add
4840: 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63 74 28  rOfPinnedObject(
4850: 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  );..      SQLite
4860: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
4870: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  statementHandle 
4880: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 74  = null;..      t
4890: 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ry..      {..   
48a0: 20 20 20 20 20 77 68 69 6c 65 20 28 28 6e 20 3d       while ((n =
48b0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
48c0: 65 2e 53 63 68 65 6d 61 20 7c 7c 20 6e 20 3d 3d  e.Schema || n ==
48d0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
48e0: 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20  .Locked || n == 
48f0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
4900: 42 75 73 79 29 20 26 26 20 72 65 74 72 69 65 73  Busy) && retries
4910: 20 3c 20 33 29 0d 0a 20 20 20 20 20 20 20 20 7b   < 3)..        {
4920: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 72 79 0d  ..          try.
4930: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
4940: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
4950: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
4960: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
4970: 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45   finally /* NOTE
4980: 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29  : Thread.Abort()
4990: 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d   protection. */.
49a0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  .          {..#i
49b0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
49c0: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
49d0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
49e0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
49f0: 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  prepare_interop(
4a00: 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65  _sql, psql, b.Le
4a10: 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20 73 74  ngth - 1, out st
4a20: 6d 74 2c 20 6f 75 74 20 70 74 72 2c 20 6f 75 74  mt, out ptr, out
4a30: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 23   len);..#else..#
4a40: 69 66 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56  if USE_PREPARE_V
4a50: 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  2..            n
4a60: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
4a70: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70  ethods.sqlite3_p
4a80: 72 65 70 61 72 65 5f 76 32 28 5f 73 71 6c 2c 20  repare_v2(_sql, 
4a90: 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  psql, b.Length -
4aa0: 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75   1, out stmt, ou
4ab0: 74 20 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a  t ptr);..#else..
4ac0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
4ad0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4ae0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70  ods.sqlite3_prep
4af0: 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20  are(_sql, psql, 
4b00: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75  b.Length - 1, ou
4b10: 74 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 29  t stmt, out ptr)
4b20: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
4b30: 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b         len = -1;
4b40: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20  ..#endif....#if 
4b50: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
4b60: 26 26 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45  && TRACE_STATEME
4b70: 4e 54 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  NT..            
4b80: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
4b90: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 50  String.Format("P
4ba0: 72 65 70 61 72 65 20 28 7b 30 7d 29 3a 20 7b 31  repare ({0}): {1
4bb0: 7d 22 2c 20 6e 2c 20 73 74 6d 74 29 29 3b 0d 0a  }", n, stmt));..
4bc0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
4bd0: 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20        if ((n == 
4be0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
4bf0: 4f 6b 29 20 26 26 20 28 73 74 6d 74 20 21 3d 20  Ok) && (stmt != 
4c00: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20  IntPtr.Zero)).. 
4c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
4c20: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e  tementHandle = n
4c30: 65 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ew SQLiteStateme
4c40: 6e 74 48 61 6e 64 6c 65 28 5f 73 71 6c 2c 20 73  ntHandle(_sql, s
4c50: 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tmt);..         
4c60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4c70: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
4c80: 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 29  rrorCode.Schema)
4c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
4ca0: 74 72 69 65 73 2b 2b 3b 0d 0a 20 20 20 20 20 20  tries++;..      
4cb0: 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d      else if (n =
4cc0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
4cd0: 65 2e 45 72 72 6f 72 29 0d 0a 20 20 20 20 20 20  e.Error)..      
4ce0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4cf0: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f     if (String.Co
4d00: 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72  mpare(GetLastErr
4d10: 6f 72 28 29 2c 20 22 6e 65 61 72 20 5c 22 54 59  or(), "near \"TY
4d20: 50 45 53 5c 22 3a 20 73 79 6e 74 61 78 20 65 72  PES\": syntax er
4d30: 72 6f 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70  ror", StringComp
4d40: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
4d50: 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d  noreCase) == 0).
4d60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
4d80: 74 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 49  t pos = strSql.I
4d90: 6e 64 65 78 4f 66 28 27 3b 27 29 3b 0d 0a 20 20  ndexOf(';');..  
4da0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4db0: 70 6f 73 20 3d 3d 20 2d 31 29 20 70 6f 73 20 3d  pos == -1) pos =
4dc0: 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d   strSql.Length -
4dd0: 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   1;....         
4de0: 20 20 20 20 20 74 79 70 65 64 65 66 73 20 3d 20       typedefs = 
4df0: 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67  strSql.Substring
4e00: 28 30 2c 20 70 6f 73 20 2b 20 31 29 3b 0d 0a 20  (0, pos + 1);.. 
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
4e20: 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 53 75 62  Sql = strSql.Sub
4e30: 73 74 72 69 6e 67 28 70 6f 73 20 2b 20 31 29 3b  string(pos + 1);
4e40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4e50: 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22    strRemain = ""
4e60: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4e70: 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d     while (cmd ==
4e80: 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e   null && strSql.
4e90: 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20  Length > 0)..   
4ea0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d                cm
4ec0: 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c  d = Prepare(cnn,
4ed0: 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75   strSql, previou
4ee0: 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75  s, timeoutMS, ou
4ef0: 74 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20  t strRemain);.. 
4f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
4f10: 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69  trSql = strRemai
4f20: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
4f30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
4f40: 20 20 20 20 20 69 66 20 28 63 6d 64 20 21 3d 20       if (cmd != 
4f50: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
4f60: 20 20 20 20 20 20 20 63 6d 64 2e 53 65 74 54 79         cmd.SetTy
4f70: 70 65 73 28 74 79 70 65 64 65 66 73 29 3b 0d 0a  pes(typedefs);..
4f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4f90: 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20  return cmd;..   
4fa0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20           }..#if 
4fb0: 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f 34  (NET_35 || NET_4
4fc0: 30 20 7c 7c 20 4e 45 54 5f 34 35 29 20 26 26 20  0 || NET_45) && 
4fd0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
4fe0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
4ff0: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
5000: 28 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61  (_buildingSchema
5010: 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72   == false && Str
5020: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c  ing.Compare(GetL
5030: 61 73 74 45 72 72 6f 72 28 29 2c 20 30 2c 20 22  astError(), 0, "
5040: 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 54  no such table: T
5050: 45 4d 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c 20  EMP.SCHEMA", 0, 
5060: 32 36 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  26, StringCompar
5070: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
5080: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
5090: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
50a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52              strR
50b0: 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 20 20 20  emain = "";..   
50c0: 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c             _buil
50d0: 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 74 72 75  dingSchema = tru
50e0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
50f0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
5100: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5110: 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 53          ISQLiteS
5120: 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 20  chemaExtensions 
5130: 65 78 74 20 3d 20 28 28 49 53 65 72 76 69 63 65  ext = ((IService
5140: 50 72 6f 76 69 64 65 72 29 53 51 4c 69 74 65 46  Provider)SQLiteF
5150: 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65 29  actory.Instance)
5160: 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70 65  .GetService(type
5170: 6f 66 28 49 53 51 4c 69 74 65 53 63 68 65 6d 61  of(ISQLiteSchema
5180: 45 78 74 65 6e 73 69 6f 6e 73 29 29 20 61 73 20  Extensions)) as 
5190: 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74  ISQLiteSchemaExt
51a0: 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20  ensions;....    
51b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
51c0: 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ext != null)..  
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51e0: 65 78 74 2e 42 75 69 6c 64 54 65 6d 70 53 63 68  ext.BuildTempSch
51f0: 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20 20  ema(cnn);....   
5200: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
5210: 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20  le (cmd == null 
5220: 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68  && strSql.Length
5230: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
5240: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5250: 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 20              cmd 
5260: 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73  = Prepare(cnn, s
5270: 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c  trSql, previous,
5280: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20   timeoutMS, out 
5290: 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20  strRemain);..   
52a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
52b0: 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69  trSql = strRemai
52c0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
52d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
52e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
52f0: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  cmd;..          
5300: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
5310: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
5320: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
5340: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d  buildingSchema =
5350: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
5360: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
5370: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
5380: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
5390: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
53a0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
53b0: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
53c0: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
53d0: 43 6f 64 65 2e 42 75 73 79 29 20 2f 2f 20 4c 6f  Code.Busy) // Lo
53e0: 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61 20  cked -- delay a 
53f0: 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65 66  small amount bef
5400: 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20 20  ore retrying..  
5410: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5420: 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74         // Keep t
5430: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
5440: 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75     if (rnd == nu
5450: 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d  ll) // First tim
5460: 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65  e we've encounte
5470: 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20  red the lock..  
5480: 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64 20              rnd 
5490: 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d  = new Random();.
54a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
54b0: 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65 65  / If we've excee
54c0: 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27  ded the command'
54d0: 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20  s timeout, give 
54e0: 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20  up and throw an 
54f0: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
5500: 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76     if ((uint)Env
5510: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
5520: 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e  nt - starttick >
5530: 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20   timeoutMS)..   
5540: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5550: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
5560: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
5570: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
5580: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
5590: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
55a0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
55b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
55c0: 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72 77         // Otherw
55d0: 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61 20  ise sleep for a 
55e0: 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66  random amount of
55f0: 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30 6d   time up to 150m
5600: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
5610: 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e   System.Threadin
5620: 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28 72  g.Thread.Sleep(r
5630: 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29 29  nd.Next(1, 150))
5640: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
5650: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
5660: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
5670: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
5680: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
5690: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
56a0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
56b0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
56c0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 52 65 6d  ..        strRem
56d0: 61 69 6e 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ain = UTF8ToStri
56e0: 6e 67 28 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a 0d  ng(ptr, len);...
56f0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61  .        if (sta
5700: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20  tementHandle != 
5710: 6e 75 6c 6c 29 20 63 6d 64 20 3d 20 6e 65 77 20  null) cmd = new 
5720: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 28  SQLiteStatement(
5730: 74 68 69 73 2c 20 66 6c 61 67 73 2c 20 73 74 61  this, flags, sta
5740: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74  tementHandle, st
5750: 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30  rSql.Substring(0
5760: 2c 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  , strSql.Length 
5770: 2d 20 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67  - strRemain.Leng
5780: 74 68 29 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d  th), previous);.
5790: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
57a0: 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d  n cmd;..      }.
57b0: 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a  .      finally..
57c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
57d0: 20 68 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d   handle.Free();.
57e0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
57f0: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
5800: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67   static void Log
5810: 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65  Bind(SQLiteState
5820: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
5830: 65 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  e, int index).. 
5840: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
5850: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
5860: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
5870: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
5880: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
5890: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
58a0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
58b0: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
58c0: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
58d0: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
58e0: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
58f0: 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e 2e   #{1} as NULL...
5900: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
5910: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
5920: 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  dex));..    }...
5930: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
5940: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
5950: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
5960: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
5970: 20 69 6e 74 20 69 6e 64 65 78 2c 20 56 61 6c 75   int index, Valu
5980: 65 54 79 70 65 20 76 61 6c 75 65 29 0d 0a 20 20  eType value)..  
5990: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
59a0: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
59b0: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
59c0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
59d0: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
59e0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
59f0: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
5a00: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
5a10: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74  ramter #{1} as t
5a20: 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c  ype {2} with val
5a30: 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d  ue {{{3}}}...",.
5a40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e  .            han
5a50: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
5a60: 2c 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28  , value.GetType(
5a70: 29 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20  ), value));..   
5a80: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74   }....    privat
5a90: 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
5aa0: 46 6f 72 6d 61 74 44 61 74 65 54 69 6d 65 28 44  FormatDateTime(D
5ab0: 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a  ateTime value)..
5ac0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
5ad0: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73  tringBuilder res
5ae0: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
5af0: 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20  Builder();....  
5b00: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
5b10: 65 6e 64 28 76 61 6c 75 65 2e 54 6f 53 74 72 69  end(value.ToStri
5b20: 6e 67 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48  ng("yyyy-MM-ddTH
5b30: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b  H:mm:ss.FFFFFFFK
5b40: 22 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  "));..        re
5b50: 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29  sult.Append(' ')
5b60: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c  ;..        resul
5b70: 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b  t.Append(value.K
5b80: 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  ind);..        r
5b90: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27  esult.Append(' '
5ba0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
5bb0: 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e  lt.Append(value.
5bc0: 54 69 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  Ticks);....     
5bd0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
5be0: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
5bf0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
5c00: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
5c10: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
5c20: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
5c30: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
5c40: 2c 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65  , DateTime value
5c50: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5c60: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
5c70: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
5c80: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
5c90: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
5ca0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
5cb0: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
5cc0: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
5cd0: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
5ce0: 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74   as type {2} wit
5cf0: 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e  h value {{{3}}}.
5d00: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
5d10: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
5d20: 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61  index, typeof(Da
5d30: 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44  teTime), FormatD
5d40: 61 74 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29  ateTime(value)))
5d50: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5d60: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
5d70: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
5d80: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
5d90: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
5da0: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61  index, string va
5db0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
5dc0: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
5dd0: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
5de0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
5df0: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
5e00: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
5e10: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  (..            "
5e20: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
5e30: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
5e40: 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20  {1} as type {2} 
5e50: 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d  with value {{{3}
5e60: 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  }}...",..       
5e70: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
5e80: 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66  r, index, typeof
5e90: 28 53 74 72 69 6e 67 29 2c 20 28 76 61 6c 75 65  (String), (value
5ea0: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75   != null) ? valu
5eb0: 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d  e : "<null>"));.
5ec0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
5ed0: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
5ee0: 69 6e 67 20 54 6f 48 65 78 61 64 65 63 69 6d 61  ing ToHexadecima
5ef0: 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20  lString(..      
5f00: 20 20 62 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a    byte[] array..
5f10: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
5f20: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72  ..        if (ar
5f30: 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ray == null)..  
5f40: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5f50: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
5f60: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
5f70: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
5f80: 69 6e 67 42 75 69 6c 64 65 72 28 61 72 72 61 79  ingBuilder(array
5f90: 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d  .Length * 2);...
5fa0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  .        int len
5fb0: 67 74 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67  gth = array.Leng
5fc0: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  th;....        f
5fd0: 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
5fe0: 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74  0; index < lengt
5ff0: 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20  h; index++)..   
6000: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
6010: 41 70 70 65 6e 64 28 61 72 72 61 79 5b 69 6e 64  Append(array[ind
6020: 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78 32  ex].ToString("x2
6030: 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "));....        
6040: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f  return result.To
6050: 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d  String();..    }
6060: 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ....    protecte
6070: 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f  d static void Lo
6080: 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74  gBind(SQLiteStat
6090: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
60a0: 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62  le, int index, b
60b0: 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20  yte[] value)..  
60c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
60d0: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
60e0: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
60f0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
6100: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
6110: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
6120: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
6130: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
6140: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74  ramter #{1} as t
6150: 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c  ype {2} with val
6160: 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d  ue {{{3}}}...",.
6170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e  .            han
6180: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
6190: 2c 20 74 79 70 65 6f 66 28 42 79 74 65 5b 5d 29  , typeof(Byte[])
61a0: 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c  , (value != null
61b0: 29 20 3f 20 54 6f 48 65 78 61 64 65 63 69 6d 61  ) ? ToHexadecima
61c0: 6c 53 74 72 69 6e 67 28 76 61 6c 75 65 29 20 3a  lString(value) :
61d0: 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20   "<null>"));..  
61e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
61f0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
6200: 64 20 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53 51  d Bind_Double(SQ
6210: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
6220: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
6230: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
6240: 20 69 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75 62   int index, doub
6250: 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  le value)..    {
6260: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
6270: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
6280: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
6290: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20  qlite_stmt;.... 
62a0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
62b0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
62c0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
62d0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
62e0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
62f0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
6300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
6310: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
6320: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
6330: 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50       }....#if !P
6340: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
6350: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
6360: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
6370: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
6380: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6390: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61  3_bind_double(ha
63a0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
63b0: 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
63c0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
63d0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
63e0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
63f0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
6400: 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c  lite3_bind_doubl
6410: 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  e_interop(handle
6420: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
6430: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
6440: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
6450: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
6460: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
6470: 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  f..        if (n
6480: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
6490: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
64a0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
64b0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
64c0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
64d0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
64e0: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
64f0: 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74  Int32(SQLiteStat
6500: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
6510: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6520: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
6530: 65 78 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a  ex, int value)..
6540: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
6550: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
6560: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
6570: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
6580: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
6590: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
65a0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
65b0: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
65c0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
65d0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
65e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
65f0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
6600: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
6610: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
6620: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
6630: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
6640: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6650: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
6660: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
6670: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
6680: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
6690: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
66a0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
66b0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
66c0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
66d0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
66e0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
66f0: 42 69 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c 69  Bind_UInt32(SQLi
6700: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
6710: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
6720: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
6730: 6e 74 20 69 6e 64 65 78 2c 20 75 69 6e 74 20 76  nt index, uint v
6740: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
6750: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
6760: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
6770: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
6780: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21  e_stmt;....#if !
6790: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
67a0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
67b0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
67c0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
67d0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
67e0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
67f0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
6800: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
6810: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
6820: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
6830: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
6840: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
6850: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
6860: 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20  rCode n;....    
6870: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
6880: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6890: 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74 33  nFlags.BindUInt3
68a0: 32 41 73 49 6e 74 36 34 29 20 3d 3d 20 53 51 4c  2AsInt64) == SQL
68b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
68c0: 67 73 2e 42 69 6e 64 55 49 6e 74 33 32 41 73 49  gs.BindUInt32AsI
68d0: 6e 74 36 34 29 0d 0a 20 20 20 20 20 20 20 20 7b  nt64)..        {
68e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f  ..            lo
68f0: 6e 67 20 76 61 6c 75 65 32 20 3d 20 76 61 6c 75  ng value2 = valu
6900: 65 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  e;....#if !PLATF
6910: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
6920: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
6930: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
6940: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6950: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e  3_bind_int64(han
6960: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
6970: 65 32 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  e2);..#elif !SQL
6980: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
6990: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
69a0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
69b0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
69c0: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
69d0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
69e0: 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 73 65 0d  value2);..#else.
69f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
6a00: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
6a10: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
6a20: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
6a30: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
6a40: 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  se..        {.. 
6a50: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
6a60: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6a70: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
6a80: 75 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64  uint(handle, ind
6a90: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
6aa0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6ab0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
6ac0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
6ad0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
6ae0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
6af0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
6b00: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
6b10: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
6b20: 42 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74  Bind_Int64(SQLit
6b30: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
6b40: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6b50: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
6b60: 74 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61  t index, long va
6b70: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
6b80: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
6b90: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
6ba0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
6bb0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
6bc0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
6bd0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
6be0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
6bf0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6c00: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
6c10: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6c20: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
6c30: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
6c40: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
6c50: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
6c60: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
6c70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
6c80: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
6c90: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6ca0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
6cb0: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
6cc0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
6cd0: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
6ce0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
6cf0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
6d00: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
6d10: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6d20: 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72  bind_int64_inter
6d30: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
6d40: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
6d50: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
6d60: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
6d70: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
6d80: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
6d90: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
6da0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
6db0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
6dc0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
6dd0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
6de0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
6df0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
6e00: 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 36 34 28  oid Bind_UInt64(
6e10: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
6e20: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
6e30: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
6e40: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 6c  s, int index, ul
6e50: 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ong value)..    
6e60: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
6e70: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
6e80: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
6e90: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
6ea0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
6eb0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
6ec0: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
6ed0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
6ee0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
6ef0: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
6f00: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
6f10: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
6f20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
6f30: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
6f40: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
6f50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6f60: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
6f70: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
6f80: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
6f90: 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 28 68  e3_bind_uint64(h
6fa0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
6fb0: 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
6fc0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
6fd0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
6fe0: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
6ff0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7000: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74  qlite3_bind_uint
7010: 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  64_interop(handl
7020: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
7030: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
7040: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
7050: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
7060: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
7070: 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  if..        if (
7080: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
7090: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
70a0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
70b0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
70c0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
70d0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
70e0: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
70f0: 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74  _Text(SQLiteStat
7100: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
7110: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7120: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
7130: 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ex, string value
7140: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7150: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
7160: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
7170: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
7180: 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  mt;....#if !PLAT
7190: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
71a0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
71b0: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
71c0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
71d0: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
71e0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
71f0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
7200: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7210: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
7220: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
7230: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
7240: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
7250: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
7260: 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 23  TF8(value);....#
7270: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
7280: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
7290: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
72a0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
72b0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
72c0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
72d0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
72e0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
72f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
7300: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
7310: 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20  ex, b);..       
7320: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
7330: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
7340: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
7350: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
7360: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
7370: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
7380: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
7390: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
73a0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
73b0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
73c0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
73d0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
73e0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
73f0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
7400: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
7410: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74  de void Bind_Dat
7420: 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eTime(SQLiteStat
7430: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
7440: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7450: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
7460: 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29  ex, DateTime dt)
7470: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
7480: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
7490: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
74a0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
74b0: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
74c0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
74d0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
74e0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
74f0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7500: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
7510: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7520: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
7530: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7540: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
7550: 6c 65 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d  le, index, dt);.
7560: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
7570: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 77  if....        sw
7580: 69 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46  itch (_datetimeF
7590: 6f 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20  ormat)..        
75a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
75b0: 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f  ase SQLiteDateFo
75c0: 72 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20  rmats.Ticks:..  
75d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
75e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
75f0: 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20       long value 
7600: 3d 20 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 23  = dt.Ticks;....#
7610: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
7620: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
7630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7640: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
7650: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7660: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
7670: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7680: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
7690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
76a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76c0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
76d0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
76e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
76f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
7710: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
7720: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
7730: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
7740: 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c  nd_int64(handle,
7750: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
7760: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
7770: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
7780: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
7790: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
77a0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
77b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
77c0: 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  d_int64_interop(
77d0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
77e0: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
77f0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
7800: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
7810: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
7820: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
7830: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
7840: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
7850: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
7860: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
7870: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
7880: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
7890: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
78a0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
78b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
78c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
78d0: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
78e0: 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79  ormats.JulianDay
78f0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
7900: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7910: 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65            double
7920: 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69 61   value = ToJulia
7930: 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 23 69 66  nDay(dt);....#if
7940: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
7950: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
7960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7970: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
7980: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7990: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
79a0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
79b0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
79c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
79e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
79f0: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
7a00: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7a30: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
7a40: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
7a50: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7a60: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
7a70: 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20  _double(handle, 
7a80: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
7a90: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
7aa0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
7ac0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
7ad0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7ae0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
7af0: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
7b00: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
7b10: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
7b20: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
7b30: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
7b40: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
7b50: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
7b60: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
7b70: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
7b80: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
7b90: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
7ba0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
7bb0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
7bc0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
7bd0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
7be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7bf0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7c00: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
7c10: 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68  ormats.UnixEpoch
7c20: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
7c30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7c40: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76            long v
7c50: 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54  alue = Convert.T
7c60: 6f 49 6e 74 36 34 28 64 74 2e 53 75 62 74 72 61  oInt64(dt.Subtra
7c70: 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f  ct(UnixEpoch).To
7c80: 74 61 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a  talSeconds);....
7c90: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
7ca0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
7cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cc0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
7cd0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7ce0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
7cf0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
7d00: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
7d10: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7d20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d40: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
7d50: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
7d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7d70: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
7d90: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
7da0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7db0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
7dc0: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
7dd0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
7de0: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
7df0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
7e10: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
7e20: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
7e30: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
7e40: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
7e50: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
7e60: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
7e70: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
7e80: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
7e90: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
7ea0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
7eb0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
7ec0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
7ed0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
7ee0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
7ef0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
7f00: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
7f10: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
7f20: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
7f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7f40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
7f50: 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
7f60: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f80: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
7f90: 54 46 38 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20  TF8(dt);....#if 
7fa0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
7fb0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
7fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fd0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
7fe0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7ff0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
8000: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
8010: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
8020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8030: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f                Lo
8050: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
8060: 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20  dex, b);..      
8070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
8080: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
8090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
80a0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
80b0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
80c0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
80d0: 69 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c  ind_text(handle,
80e0: 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e   index, b, b.Len
80f0: 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72  gth - 1, (IntPtr
8100: 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20  )(-1));..       
8110: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
8120: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
8130: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
8140: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
8150: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
8160: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
8170: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
8180: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ak;..           
8190: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
81a0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
81b0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
81c0: 65 20 76 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62  e void Bind_Blob
81d0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
81e0: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
81f0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
8200: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62  gs, int index, b
8210: 79 74 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29 0d  yte[] blobData).
8220: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
8230: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
8240: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
8250: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8260: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
8270: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
8280: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
8290: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
82a0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
82b0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
82c0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
82d0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
82e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
82f0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
8300: 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61  e, index, blobDa
8310: 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ta);..        }.
8320: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
8330: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
8340: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
8350: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8360: 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 68 61 6e  e3_bind_blob(han
8370: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62  dle, index, blob
8380: 44 61 74 61 2c 20 62 6c 6f 62 44 61 74 61 2e 4c  Data, blobData.L
8390: 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28  ength, (IntPtr)(
83a0: 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  -1));..        i
83b0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
83c0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
83d0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
83e0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
83f0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
8400: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
8410: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
8420: 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65 53  ind_Null(SQLiteS
8430: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
8440: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
8450: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
8460: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
8470: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
8480: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
8490: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
84a0: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
84b0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
84c0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
84d0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
84e0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
84f0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
8500: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
8510: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
8520: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
8530: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
8540: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29  d(handle, index)
8550: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
8560: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
8570: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
8580: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
8590: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
85a0: 62 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65  bind_null(handle
85b0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
85c0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
85d0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
85e0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
85f0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
8600: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
8610: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
8620: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
8630: 74 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e  t Bind_ParamCoun
8640: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
8650: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
8660: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
8670: 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ags)..    {..   
8680: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
8690: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
86a0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
86b0: 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20  _stmt;..        
86c0: 69 6e 74 20 76 61 6c 75 65 20 3d 20 55 6e 73 61  int value = Unsa
86d0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
86e0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
86f0: 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 68 61 6e  ameter_count(han
8700: 64 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dle);....       
8710: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
8720: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
8730: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
8740: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8750: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
8760: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8770: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
8780: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
8790: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
87a0: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
87b0: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
87c0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
87d0: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
87e0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
87f0: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
8800: 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74        "Statement
8810: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 63 6f   {0} paramter co
8820: 75 6e 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20  unt is {1}.",.. 
8830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
8840: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c  andleIntPtr, val
8850: 75 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ue));..        }
8860: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
8870: 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d  rn value;..    }
8880: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
8890: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
88a0: 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28   Bind_ParamName(
88b0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
88c0: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
88d0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
88e0: 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  s, int index).. 
88f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
8900: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
8910: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
8920: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
8930: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
8940: 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  name;....#if !SQ
8950: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
8960: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d         int len;.
8970: 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20  .        name = 
8980: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
8990: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
89a0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
89b0: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f 69 6e 74  rameter_name_int
89c0: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
89d0: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
89e0: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
89f0: 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54      name = UTF8T
8a00: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
8a10: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
8a20: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
8a30: 65 72 5f 6e 61 6d 65 28 68 61 6e 64 6c 65 2c 20  er_name(handle, 
8a40: 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65  index), -1);..#e
8a50: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
8a60: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
8a70: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
8a80: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
8a90: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
8aa0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
8ab0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8ac0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
8ad0: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
8ae0: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
8af0: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
8b00: 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46  Message(String.F
8b10: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
8b20: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
8b30: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
8b40: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
8b50: 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20       "Statement 
8b60: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31  {0} paramter #{1
8b70: 7d 20 6e 61 6d 65 20 69 73 20 7b 7b 7b 32 7d 7d  } name is {{{2}}
8b80: 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
8b90: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
8ba0: 74 72 2c 20 69 6e 64 65 78 2c 20 6e 61 6d 65 29  tr, index, name)
8bb0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
8bc0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
8bd0: 6e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  name;..    }....
8be0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
8bf0: 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50  rride int Bind_P
8c00: 61 72 61 6d 49 6e 64 65 78 28 53 51 4c 69 74 65  aramIndex(SQLite
8c10: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
8c20: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8c30: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 73 74 72  Flags flags, str
8c40: 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65 29 0d 0a  ing paramName)..
8c50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
8c60: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
8c70: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
8c80: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
8c90: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e  ..        int in
8ca0: 64 65 78 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  dex = UnsafeNati
8cb0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
8cc0: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
8cd0: 5f 69 6e 64 65 78 28 68 61 6e 64 6c 65 2c 20 54  _index(handle, T
8ce0: 6f 55 54 46 38 28 70 61 72 61 6d 4e 61 6d 65 29  oUTF8(paramName)
8cf0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
8d00: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
8d10: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
8d20: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
8d30: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
8d40: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
8d50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8d60: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
8d70: 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65  eIntPtr = handle
8d80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8d90: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
8da0: 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72  ssage(String.For
8db0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
8dc0: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
8dd0: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
8de0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8df0: 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30     "Statement {0
8e00: 7d 20 70 61 72 61 6d 74 65 72 20 69 6e 64 65 78  } paramter index
8e10: 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d 7d   of name {{{1}}}
8e20: 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20 20   is #{2}.",..   
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e               han
8e40: 64 6c 65 49 6e 74 50 74 72 2c 20 70 61 72 61 6d  dleIntPtr, param
8e50: 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  Name, index));..
8e60: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8e70: 20 20 20 20 20 72 65 74 75 72 6e 20 69 6e 64 65       return inde
8e80: 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  x;..    }....   
8e90: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
8ea0: 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75  de int ColumnCou
8eb0: 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nt(SQLiteStateme
8ec0: 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d  nt stmt)..    {.
8ed0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
8ee0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
8ef0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
8f00: 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71 6c  _count(stmt._sql
8f10: 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20  ite_stmt);..    
8f20: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
8f30: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
8f40: 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c  g ColumnName(SQL
8f50: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
8f60: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
8f70: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
8f80: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
8f90: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
8fa0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
8fb0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
8fc0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
8fd0: 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e  3_column_name_in
8fe0: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
8ff0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
9000: 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  out len), len);.
9010: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
9020: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
9030: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
9040: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
9050: 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f  lumn_name(stmt._
9060: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
9070: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
9080: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
9090: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
90a0: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 43  e TypeAffinity C
90b0: 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 53 51  olumnAffinity(SQ
90c0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
90d0: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
90e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
90f0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
9100: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9110: 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d 74  column_type(stmt
9120: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
9130: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ndex);..    }...
9140: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
9150: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f  erride string Co
9160: 6c 75 6d 6e 54 79 70 65 28 53 51 4c 69 74 65 53  lumnType(SQLiteS
9170: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
9180: 6e 74 20 69 6e 64 65 78 2c 20 6f 75 74 20 54 79  nt index, out Ty
9190: 70 65 41 66 66 69 6e 69 74 79 20 6e 41 66 66 69  peAffinity nAffi
91a0: 6e 69 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nity)..    {..  
91b0: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69      int len;..#i
91c0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
91d0: 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  RD..      IntPtr
91e0: 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   p = UnsafeNativ
91f0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9200: 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
9210: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
9220: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
9230: 78 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23 65  x, out len);..#e
9240: 6c 73 65 0d 0a 20 20 20 20 20 20 6c 65 6e 20 3d  lse..      len =
9250: 20 2d 31 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50   -1;..      IntP
9260: 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  tr p = UnsafeNat
9270: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9280: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
9290: 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  pe(stmt._sqlite_
92a0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23  stmt, index);..#
92b0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 6e 41 66  endif..      nAf
92c0: 66 69 6e 69 74 79 20 3d 20 43 6f 6c 75 6d 6e 41  finity = ColumnA
92d0: 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e  ffinity(stmt, in
92e0: 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  dex);....      i
92f0: 66 20 28 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a  f (p != IntPtr.Z
9300: 65 72 6f 29 20 72 65 74 75 72 6e 20 55 54 46 38  ero) return UTF8
9310: 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29  ToString(p, len)
9320: 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  ;..      else.. 
9330: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9340: 73 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74  string[] ar = st
9350: 6d 74 2e 54 79 70 65 44 65 66 69 6e 69 74 69 6f  mt.TypeDefinitio
9360: 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ns;..        if 
9370: 28 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  (ar != null)..  
9380: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9390: 20 20 20 69 66 20 28 69 6e 64 65 78 20 3c 20 61     if (index < a
93a0: 72 2e 4c 65 6e 67 74 68 20 26 26 20 61 72 5b 69  r.Length && ar[i
93b0: 6e 64 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ndex] != null)..
93c0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
93d0: 72 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20  rn ar[index];.. 
93e0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
93f0: 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
9400: 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  Empty;....      
9410: 20 20 2f 2f 73 77 69 74 63 68 20 28 6e 41 66 66    //switch (nAff
9420: 69 6e 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20  inity)..        
9430: 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  //{..        // 
9440: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
9450: 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20  ty.Int64:..     
9460: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
9470: 22 42 49 47 49 4e 54 22 3b 0d 0a 20 20 20 20 20  "BIGINT";..     
9480: 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65     //  case Type
9490: 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a  Affinity.Double:
94a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
94b0: 72 65 74 75 72 6e 20 22 44 4f 55 42 4c 45 22 3b  return "DOUBLE";
94c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61  ..        //  ca
94d0: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
94e0: 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 2f  Blob:..        /
94f0: 2f 20 20 20 20 72 65 74 75 72 6e 20 22 42 4c 4f  /    return "BLO
9500: 42 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  B";..        // 
9510: 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
9520: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
9530: 22 54 45 58 54 22 3b 0d 0a 20 20 20 20 20 20 20  "TEXT";..       
9540: 20 2f 2f 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20   //}..      }.. 
9550: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
9560: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
9570: 74 20 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51  t ColumnIndex(SQ
9580: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
9590: 6d 74 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d  mt, string colum
95a0: 6e 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  nName)..    {.. 
95b0: 20 20 20 20 20 69 6e 74 20 78 20 3d 20 43 6f 6c       int x = Col
95c0: 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d  umnCount(stmt);.
95d0: 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e  ...      for (in
95e0: 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20  t n = 0; n < x; 
95f0: 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  n++)..      {.. 
9600: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
9610: 67 2e 43 6f 6d 70 61 72 65 28 63 6f 6c 75 6d 6e  g.Compare(column
9620: 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65  Name, ColumnName
9630: 28 73 74 6d 74 2c 20 6e 29 2c 20 53 74 72 69 6e  (stmt, n), Strin
9640: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
9650: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
9660: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
9670: 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20  return n;..     
9680: 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   }..      return
9690: 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   -1;..    }.... 
96a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
96b0: 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75  ride string Colu
96c0: 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53  mnOriginalName(S
96d0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
96e0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
96f0: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
9700: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
9710: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20      int len;..  
9720: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
9730: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
9740: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9750: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69  te3_column_origi
9760: 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  n_name_interop(s
9770: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
9780: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e  , index, out len
9790: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
97a0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
97b0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
97c0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
97d0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
97e0: 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f  igin_name(stmt._
97f0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
9800: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
9810: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
9820: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
9830: 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 44  e string ColumnD
9840: 61 74 61 62 61 73 65 4e 61 6d 65 28 53 51 4c 69  atabaseName(SQLi
9850: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
9860: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
9870: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
9880: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
9890: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
98a0: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
98b0: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
98c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
98d0: 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
98e0: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74  _name_interop(st
98f0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
9900: 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29   index, out len)
9910: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
9920: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
9930: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
9940: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9950: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
9960: 61 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74 2e  abase_name(stmt.
9970: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
9980: 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
9990: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
99a0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
99b0: 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
99c0: 54 61 62 6c 65 4e 61 6d 65 28 53 51 4c 69 74 65  TableName(SQLite
99d0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
99e0: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
99f0: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
9a00: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
9a10: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72  nt len;..      r
9a20: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
9a30: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
9a40: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
9a50: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
9a60: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
9a70: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
9a80: 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e  x, out len), len
9a90: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
9aa0: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
9ab0: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
9ac0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9ad0: 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
9ae0: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
9af0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
9b00: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
9b10: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
9b20: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
9b30: 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 73  ColumnMetaData(s
9b40: 74 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c 20  tring dataBase, 
9b50: 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74  string table, st
9b60: 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74  ring column, out
9b70: 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70 65   string dataType
9b80: 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c  , out string col
9b90: 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20 6f 75  lateSequence, ou
9ba0: 74 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20  t bool notNull, 
9bb0: 6f 75 74 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79  out bool primary
9bc0: 4b 65 79 2c 20 6f 75 74 20 62 6f 6f 6c 20 61 75  Key, out bool au
9bd0: 74 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20 20  toIncrement)..  
9be0: 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74    {..      IntPt
9bf0: 72 20 64 61 74 61 54 79 70 65 50 74 72 3b 0d 0a  r dataTypePtr;..
9c00: 20 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c        IntPtr col
9c10: 6c 53 65 71 50 74 72 3b 0d 0a 20 20 20 20 20 20  lSeqPtr;..      
9c20: 69 6e 74 20 6e 6e 6f 74 4e 75 6c 6c 3b 0d 0a 20  int nnotNull;.. 
9c30: 20 20 20 20 20 69 6e 74 20 6e 70 72 69 6d 61 72       int nprimar
9c40: 79 4b 65 79 3b 0d 0a 20 20 20 20 20 20 69 6e 74  yKey;..      int
9c50: 20 6e 61 75 74 6f 49 6e 63 3b 0d 0a 20 20 20 20   nautoInc;..    
9c60: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
9c70: 65 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  e n;..      int 
9c80: 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e  dtLen;..      in
9c90: 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20  t csLen;....#if 
9ca0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
9cb0: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
9cc0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9cd0: 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f  sqlite3_table_co
9ce0: 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 5f 69 6e  lumn_metadata_in
9cf0: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
9d00: 46 38 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f  F8(dataBase), To
9d10: 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55  UTF8(table), ToU
9d20: 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74  TF8(column), out
9d30: 20 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f 75   dataTypePtr, ou
9d40: 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75  t collSeqPtr, ou
9d50: 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20  t nnotNull, out 
9d60: 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74  nprimaryKey, out
9d70: 20 6e 61 75 74 6f 49 6e 63 2c 20 6f 75 74 20 64   nautoInc, out d
9d80: 74 4c 65 6e 2c 20 6f 75 74 20 63 73 4c 65 6e 29  tLen, out csLen)
9d90: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
9da0: 64 74 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20  dtLen = -1;..   
9db0: 20 20 20 63 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a     csLen = -1;..
9dc0: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
9dd0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9de0: 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f  sqlite3_table_co
9df0: 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 5f 73  lumn_metadata(_s
9e00: 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42  ql, ToUTF8(dataB
9e10: 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62  ase), ToUTF8(tab
9e20: 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75  le), ToUTF8(colu
9e30: 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79 70  mn), out dataTyp
9e40: 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65  ePtr, out collSe
9e50: 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75  qPtr, out nnotNu
9e60: 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72 79  ll, out nprimary
9e70: 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e  Key, out nautoIn
9e80: 63 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  c);..#endif..   
9e90: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
9ea0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
9eb0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
9ec0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
9ed0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
9ee0: 0a 20 20 20 20 20 20 64 61 74 61 54 79 70 65 20  .      dataType 
9ef0: 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 64  = UTF8ToString(d
9f00: 61 74 61 54 79 70 65 50 74 72 2c 20 64 74 4c 65  ataTypePtr, dtLe
9f10: 6e 29 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61  n);..      colla
9f20: 74 65 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46  teSequence = UTF
9f30: 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 53 65  8ToString(collSe
9f40: 71 50 74 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d  qPtr, csLen);...
9f50: 0a 20 20 20 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d  .      notNull =
9f60: 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29   (nnotNull == 1)
9f70: 3b 0d 0a 20 20 20 20 20 20 70 72 69 6d 61 72 79  ;..      primary
9f80: 4b 65 79 20 3d 20 28 6e 70 72 69 6d 61 72 79 4b  Key = (nprimaryK
9f90: 65 79 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20  ey == 1);..     
9fa0: 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20 3d   autoIncrement =
9fb0: 20 28 6e 61 75 74 6f 49 6e 63 20 3d 3d 20 31 29   (nautoInc == 1)
9fc0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9fd0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
9fe0: 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62  e double GetDoub
9ff0: 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  le(SQLiteStateme
a000: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
a010: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
a020: 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d    double value;.
a030: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
a040: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
a050: 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55  .      value = U
a060: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
a070: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
a080: 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73  n_double(stmt._s
a090: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
a0a0: 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  x);..#elif !SQLI
a0b0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
a0c0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
a0d0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
a0e0: 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74  olumn_double_int
a0f0: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
a100: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
a110: 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ut value);..#els
a120: 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
a130: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
a140: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
a150: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74  endif..      ret
a160: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
a170: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
a180: 6c 20 6f 76 65 72 72 69 64 65 20 73 62 79 74 65  l override sbyte
a190: 20 47 65 74 53 42 79 74 65 28 53 51 4c 69 74 65   GetSByte(SQLite
a1a0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
a1b0: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
a1c0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
a1d0: 75 6e 63 68 65 63 6b 65 64 28 28 73 62 79 74 65  unchecked((sbyte
a1e0: 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  )(GetInt32(stmt,
a1f0: 20 69 6e 64 65 78 29 20 26 20 62 79 74 65 2e 4d   index) & byte.M
a200: 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  axValue));..    
a210: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
a220: 6c 20 6f 76 65 72 72 69 64 65 20 62 79 74 65 20  l override byte 
a230: 47 65 74 42 79 74 65 28 53 51 4c 69 74 65 53 74  GetByte(SQLiteSt
a240: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
a250: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
a260: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e  .      return un
a270: 63 68 65 63 6b 65 64 28 28 62 79 74 65 29 28 47  checked((byte)(G
a280: 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
a290: 64 65 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56  dex) & byte.MaxV
a2a0: 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  alue));..    }..
a2b0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
a2c0: 76 65 72 72 69 64 65 20 73 68 6f 72 74 20 47 65  verride short Ge
a2d0: 74 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61  tInt16(SQLiteSta
a2e0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
a2f0: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
a300: 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63        return unc
a310: 68 65 63 6b 65 64 28 28 73 68 6f 72 74 29 28 47  hecked((short)(G
a320: 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
a330: 64 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61  dex) & ushort.Ma
a340: 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d  xValue));..    }
a350: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
a360: 20 6f 76 65 72 72 69 64 65 20 75 73 68 6f 72 74   override ushort
a370: 20 47 65 74 55 49 6e 74 31 36 28 53 51 4c 69 74   GetUInt16(SQLit
a380: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
a390: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
a3a0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
a3b0: 20 75 6e 63 68 65 63 6b 65 64 28 28 75 73 68 6f   unchecked((usho
a3c0: 72 74 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d  rt)(GetInt32(stm
a3d0: 74 2c 20 69 6e 64 65 78 29 20 26 20 75 73 68 6f  t, index) & usho
a3e0: 72 74 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a  rt.MaxValue));..
a3f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
a400: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
a410: 6e 74 20 47 65 74 49 6e 74 33 32 28 53 51 4c 69  nt GetInt32(SQLi
a420: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
a430: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
a440: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
a450: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
a460: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
a470: 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f 73  lumn_int(stmt._s
a480: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
a490: 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  x);..    }....  
a4a0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
a4b0: 69 64 65 20 75 69 6e 74 20 47 65 74 55 49 6e 74  ide uint GetUInt
a4c0: 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  32(SQLiteStateme
a4d0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
a4e0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
a4f0: 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
a500: 65 64 28 28 75 69 6e 74 29 47 65 74 49 6e 74 33  ed((uint)GetInt3
a510: 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b  2(stmt, index));
a520: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
a530: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
a540: 20 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34 28 53   long GetInt64(S
a550: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
a560: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
a570: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c 6f  .    {..      lo
a580: 6e 67 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21  ng value;..#if !
a590: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
a5a0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
a5b0: 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e   value = UnsafeN
a5c0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a5d0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
a5e0: 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  4(stmt._sqlite_s
a5f0: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
a600: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
a610: 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61  DARD..      Unsa
a620: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a630: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
a640: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d  nt64_interop(stm
a650: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
a660: 69 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c 75 65  index, out value
a670: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
a680: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
a690: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
a6a0: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
a6b0: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
a6c0: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
a6d0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a6e0: 64 65 20 75 6c 6f 6e 67 20 47 65 74 55 49 6e 74  de ulong GetUInt
a6f0: 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
a700: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
a710: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
a720: 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
a730: 65 64 28 28 75 6c 6f 6e 67 29 47 65 74 49 6e 74  ed((ulong)GetInt
a740: 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  64(stmt, index))
a750: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
a760: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
a770: 65 20 73 74 72 69 6e 67 20 47 65 74 54 65 78 74  e string GetText
a780: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
a790: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
a7a0: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
a7b0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
a7c0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
a7d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
a7e0: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
a7f0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
a800: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
a810: 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  t_interop(stmt._
a820: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
a830: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
a840: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
a850: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
a860: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
a870: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
a880: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74  3_column_text(st
a890: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
a8a0: 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20 20   index),..      
a8b0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
a8c0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
a8d0: 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e  lumn_bytes(stmt.
a8e0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
a8f0: 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  dex));..#endif..
a900: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
a910: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 44  ernal override D
a920: 61 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54  ateTime GetDateT
a930: 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ime(SQLiteStatem
a940: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
a950: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
a960: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
a970: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
a980: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
a990: 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66  ToDateTime(Unsaf
a9a0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a9b0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
a9c0: 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  xt_interop(stmt.
a9d0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
a9e0: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  dex, out len), l
a9f0: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
aa00: 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65     return ToDate
aa10: 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76  Time(UnsafeNativ
aa20: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
aa30: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d  _column_text(stm
aa40: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
aa50: 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20 20 20  index),..       
aa60: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
aa70: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
aa80: 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f  umn_bytes(stmt._
aa90: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
aaa0: 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ex));..#endif.. 
aab0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
aac0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
aad0: 6e 67 20 47 65 74 42 79 74 65 73 28 53 51 4c 69  ng GetBytes(SQLi
aae0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
aaf0: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74  , int index, int
ab00: 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79   nDataOffset, by
ab10: 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20  te[] bDest, int 
ab20: 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e  nStart, int nLen
ab30: 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  gth)..    {..   
ab40: 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e     int nlen = Un
ab50: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
ab60: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
ab70: 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c  _bytes(stmt._sql
ab80: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
ab90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66  ;....      // If
aba0: 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20   no destination 
abb0: 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74  buffer, return t
abc0: 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d  he size needed..
abd0: 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74  .      if (bDest
abe0: 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
abf0: 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20   nlen;....      
ac00: 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c  int nCopied = nL
ac10: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
ac20: 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53  if (nCopied + nS
ac30: 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e  tart > bDest.Len
ac40: 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62  gth) nCopied = b
ac50: 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53  Dest.Length - nS
ac60: 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20  tart;..      if 
ac70: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61  (nCopied + nData
ac80: 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e  Offset > nlen) n
ac90: 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20  Copied = nlen - 
aca0: 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a  nDataOffset;....
acb0: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
acc0: 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d  d > 0)..      {.
acd0: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
ace0: 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ptr = UnsafeNati
acf0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
ad00: 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74  3_column_blob(st
ad10: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
ad20: 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20   index);....    
ad30: 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79      Marshal.Copy
ad40: 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f  ((IntPtr)(ptr.To
ad50: 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f  Int64() + nDataO
ad60: 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e  ffset), bDest, n
ad70: 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b  Start, nCopied);
ad80: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
ad90: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a   else..      {..
ada0: 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20          nCopied 
adb0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  = 0;..      }...
adc0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43  .      return nC
add0: 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  opied;..    }...
ade0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
adf0: 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 43  erride long GetC
ae00: 68 61 72 73 28 53 51 4c 69 74 65 53 74 61 74 65  hars(SQLiteState
ae10: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
ae20: 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f  ndex, int nDataO
ae30: 66 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62 44  ffset, char[] bD
ae40: 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c  est, int nStart,
ae50: 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20   int nLength).. 
ae60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
ae70: 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  nlen;..      int
ae80: 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67   nCopied = nLeng
ae90: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 74 72  th;....      str
aea0: 69 6e 67 20 73 74 72 20 3d 20 47 65 74 54 65 78  ing str = GetTex
aeb0: 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  t(stmt, index);.
aec0: 0a 20 20 20 20 20 20 6e 6c 65 6e 20 3d 20 73 74  .      nlen = st
aed0: 72 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20  r.Length;....   
aee0: 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20     if (bDest == 
aef0: 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65  null) return nle
af00: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  n;....      if (
af10: 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74  nCopied + nStart
af20: 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29   > bDest.Length)
af30: 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74   nCopied = bDest
af40: 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74  .Length - nStart
af50: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ;..      if (nCo
af60: 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73  pied + nDataOffs
af70: 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69  et > nlen) nCopi
af80: 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74  ed = nlen - nDat
af90: 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20  aOffset;....    
afa0: 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20    if (nCopied > 
afb0: 30 29 0d 0a 20 20 20 20 20 20 20 20 73 74 72 2e  0)..        str.
afc0: 43 6f 70 79 54 6f 28 6e 44 61 74 61 4f 66 66 73  CopyTo(nDataOffs
afd0: 65 74 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72  et, bDest, nStar
afe0: 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20  t, nCopied);..  
aff0: 20 20 20 20 65 6c 73 65 20 6e 43 6f 70 69 65 64      else nCopied
b000: 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72   = 0;....      r
b010: 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a  eturn nCopied;..
b020: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
b030: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
b040: 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74  ool IsNull(SQLit
b050: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
b060: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
b070: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
b080: 20 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79   (ColumnAffinity
b090: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 3d 3d  (stmt, index) ==
b0a0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75   TypeAffinity.Nu
b0b0: 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ll);..    }.... 
b0c0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
b0d0: 72 69 64 65 20 69 6e 74 20 41 67 67 72 65 67 61  ride int Aggrega
b0e0: 74 65 43 6f 75 6e 74 28 49 6e 74 50 74 72 20 63  teCount(IntPtr c
b0f0: 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
b100: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
b110: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b120: 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61  .sqlite3_aggrega
b130: 74 65 5f 63 6f 75 6e 74 28 63 6f 6e 74 65 78 74  te_count(context
b140: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
b150: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b160: 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 46 75  de void CreateFu
b170: 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74  nction(string st
b180: 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e  rFunction, int n
b190: 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43  Args, bool needC
b1a0: 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65 43 61  ollSeq, SQLiteCa
b1b0: 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c  llback func, SQL
b1c0: 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  iteCallback func
b1d0: 73 74 65 70 2c 20 53 51 4c 69 74 65 46 69 6e 61  step, SQLiteFina
b1e0: 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69  lCallback funcfi
b1f0: 6e 61 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  nal)..    {..   
b200: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
b210: 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  de n;....#if !SQ
b220: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
b230: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
b240: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
b250: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
b260: 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71  tion_interop(_sq
b270: 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
b280: 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34  ction), nArgs, 4
b290: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
b2a0: 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
b2b0: 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43  uncfinal, (needC
b2c0: 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20  ollSeq == true) 
b2d0: 3f 20 31 20 3a 20 30 29 3b 0d 0a 20 20 20 20 20  ? 1 : 0);..     
b2e0: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
b2f0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20  ErrorCode.Ok) n 
b300: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
b310: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
b320: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e  eate_function_in
b330: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
b340: 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c  F8(strFunction),
b350: 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74   nArgs, 1, IntPt
b360: 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75  r.Zero, func, fu
b370: 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61  ncstep, funcfina
b380: 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20  l, (needCollSeq 
b390: 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30  == true) ? 1 : 0
b3a0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
b3b0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
b3c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
b3d0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
b3e0: 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
b3f0: 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67  rFunction), nArg
b400: 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72  s, 4, IntPtr.Zer
b410: 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65  o, func, funcste
b420: 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a  p, funcfinal);..
b430: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
b440: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
b450: 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  k) n = UnsafeNat
b460: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b470: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
b480: 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  on(_sql, ToUTF8(
b490: 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41  strFunction), nA
b4a0: 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a  rgs, 1, IntPtr.Z
b4b0: 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ero, func, funcs
b4c0: 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b  tep, funcfinal);
b4d0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
b4e0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
b4f0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
b500: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
b510: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
b520: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
b530: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
b540: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
b550: 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28  CreateCollation(
b560: 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74  string strCollat
b570: 69 6f 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61  ion, SQLiteColla
b580: 74 69 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74  tion func, SQLit
b590: 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31  eCollation func1
b5a0: 36 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  6)..    {..     
b5b0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
b5c0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
b5d0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
b5e0: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
b5f0: 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  n(_sql, ToUTF8(s
b600: 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c  trCollation), 2,
b610: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
b620: 6e 63 31 36 29 3b 0d 0a 20 20 20 20 20 20 69 66  nc16);..      if
b630: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
b640: 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55  orCode.Ok) n = U
b650: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b660: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
b670: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c  e_collation(_sql
b680: 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c  , ToUTF8(strColl
b690: 61 74 69 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74  ation), 1, IntPt
b6a0: 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a  r.Zero, func);..
b6b0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
b6c0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
b6d0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
b6e0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
b6f0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
b700: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
b710: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
b720: 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c   int ContextColl
b730: 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61  ateCompare(Colla
b740: 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
b750: 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e   enc, IntPtr con
b760: 74 65 78 74 2c 20 73 74 72 69 6e 67 20 73 31 2c  text, string s1,
b770: 20 73 74 72 69 6e 67 20 73 32 29 0d 0a 20 20 20   string s2)..   
b780: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
b790: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
b7a0: 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20  byte[] b1;..    
b7b0: 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20    byte[] b2;..  
b7c0: 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e      System.Text.
b7d0: 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74  Encoding convert
b7e0: 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  er = null;....  
b7f0: 20 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29      switch (enc)
b800: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
b810: 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
b820: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
b830: 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  F8:..          c
b840: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
b850: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
b860: 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  UTF8;..         
b870: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
b880: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
b890: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31  ncodingEnum.UTF1
b8a0: 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  6LE:..          
b8b0: 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
b8c0: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
b8d0: 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20  .Unicode;..     
b8e0: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
b8f0: 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
b900: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
b910: 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20  UTF16BE:..      
b920: 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
b930: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
b940: 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e  ding.BigEndianUn
b950: 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20  icode;..        
b960: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
b970: 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20  }....      b1 = 
b980: 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  converter.GetByt
b990: 65 73 28 73 31 29 3b 0d 0a 20 20 20 20 20 20 62  es(s1);..      b
b9a0: 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65  2 = converter.Ge
b9b0: 74 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a 20  tBytes(s2);.... 
b9c0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
b9d0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b9e0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f  sqlite3_context_
b9f0: 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65  collcompare_inte
ba00: 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c  rop(context, b1,
ba10: 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20   b1.Length, b2, 
ba20: 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c  b2.Length);..#el
ba30: 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
ba40: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
ba50: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
ba60: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
ba70: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
ba80: 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65  erride int Conte
ba90: 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65  xtCollateCompare
baa0: 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69  (CollationEncodi
bab0: 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50  ngEnum enc, IntP
bac0: 74 72 20 63 6f 6e 74 65 78 74 2c 20 63 68 61 72  tr context, char
bad0: 5b 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20 63 32  [] c1, char[] c2
bae0: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
baf0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
bb00: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b        byte[] b1;
bb10: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
bb20: 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d  2;..      System
bb30: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63  .Text.Encoding c
bb40: 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b  onverter = null;
bb50: 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68  ....      switch
bb60: 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d   (enc)..      {.
bb70: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
bb80: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
bb90: 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20  num.UTF8:..     
bba0: 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
bbb0: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
bbc0: 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20  oding.UTF8;..   
bbd0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
bbe0: 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
bbf0: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
bc00: 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20  m.UTF16LE:..    
bc10: 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
bc20: 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
bc30: 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d  coding.Unicode;.
bc40: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
bc50: 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
bc60: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
bc70: 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a  gEnum.UTF16BE:..
bc80: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
bc90: 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
bca0: 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e  t.Encoding.BigEn
bcb0: 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20  dianUnicode;..  
bcc0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
bcd0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
bce0: 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e   b1 = converter.
bcf0: 47 65 74 42 79 74 65 73 28 63 31 29 3b 0d 0a 20  GetBytes(c1);.. 
bd00: 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72       b2 = conver
bd10: 74 65 72 2e 47 65 74 42 79 74 65 73 28 63 32 29  ter.GetBytes(c2)
bd20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
bd30: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
bd40: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
bd50: 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72  ntext_collcompar
bd60: 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78  e_interop(contex
bd70: 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68  t, b1, b1.Length
bd80: 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29  , b2, b2.Length)
bd90: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
bda0: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
bdb0: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
bdc0: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
bdd0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
bde0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 43 6f 6c  nal override Col
bdf0: 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 47  lationSequence G
be00: 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65  etCollationSeque
be10: 6e 63 65 28 53 51 4c 69 74 65 46 75 6e 63 74 69  nce(SQLiteFuncti
be20: 6f 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 20  on func, IntPtr 
be30: 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d  context)..    {.
be40: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
be50: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 43 6f 6c  NDARD..      Col
be60: 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 73  lationSequence s
be70: 65 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74 69  eq = new Collati
be80: 6f 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a 20  onSequence();.. 
be90: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20       int len;.. 
bea0: 20 20 20 20 20 69 6e 74 20 74 79 70 65 3b 0d 0a       int type;..
beb0: 20 20 20 20 20 20 69 6e 74 20 65 6e 63 3b 0d 0a        int enc;..
bec0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d        IntPtr p =
bed0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
bee0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
bef0: 74 65 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74  text_collseq_int
bf00: 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 6f 75  erop(context, ou
bf10: 74 20 74 79 70 65 2c 20 6f 75 74 20 65 6e 63 2c  t type, out enc,
bf20: 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20   out len);....  
bf30: 20 20 20 20 69 66 20 28 70 20 21 3d 20 6e 75 6c      if (p != nul
bf40: 6c 29 20 73 65 71 2e 4e 61 6d 65 20 3d 20 55 54  l) seq.Name = UT
bf50: 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65  F8ToString(p, le
bf60: 6e 29 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 54  n);..      seq.T
bf70: 79 70 65 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e  ype = (Collation
bf80: 54 79 70 65 45 6e 75 6d 29 74 79 70 65 3b 0d 0a  TypeEnum)type;..
bf90: 20 20 20 20 20 20 73 65 71 2e 5f 66 75 6e 63 20        seq._func 
bfa0: 3d 20 66 75 6e 63 3b 0d 0a 20 20 20 20 20 20 73  = func;..      s
bfb0: 65 71 2e 45 6e 63 6f 64 69 6e 67 20 3d 20 28 43  eq.Encoding = (C
bfc0: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
bfd0: 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20 20  Enum)enc;....   
bfe0: 20 20 20 72 65 74 75 72 6e 20 73 65 71 3b 0d 0a     return seq;..
bff0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
c000: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
c010: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
c020: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
c030: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
c040: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
c050: 65 74 50 61 72 61 6d 56 61 6c 75 65 42 79 74 65  etParamValueByte
c060: 73 28 49 6e 74 50 74 72 20 70 2c 20 69 6e 74 20  s(IntPtr p, int 
c070: 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74  nDataOffset, byt
c080: 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  e[] bDest, int n
c090: 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
c0a0: 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
c0b0: 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73    int nlen = Uns
c0c0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c0d0: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  .sqlite3_value_b
c0e0: 79 74 65 73 28 70 29 3b 0d 0a 0d 0a 20 20 20 20  ytes(p);....    
c0f0: 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69    // If no desti
c100: 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72  nation buffer, r
c110: 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e  eturn the size n
c120: 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66  eeded...      if
c130: 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29   (bDest == null)
c140: 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d   return nlen;...
c150: 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69  .      int nCopi
c160: 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d  ed = nLength;...
c170: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
c180: 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44  ed + nStart > bD
c190: 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70  est.Length) nCop
c1a0: 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67  ied = bDest.Leng
c1b0: 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20  th - nStart;..  
c1c0: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
c1d0: 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20  + nDataOffset > 
c1e0: 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20  nlen) nCopied = 
c1f0: 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73  nlen - nDataOffs
c200: 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  et;....      if 
c210: 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20  (nCopied > 0).. 
c220: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c230: 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73  IntPtr ptr = Uns
c240: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c250: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  .sqlite3_value_b
c260: 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20  lob(p);....     
c270: 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28     Marshal.Copy(
c280: 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49  (IntPtr)(ptr.ToI
c290: 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66  nt64() + nDataOf
c2a0: 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53  fset), bDest, nS
c2b0: 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d  tart, nCopied);.
c2c0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
c2d0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  else..      {.. 
c2e0: 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d         nCopied =
c2f0: 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a   0;..      }....
c300: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f        return nCo
c310: 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  pied;..    }....
c320: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
c330: 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74  rride double Get
c340: 50 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65  ParamValueDouble
c350: 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
c360: 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c    {..      doubl
c370: 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50  e value;..#if !P
c380: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
c390: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
c3a0: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
c3b0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
c3c0: 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65  te3_value_double
c3d0: 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53  (ptr);..#elif !S
c3e0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
c3f0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
c400: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
c410: 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69  3_value_double_i
c420: 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20  nterop(ptr, out 
c430: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
c440: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
c450: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
c460: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
c470: 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  if..      return
c480: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a   value;..    }..
c490: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
c4a0: 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 50  verride int GetP
c4b0: 61 72 61 6d 56 61 6c 75 65 49 6e 74 33 32 28 49  aramValueInt32(I
c4c0: 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
c4d0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
c4e0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
c4f0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
c500: 65 5f 69 6e 74 28 70 74 72 29 3b 0d 0a 20 20 20  e_int(ptr);..   
c510: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
c520: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
c530: 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e   GetParamValueIn
c540: 74 36 34 28 49 6e 74 50 74 72 20 70 74 72 29 0d  t64(IntPtr ptr).
c550: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e  .    {..      In
c560: 74 36 34 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20  t64 value;..#if 
c570: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
c580: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
c590: 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65    value = Unsafe
c5a0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c5b0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36  lite3_value_int6
c5c0: 34 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21  4(ptr);..#elif !
c5d0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
c5e0: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
c5f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
c600: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69  e3_value_int64_i
c610: 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20  nterop(ptr, out 
c620: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
c630: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
c640: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
c650: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
c660: 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  if..      return
c670: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a   value;..    }..
c680: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
c690: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
c6a0: 65 74 50 61 72 61 6d 56 61 6c 75 65 54 65 78 74  etParamValueText
c6b0: 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
c6c0: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
c6d0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
c6e0: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
c6f0: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
c700: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
c710: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c720: 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65  _value_text_inte
c730: 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 6c 65 6e  rop(ptr, out len
c740: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
c750: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
c760: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
c770: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c780: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
c790: 74 28 70 74 72 29 2c 0d 0a 20 20 20 20 20 20 20  t(ptr),..       
c7a0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
c7b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
c7c0: 75 65 5f 62 79 74 65 73 28 70 74 72 29 29 3b 0d  ue_bytes(ptr));.
c7d0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
c7e0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
c7f0: 76 65 72 72 69 64 65 20 54 79 70 65 41 66 66 69  verride TypeAffi
c800: 6e 69 74 79 20 47 65 74 50 61 72 61 6d 56 61 6c  nity GetParamVal
c810: 75 65 54 79 70 65 28 49 6e 74 50 74 72 20 70 74  ueType(IntPtr pt
c820: 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  r)..    {..     
c830: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
c840: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
c850: 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70  te3_value_type(p
c860: 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
c870: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
c880: 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
c890: 42 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e 74  Blob(IntPtr cont
c8a0: 65 78 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75  ext, byte[] valu
c8b0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
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 62 6c 6f 62 28 63 6f 6e 74 65 78 74  ult_blob(context
c8f0: 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75 65 2e 4c  , value, value.L
c900: 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28  ength, (IntPtr)(
c910: 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  -1));..    }....
c920: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
c930: 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
c940: 6e 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 63  nDouble(IntPtr c
c950: 6f 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65 20 76  ontext, double v
c960: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  alue)..    {..#i
c970: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
c980: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
c990: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
c9a0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
c9b0: 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f  result_double(co
c9c0: 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
c9d0: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
c9e0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e  ANDARD..      Un
c9f0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
ca00: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
ca10: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
ca20: 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c  context, ref val
ca30: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
ca40: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
ca50: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
ca60: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
ca70: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
ca80: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
ca90: 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72 6f 72  void ReturnError
caa0: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
cab0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a   string value)..
cac0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
cad0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
cae0: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
caf0: 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 54  error(context, T
cb00: 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20 76 61  oUTF8(value), va
cb10: 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  lue.Length);..  
cb20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
cb30: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
cb40: 64 20 52 65 74 75 72 6e 49 6e 74 33 32 28 49 6e  d ReturnInt32(In
cb50: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e  tPtr context, in
cb60: 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  t value)..    {.
cb70: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
cb80: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
cb90: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f  e3_result_int(co
cba0: 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
cbb0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
cbc0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
cbd0: 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36 34 28  oid ReturnInt64(
cbe0: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
cbf0: 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  long value)..   
cc00: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
cc10: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
cc20: 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RK..      Unsafe
cc30: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
cc40: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
cc50: 36 34 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75  64(context, valu
cc60: 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
cc70: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
cc80: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
cc90: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
cca0: 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65  esult_int64_inte
ccb0: 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66  rop(context, ref
ccc0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
ccd0: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
cce0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
ccf0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
cd00: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
cd10: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
cd20: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 4e  ide void ReturnN
cd30: 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ull(IntPtr conte
cd40: 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  xt)..    {..    
cd50: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
cd60: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
cd70: 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78  sult_null(contex
cd80: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
cd90: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
cda0: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 54  ide void ReturnT
cdb0: 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ext(IntPtr conte
cdc0: 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  xt, string value
cdd0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
cde0: 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
cdf0: 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  8(value);..     
ce00: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ce10: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
ce20: 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74  ult_text(context
ce30: 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c  , ToUTF8(value),
ce40: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28   b.Length - 1, (
ce50: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
ce60: 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45     }....#if INTE
ce70: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
ce80: 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  E..    /// <summ
ce90: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61  ary>..    /// Ca
cea0: 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53  lls the native S
ceb0: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
cec0: 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  ry in order to c
ced0: 72 65 61 74 65 20 61 20 64 69 73 70 6f 73 61 62  reate a disposab
cee0: 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 6d 6f 64 75  le..    /// modu
cef0: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
cf00: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
cf10: 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
cf20: 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ble...    /// </
cf30: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
cf40: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
cf50: 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  odule">..    ///
cf60: 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65   The module obje
cf70: 63 74 20 74 6f 20 62 65 20 75 73 65 64 20 77 68  ct to be used wh
cf80: 65 6e 20 63 72 65 61 74 69 6e 67 20 74 68 65 20  en creating the 
cf90: 6e 61 74 69 76 65 20 64 69 73 70 6f 73 61 62 6c  native disposabl
cfa0: 65 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 2f  e module...    /
cfb0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
cfc0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
cfd0: 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 4d 6f  de void CreateMo
cfe0: 64 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c  dule(SQLiteModul
cff0: 65 20 6d 6f 64 75 6c 65 29 0d 0a 20 20 20 20 7b  e module)..    {
d000: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f  ..        if (mo
d010: 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
d020: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
d030: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
d040: 6c 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75  lException("modu
d050: 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  le");....       
d060: 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c   if (_sql == nul
d070: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
d080: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
d090: 45 78 63 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65  Exception("conne
d0a0: 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76  ction has an inv
d0b0: 61 6c 69 64 20 68 61 6e 64 6c 65 22 29 3b 0d 0a  alid handle");..
d0c0: 0d 0a 20 20 20 20 20 20 20 20 53 65 74 4c 6f 61  ..        SetLoa
d0d0: 64 45 78 74 65 6e 73 69 6f 6e 28 74 72 75 65 29  dExtension(true)
d0e0: 3b 0d 0a 20 20 20 20 20 20 20 20 4c 6f 61 64 45  ;..        LoadE
d0f0: 78 74 65 6e 73 69 6f 6e 28 55 6e 73 61 66 65 4e  xtension(UnsafeN
d100: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53 51 4c  ativeMethods.SQL
d110: 49 54 45 5f 44 4c 4c 2c 20 22 73 71 6c 69 74 65  ITE_DLL, "sqlite
d120: 33 5f 76 74 73 68 69 6d 5f 69 6e 69 74 22 29 3b  3_vtshim_init");
d130: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
d140: 74 72 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74  tr pName = IntPt
d150: 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
d160: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
d170: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
d180: 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53 74 72  Name = SQLiteStr
d190: 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72  ing.Utf8IntPtrFr
d1a0: 6f 6d 53 74 72 69 6e 67 28 6d 6f 64 75 6c 65 2e  omString(module.
d1b0: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
d1c0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
d1d0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d1e0: 33 5f 6d 6f 64 75 6c 65 20 6e 61 74 69 76 65 4d  3_module nativeM
d1f0: 6f 64 75 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20  odule =..       
d200: 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
d210: 43 72 65 61 74 65 4e 61 74 69 76 65 4d 6f 64 75  CreateNativeModu
d220: 6c 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  le();....       
d230: 20 20 20 20 20 69 66 20 28 55 6e 73 61 66 65 4e       if (UnsafeN
d240: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d250: 69 74 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70  ite3_create_disp
d260: 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 28 0d 0a  osable_module(..
d270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d280: 20 20 20 20 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c      _sql, pName,
d290: 20 72 65 66 20 6e 61 74 69 76 65 4d 6f 64 75 6c   ref nativeModul
d2a0: 65 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d  e, IntPtr.Zero,.
d2b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d2c0: 20 20 20 20 20 6e 75 6c 6c 29 20 21 3d 20 49 6e       null) != In
d2d0: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
d2e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d2f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
d300: 6d 6f 64 75 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29  modules == null)
d310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d320: 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73 20 3d        _modules =
d330: 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c   new Dictionary<
d340: 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f  string, SQLiteMo
d350: 64 75 6c 65 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20  dule>();....    
d360: 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64              _mod
d370: 75 6c 65 73 2e 41 64 64 28 6d 6f 64 75 6c 65 2e  ules.Add(module.
d380: 4e 61 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b 0d 0a  Name, module);..
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 20 20 20 20 65 6c 73 65 0d             else.
d3b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3d0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
d3e0: 45 78 63 65 70 74 69 6f 6e 28 47 65 74 4c 61 73  Exception(GetLas
d3f0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
d400: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
d410: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
d420: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b  nally..        {
d430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
d440: 20 28 70 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74   (pName != IntPt
d450: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
d460: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d470: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65          SQLiteMe
d480: 6d 6f 72 79 2e 46 72 65 65 28 70 4e 61 6d 65 29  mory.Free(pName)
d490: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
d4a0: 20 20 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74     pName = IntPt
d4b0: 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20  r.Zero;..       
d4c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
d4d0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
d4e0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
d4f0: 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65     /// Calls the
d500: 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63   native SQLite c
d510: 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f  ore library in o
d520: 72 64 65 72 20 74 6f 20 63 6c 65 61 6e 75 70 20  rder to cleanup 
d530: 74 68 65 20 72 65 73 6f 75 72 63 65 73 0d 0a 20  the resources.. 
d540: 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65     /// associate
d550: 64 20 77 69 74 68 20 61 20 6d 6f 64 75 6c 65 20  d with a module 
d560: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 69  containing the i
d570: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
d580: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
d590: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
d5a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
d5b0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75  param name="modu
d5c0: 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  le">..    /// Th
d5d0: 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20  e module object 
d5e0: 70 72 65 76 69 6f 75 73 6c 79 20 70 61 73 73 65  previously passe
d5f0: 64 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72  d to the <see cr
d600: 65 66 3d 22 43 72 65 61 74 65 4d 6f 64 75 6c 65  ef="CreateModule
d610: 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6d 65  " />..    /// me
d620: 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  thod...    /// <
d630: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
d640: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
d650: 6f 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c  oid DisposeModul
d660: 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d  e(SQLiteModule m
d670: 6f 64 75 6c 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  odule)..    {.. 
d680: 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
d690: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
d6a0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
d6b0: 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
d6c0: 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65 22  ception("module"
d6d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6d 6f  );....        mo
d6e0: 64 75 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d  dule.Dispose();.
d6f0: 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a  .    }..#endif..
d700: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
d710: 76 65 72 72 69 64 65 20 49 6e 74 50 74 72 20 41  verride IntPtr A
d720: 67 67 72 65 67 61 74 65 43 6f 6e 74 65 78 74 28  ggregateContext(
d730: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
d740: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
d750: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
d760: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
d770: 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74 65  _aggregate_conte
d780: 78 74 28 63 6f 6e 74 65 78 74 2c 20 31 29 3b 0d  xt(context, 1);.
d790: 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e  .    }....#if IN
d7a0: 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
d7b0: 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  BLE..    /// <su
d7c0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
d7d0: 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65  Calls the native
d7e0: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
d7f0: 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f  rary in order to
d800: 20 64 65 63 6c 61 72 65 20 61 20 76 69 72 74 75   declare a virtu
d810: 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f  al table..    //
d820: 2f 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  / in response to
d830: 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65   a call into the
d840: 20 78 43 72 65 61 74 65 20 6f 72 20 78 43 6f 6e   xCreate or xCon
d850: 6e 65 63 74 20 76 69 72 74 75 61 6c 20 74 61 62  nect virtual tab
d860: 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20  le methods...   
d870: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
d880: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
d890: 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
d8a0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69 72 74      /// The virt
d8b0: 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65  ual table module
d8c0: 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20 72   that is to be r
d8d0: 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74  esponsible for t
d8e0: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
d8f0: 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 69 6e 67 20  ..    /// being 
d900: 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f  declared...    /
d910: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
d920: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
d930: 3d 22 73 74 72 53 71 6c 22 3e 0d 0a 20 20 20 20  ="strSql">..    
d940: 2f 2f 2f 20 54 68 65 20 73 74 72 69 6e 67 20 63  /// The string c
d950: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51  ontaining the SQ
d960: 4c 20 73 74 61 74 65 6d 65 6e 74 20 64 65 73 63  L statement desc
d970: 72 69 62 69 6e 67 20 74 68 65 20 76 69 72 74 75  ribing the virtu
d980: 61 6c 20 74 61 62 6c 65 20 74 6f 0d 0a 20 20 20  al table to..   
d990: 20 2f 2f 2f 20 62 65 20 64 65 63 6c 61 72 65 64   /// be declared
d9a0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
d9b0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
d9c0: 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22  ram name="error"
d9d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20  >..    /// Upon 
d9e0: 73 75 63 63 65 73 73 2c 20 74 68 65 20 63 6f 6e  success, the con
d9f0: 74 65 6e 74 73 20 6f 66 20 74 68 69 73 20 70 61  tents of this pa
da00: 72 61 6d 65 74 65 72 20 61 72 65 20 75 6e 64 65  rameter are unde
da10: 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61 69  fined.  Upon fai
da20: 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69  lure,..    /// i
da30: 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e  t should contain
da40: 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20   an appropriate 
da50: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a  error message...
da60: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
da70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
da80: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73  ns>..    /// A s
da90: 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
daa0: 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
dab0: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
dac0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
dad0: 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
dae0: 6f 72 43 6f 64 65 20 44 65 63 6c 61 72 65 56 69  orCode DeclareVi
daf0: 72 74 75 61 6c 54 61 62 6c 65 28 0d 0a 20 20 20  rtualTable(..   
db00: 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
db10: 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20  e module,..     
db20: 20 20 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c     string strSql
db30: 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73  ,..        ref s
db40: 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
db50: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
db60: 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20         if (_sql 
db70: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
db80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
db90: 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63   error = "connec
dba0: 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61  tion has an inva
dbb0: 6c 69 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20  lid handle";..  
dbc0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
dbd0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
dbe0: 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20  .Error;..       
dbf0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e   }....        In
dc00: 74 50 74 72 20 70 53 71 6c 20 3d 20 49 6e 74 50  tPtr pSql = IntP
dc10: 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
dc20: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
dc30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
dc40: 70 53 71 6c 20 3d 20 53 51 4c 69 74 65 53 74 72  pSql = SQLiteStr
dc50: 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72  ing.Utf8IntPtrFr
dc60: 6f 6d 53 74 72 69 6e 67 28 73 74 72 53 71 6c 29  omString(strSql)
dc70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
dc80: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
dc90: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
dca0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
dcb0: 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 0d 0a  _declare_vtab(..
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcd0: 5f 73 71 6c 2c 20 70 53 71 6c 29 3b 0d 0a 0d 0a  _sql, pSql);....
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
dcf0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
dd00: 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6d 6f  rCode.Ok) && (mo
dd10: 64 75 6c 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a  dule != null))..
dd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd30: 6d 6f 64 75 6c 65 2e 44 65 63 6c 61 72 65 64 20  module.Declared 
dd40: 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  = true;....     
dd50: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
dd60: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
dd70: 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47 65 74 4c  Ok) error = GetL
dd80: 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20  astError();.... 
dd90: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
dda0: 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  n n;..        }.
ddb0: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
ddc0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
ddd0: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 53 71           if (pSq
dde0: 6c 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  l != IntPtr.Zero
ddf0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
de00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
de10: 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46    SQLiteMemory.F
de20: 72 65 65 28 70 53 71 6c 29 3b 0d 0a 20 20 20 20  ree(pSql);..    
de30: 20 20 20 20 20 20 20 20 20 20 20 20 70 53 71 6c              pSql
de40: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
de50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
de60: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
de70: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
de80: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
de90: 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f     /// Enables o
dea0: 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e  r disabled exten
deb0: 73 69 6f 6e 20 6c 6f 61 64 69 6e 67 20 62 79 20  sion loading by 
dec0: 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f  SQLite...    ///
ded0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
dee0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
def0: 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20 20  ="bOnOff">..    
df00: 2f 2f 2f 20 54 72 75 65 20 74 6f 20 65 6e 61 62  /// True to enab
df10: 6c 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78  le loading of ex
df20: 74 65 6e 73 69 6f 6e 73 2c 20 66 61 6c 73 65 20  tensions, false 
df30: 74 6f 20 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20  to disable...   
df40: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
df50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
df60: 72 69 64 65 20 76 6f 69 64 20 53 65 74 4c 6f 61  ride void SetLoa
df70: 64 45 78 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20  dExtension(bool 
df80: 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a  bOnOff)..    {..
df90: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
dfa0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
dfb0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
dfc0: 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c  sqlite3_enable_l
dfd0: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a  oad_extension(..
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
dff0: 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a  , (bOnOff ? -1 :
e000: 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   0));....       
e010: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
e020: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
e030: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
e040: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
e050: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
e060: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
e070: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
e080: 20 4c 6f 61 64 73 20 61 20 53 51 4c 69 74 65 20   Loads a SQLite 
e090: 65 78 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72  extension librar
e0a0: 79 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64  y from the named
e0b0: 20 66 69 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   file...    /// 
e0c0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
e0d0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
e0e0: 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20  "fileName">..   
e0f0: 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
e100: 20 74 68 65 20 64 79 6e 61 6d 69 63 20 6c 69 6e   the dynamic lin
e110: 6b 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 63  k library file c
e120: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65 78  ontaining the ex
e130: 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  tension...    //
e140: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
e150: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
e160: 22 70 72 6f 63 4e 61 6d 65 22 3e 0d 0a 20 20 20  "procName">..   
e170: 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
e180: 20 74 68 65 20 65 78 70 6f 72 74 65 64 20 66 75   the exported fu
e190: 6e 63 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 69  nction used to i
e1a0: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 65 78  nitialize the ex
e1b0: 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  tension...    //
e1c0: 2f 20 49 66 20 6e 75 6c 6c 2c 20 74 68 65 20 64  / If null, the d
e1d0: 65 66 61 75 6c 74 20 22 73 71 6c 69 74 65 33 5f  efault "sqlite3_
e1e0: 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 22 20  extension_init" 
e1f0: 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20  will be used... 
e200: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
e210: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
e220: 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 61 64  erride void Load
e230: 45 78 74 65 6e 73 69 6f 6e 28 73 74 72 69 6e 67  Extension(string
e240: 20 66 69 6c 65 4e 61 6d 65 2c 20 73 74 72 69 6e   fileName, strin
e250: 67 20 70 72 6f 63 4e 61 6d 65 29 0d 0a 20 20 20  g procName)..   
e260: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
e270: 66 69 6c 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  fileName == null
e280: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
e290: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
e2a0: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
e2b0: 66 69 6c 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20  fileName");.... 
e2c0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 45         IntPtr pE
e2d0: 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  rror = IntPtr.Ze
e2e0: 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ro;....        t
e2f0: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
e300: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
e310: 5d 20 75 74 66 38 46 69 6c 65 4e 61 6d 65 20 3d  ] utf8FileName =
e320: 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54   UTF8Encoding.UT
e330: 46 38 2e 47 65 74 42 79 74 65 73 28 66 69 6c 65  F8.GetBytes(file
e340: 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 20  Name + '\0');.. 
e350: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
e360: 5d 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d  ] utf8ProcName =
e370: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
e380: 20 20 20 20 20 20 69 66 20 28 70 72 6f 63 4e 61        if (procNa
e390: 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
e3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66               utf
e3b0: 38 50 72 6f 63 4e 61 6d 65 20 3d 20 55 54 46 38  8ProcName = UTF8
e3c0: 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65  Encoding.UTF8.Ge
e3d0: 74 42 79 74 65 73 28 70 72 6f 63 4e 61 6d 65 20  tBytes(procName 
e3e0: 2b 20 27 5c 30 27 29 3b 0d 0a 0d 0a 20 20 20 20  + '\0');....    
e3f0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
e400: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
e410: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e420: 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
e430: 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ension(..       
e440: 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 75           _sql, u
e450: 74 66 38 46 69 6c 65 4e 61 6d 65 2c 20 75 74 66  tf8FileName, utf
e460: 38 50 72 6f 63 4e 61 6d 65 2c 20 72 65 66 20 70  8ProcName, ref p
e470: 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
e480: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
e490: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
e4a0: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
e4b0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
e4c0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
e4d0: 2c 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  , UTF8ToString(p
e4e0: 45 72 72 6f 72 2c 20 2d 31 29 29 3b 0d 0a 20 20  Error, -1));..  
e4f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
e500: 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
e510: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e520: 20 69 66 20 28 70 45 72 72 6f 72 20 21 3d 20 49   if (pError != I
e530: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
e540: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e550: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
e560: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e570: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 45 72  sqlite3_free(pEr
e580: 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
e590: 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20         pError = 
e5a0: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
e5b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
e5c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
e5d0: 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73  .    /// Enables
e5e0: 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78 74   or disabled ext
e5f0: 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64  ended result cod
e600: 65 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 53  es returned by S
e610: 51 4c 69 74 65 0d 0a 20 20 20 20 69 6e 74 65 72  QLite..    inter
e620: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
e630: 64 20 53 65 74 45 78 74 65 6e 64 65 64 52 65 73  d SetExtendedRes
e640: 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f  ultCodes(bool bO
e650: 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nOff)..    {..  
e660: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
e670: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
e680: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
e690: 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73  te3_extended_res
e6a0: 75 6c 74 5f 63 6f 64 65 73 28 0d 0a 20 20 20 20  ult_codes(..    
e6b0: 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e        _sql, (bOn
e6c0: 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d  Off ? -1 : 0));.
e6d0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ...      if (n !
e6e0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
e6f0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
e700: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
e710: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
e720: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ));..    }..    
e730: 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73  /// Gets the las
e740: 74 20 53 51 4c 69 74 65 20 65 72 72 6f 72 20 63  t SQLite error c
e750: 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ode..    interna
e760: 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
e770: 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73 75 6c  eErrorCode Resul
e780: 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a  tCode()..    {..
e790: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
e7a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
e7b0: 2e 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65  .sqlite3_errcode
e7c0: 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a  (_sql);..    }..
e7d0: 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65      /// Gets the
e7e0: 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65 78 74   last SQLite ext
e7f0: 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65  ended error code
e800: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
e810: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
e820: 72 6f 72 43 6f 64 65 20 45 78 74 65 6e 64 65 64  rorCode Extended
e830: 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20  ResultCode()..  
e840: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
e850: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
e860: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78  thods.sqlite3_ex
e870: 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 5f  tended_errcode(_
e880: 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  sql);..    }....
e890: 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f      /// Add a lo
e8a0: 67 20 6d 65 73 73 61 67 65 20 76 69 61 20 74 68  g message via th
e8b0: 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65 33  e SQLite sqlite3
e8c0: 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e 0d  _log interface..
e8d0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
e8e0: 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 67 4d  erride void LogM
e8f0: 65 73 73 61 67 65 28 53 51 4c 69 74 65 45 72 72  essage(SQLiteErr
e900: 6f 72 43 6f 64 65 20 69 45 72 72 43 6f 64 65 2c  orCode iErrCode,
e910: 20 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65   string zMessage
e920: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
e930: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
e940: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28  ods.sqlite3_log(
e950: 69 45 72 72 43 6f 64 65 2c 20 54 6f 55 54 46 38  iErrCode, ToUTF8
e960: 28 7a 4d 65 73 73 61 67 65 29 29 3b 0d 0a 20 20  (zMessage));..  
e970: 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52    }....#if INTER
e980: 4f 50 5f 43 4f 44 45 43 0d 0a 20 20 20 20 69 6e  OP_CODEC..    in
e990: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
e9a0: 76 6f 69 64 20 53 65 74 50 61 73 73 77 6f 72 64  void SetPassword
e9b0: 28 62 79 74 65 5b 5d 20 70 61 73 73 77 6f 72 64  (byte[] password
e9c0: 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20  Bytes)..    {.. 
e9d0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
e9e0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
e9f0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
ea00: 69 74 65 33 5f 6b 65 79 28 5f 73 71 6c 2c 20 70  ite3_key(_sql, p
ea10: 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20 70 61  asswordBytes, pa
ea20: 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67  sswordBytes.Leng
ea30: 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  th);..      if (
ea40: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
ea50: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
ea60: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
ea70: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
ea80: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
ea90: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
eaa0: 65 72 72 69 64 65 20 76 6f 69 64 20 43 68 61 6e  erride void Chan
eab0: 67 65 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b  gePassword(byte[
eac0: 5d 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74  ] newPasswordByt
ead0: 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  es)..    {..    
eae0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
eaf0: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
eb00: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
eb10: 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65  3_rekey(_sql, ne
eb20: 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20  wPasswordBytes, 
eb30: 28 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65  (newPasswordByte
eb40: 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a  s == null) ? 0 :
eb50: 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65   newPasswordByte
eb60: 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20  s.Length);..    
eb70: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
eb80: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
eb90: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
eba0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
ebb0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
ebc0: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
ebd0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
ebe0: 72 69 64 65 20 76 6f 69 64 20 53 65 74 55 70 64  ride void SetUpd
ebf0: 61 74 65 48 6f 6f 6b 28 53 51 4c 69 74 65 55 70  ateHook(SQLiteUp
ec00: 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e  dateCallback fun
ec10: 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
ec20: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ec30: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 75 70 64  hods.sqlite3_upd
ec40: 61 74 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66  ate_hook(_sql, f
ec50: 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
ec60: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
ec70: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
ec80: 64 65 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69  de void SetCommi
ec90: 74 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d  tHook(SQLiteComm
eca0: 69 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  itCallback func)
ecb0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
ecc0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
ecd0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69  ds.sqlite3_commi
ece0: 74 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e  t_hook(_sql, fun
ecf0: 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
ed00: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
ed10: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
ed20: 20 76 6f 69 64 20 53 65 74 54 72 61 63 65 43 61   void SetTraceCa
ed30: 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 54 72 61  llback(SQLiteTra
ed40: 63 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ceCallback func)
ed50: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
ed60: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
ed70: 64 73 2e 73 71 6c 69 74 65 33 5f 74 72 61 63 65  ds.sqlite3_trace
ed80: 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
ed90: 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
eda0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
edb0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
edc0: 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28  SetRollbackHook(
edd0: 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63 6b 43 61  SQLiteRollbackCa
ede0: 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
edf0: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
ee00: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
ee10: 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f  qlite3_rollback_
ee20: 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  hook(_sql, func,
ee30: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
ee40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
ee50: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
ee60: 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74 68 65 20 73  /// Allows the s
ee70: 65 74 74 69 6e 67 20 6f 66 20 61 20 6c 6f 67 67  etting of a logg
ee80: 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 6e 76  ing callback inv
ee90: 6f 6b 65 64 20 62 79 20 53 51 4c 69 74 65 20 77  oked by SQLite w
eea0: 68 65 6e 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c  hen a..    /// l
eeb0: 6f 67 20 65 76 65 6e 74 20 6f 63 63 75 72 73 2e  og event occurs.
eec0: 20 20 4f 6e 6c 79 20 6f 6e 65 20 63 61 6c 6c 62    Only one callb
eed0: 61 63 6b 20 6d 61 79 20 62 65 20 73 65 74 2e 20  ack may be set. 
eee0: 20 49 66 20 4e 55 4c 4c 20 69 73 20 70 61 73 73   If NULL is pass
eef0: 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65  ed,..    /// the
ef00: 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63   logging callbac
ef10: 6b 20 69 73 20 75 6e 72 65 67 69 73 74 65 72 65  k is unregistere
ef20: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  d...    /// </su
ef30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
ef40: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e  <param name="fun
ef50: 63 22 3e 54 68 65 20 63 61 6c 6c 62 61 63 6b 20  c">The callback 
ef60: 66 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f  function to invo
ef70: 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ke.</param>..   
ef80: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
ef90: 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74 20 63  turns a result c
efa0: 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ode</returns>.. 
efb0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
efc0: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
efd0: 43 6f 64 65 20 53 65 74 4c 6f 67 43 61 6c 6c 62  Code SetLogCallb
efe0: 61 63 6b 28 53 51 4c 69 74 65 4c 6f 67 43 61 6c  ack(SQLiteLogCal
eff0: 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20  lback func)..   
f000: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
f010: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
f020: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f030: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
f040: 66 69 67 5f 6c 6f 67 28 0d 0a 20 20 20 20 20 20  fig_log(..      
f050: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66        SQLiteConf
f060: 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  igOpsEnum.SQLITE
f070: 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 66 75 6e  _CONFIG_LOG, fun
f080: 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
f090: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
f0a0: 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  rn rc;..    }...
f0b0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
f0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f110: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
f120: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
f130: 2f 2f 20 43 72 65 61 74 65 73 20 61 20 6e 65 77  // Creates a new
f140: 20 53 51 4c 69 74 65 20 62 61 63 6b 75 70 20 6f   SQLite backup o
f150: 62 6a 65 63 74 20 62 61 73 65 64 20 6f 6e 20 74  bject based on t
f160: 68 65 20 70 72 6f 76 69 64 65 64 20 64 65 73 74  he provided dest
f170: 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f  ination..    ///
f180: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
f190: 74 69 6f 6e 2e 20 20 54 68 65 20 73 6f 75 72 63  tion.  The sourc
f1a0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
f1b0: 63 74 69 6f 6e 20 69 73 20 74 68 65 20 6f 6e 65  ction is the one
f1c0: 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69  ..    /// associ
f1d0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6f  ated with this o
f1e0: 62 6a 65 63 74 2e 20 20 54 68 65 20 73 6f 75 72  bject.  The sour
f1f0: 63 65 20 61 6e 64 20 64 65 73 74 69 6e 61 74 69  ce and destinati
f200: 6f 6e 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  on database..   
f210: 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73   /// connections
f220: 20 63 61 6e 6e 6f 74 20 62 65 20 74 68 65 20 73   cannot be the s
f230: 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ame...    /// </
f240: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
f250: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
f260: 65 73 74 43 6e 6e 22 3e 54 68 65 20 64 65 73 74  estCnn">The dest
f270: 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65  ination database
f280: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61   connection.</pa
f290: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
f2a0: 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 4e  aram name="destN
f2b0: 61 6d 65 22 3e 54 68 65 20 64 65 73 74 69 6e 61  ame">The destina
f2c0: 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 6e 61  tion database na
f2d0: 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  me.</param>..   
f2e0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
f2f0: 3d 22 73 6f 75 72 63 65 4e 61 6d 65 22 3e 54 68  ="sourceName">Th
f300: 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
f310: 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d  e name.</param>.
f320: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
f330: 73 3e 54 68 65 20 6e 65 77 6c 79 20 63 72 65 61  s>The newly crea
f340: 74 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ted backup objec
f350: 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  t.</returns>..  
f360: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
f370: 69 64 65 20 53 51 4c 69 74 65 42 61 63 6b 75 70  ide SQLiteBackup
f380: 20 49 6e 69 74 69 61 6c 69 7a 65 42 61 63 6b 75   InitializeBacku
f390: 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
f3a0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73  teConnection des
f3b0: 74 43 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20 73  tCnn,..        s
f3c0: 74 72 69 6e 67 20 64 65 73 74 4e 61 6d 65 2c 0d  tring destName,.
f3d0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
f3e0: 73 6f 75 72 63 65 4e 61 6d 65 0d 0a 20 20 20 20  sourceName..    
f3f0: 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
f400: 20 20 20 20 20 20 69 66 20 28 64 65 73 74 43 6e        if (destCn
f410: 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
f420: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
f430: 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
f440: 63 65 70 74 69 6f 6e 28 22 64 65 73 74 43 6e 6e  ception("destCnn
f450: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
f460: 66 20 28 64 65 73 74 4e 61 6d 65 20 3d 3d 20 6e  f (destName == n
f470: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
f480: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
f490: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
f4a0: 6e 28 22 64 65 73 74 4e 61 6d 65 22 29 3b 0d 0a  n("destName");..
f4b0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 6f  ..        if (so
f4c0: 75 72 63 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  urceName == null
f4d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
f4e0: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
f4f0: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
f500: 73 6f 75 72 63 65 4e 61 6d 65 22 29 3b 0d 0a 0d  sourceName");...
f510: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 33  .        SQLite3
f520: 20 64 65 73 74 53 71 6c 69 74 65 33 20 3d 20 64   destSqlite3 = d
f530: 65 73 74 43 6e 6e 2e 5f 73 71 6c 20 61 73 20 53  estCnn._sql as S
f540: 51 4c 69 74 65 33 3b 0d 0a 0d 0a 20 20 20 20 20  QLite3;....     
f550: 20 20 20 69 66 20 28 64 65 73 74 53 71 6c 69 74     if (destSqlit
f560: 65 33 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  e3 == null)..   
f570: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
f580: 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70  ew ArgumentExcep
f590: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
f5a0: 20 20 20 20 20 20 20 22 44 65 73 74 69 6e 61 74         "Destinat
f5b0: 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ion connection h
f5c0: 61 73 20 6e 6f 20 77 72 61 70 70 65 72 2e 22 2c  as no wrapper.",
f5d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f5e0: 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d    "destCnn");...
f5f0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43  .        SQLiteC
f600: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20  onnectionHandle 
f610: 64 65 73 74 48 61 6e 64 6c 65 20 3d 20 64 65 73  destHandle = des
f620: 74 53 71 6c 69 74 65 33 2e 5f 73 71 6c 3b 0d 0a  tSqlite3._sql;..
f630: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
f640: 73 74 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c  stHandle == null
f650: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
f660: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
f670: 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  tException(..   
f680: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
f690: 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63  stination connec
f6a0: 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61  tion has an inva
f6b0: 6c 69 64 20 68 61 6e 64 6c 65 2e 22 2c 0d 0a 20  lid handle.",.. 
f6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
f6d0: 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20  destCnn");....  
f6e0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
f6f0: 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 73 6f 75  ectionHandle sou
f700: 72 63 65 48 61 6e 64 6c 65 20 3d 20 5f 73 71 6c  rceHandle = _sql
f710: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
f720: 28 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 3d  (sourceHandle ==
f730: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
f740: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
f750: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
f760: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
f770: 20 20 20 20 20 20 20 20 20 20 22 53 6f 75 72 63            "Sourc
f780: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73  e connection has
f790: 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
f7a0: 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
f7b0: 20 20 62 79 74 65 5b 5d 20 7a 44 65 73 74 4e 61    byte[] zDestNa
f7c0: 6d 65 20 3d 20 54 6f 55 54 46 38 28 64 65 73 74  me = ToUTF8(dest
f7d0: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
f7e0: 62 79 74 65 5b 5d 20 7a 53 6f 75 72 63 65 4e 61  byte[] zSourceNa
f7f0: 6d 65 20 3d 20 54 6f 55 54 46 38 28 73 6f 75 72  me = ToUTF8(sour
f800: 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  ceName);....    
f810: 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
f820: 48 61 6e 64 6c 65 20 62 61 63 6b 75 70 48 61 6e  Handle backupHan
f830: 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  dle = null;.... 
f840: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
f850: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f860: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
f870: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
f880: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a        finally /*
f890: 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62   NOTE: Thread.Ab
f8a0: 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e  ort() protection
f8b0: 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d  . */..        {.
f8c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
f8d0: 50 74 72 20 62 61 63 6b 75 70 20 3d 20 55 6e 73  Ptr backup = Uns
f8e0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
f8f0: 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  .sqlite3_backup_
f900: 69 6e 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20  init(..         
f910: 20 20 20 20 20 20 20 64 65 73 74 48 61 6e 64 6c         destHandl
f920: 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f  e, zDestName, so
f930: 75 72 63 65 48 61 6e 64 6c 65 2c 20 7a 53 6f 75  urceHandle, zSou
f940: 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  rceName);....   
f950: 20 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63           if (bac
f960: 6b 75 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  kup == IntPtr.Ze
f970: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
f980: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
f990: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 52  QLiteException(R
f9a0: 65 73 75 6c 74 43 6f 64 65 28 29 2c 20 47 65 74  esultCode(), Get
f9b0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
f9c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61 63  .            bac
f9d0: 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20  kupHandle = new 
f9e0: 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
f9f0: 6c 65 28 64 65 73 74 48 61 6e 64 6c 65 2c 20 62  le(destHandle, b
fa00: 61 63 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20 20  ackup);..       
fa10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
fa20: 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 42  turn new SQLiteB
fa30: 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
fa40: 20 20 20 20 74 68 69 73 2c 20 62 61 63 6b 75 70      this, backup
fa50: 48 61 6e 64 6c 65 2c 20 64 65 73 74 48 61 6e 64  Handle, destHand
fa60: 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73  le, zDestName, s
fa70: 6f 75 72 63 65 48 61 6e 64 6c 65 2c 0d 0a 20 20  ourceHandle,..  
fa80: 20 20 20 20 20 20 20 20 20 20 7a 53 6f 75 72 63            zSourc
fa90: 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  eName);..    }..
faa0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
fab0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 70  ry>..    /// Cop
fac0: 69 65 73 20 75 70 20 74 6f 20 4e 20 70 61 67 65  ies up to N page
fad0: 73 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63  s from the sourc
fae0: 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  e database to th
faf0: 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20  e destination.. 
fb00: 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20     /// database 
fb10: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
fb20: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 62 61  the specified ba
fb30: 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20  ckup object...  
fb40: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
fb50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
fb60: 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54   name="backup">T
fb70: 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
fb80: 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e   to use.</param>
fb90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
fba0: 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22 3e 0d 0a   name="nPage">..
fbb0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
fbc0: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 63  er of pages to c
fbd0: 6f 70 79 2c 20 6e 65 67 61 74 69 76 65 20 74 6f  opy, negative to
fbe0: 20 63 6f 70 79 20 61 6c 6c 20 72 65 6d 61 69 6e   copy all remain
fbf0: 69 6e 67 20 70 61 67 65 73 2e 0d 0a 20 20 20 20  ing pages...    
fc00: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
fc10: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
fc20: 65 3d 22 72 65 74 72 79 22 3e 0d 0a 20 20 20 20  e="retry">..    
fc30: 2f 2f 2f 20 53 65 74 20 74 6f 20 74 72 75 65 20  /// Set to true 
fc40: 69 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  if the operation
fc50: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 74   needs to be ret
fc60: 72 69 65 64 20 64 75 65 20 74 6f 20 64 61 74 61  ried due to data
fc70: 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f  base..    /// lo
fc80: 63 6b 69 6e 67 20 69 73 73 75 65 73 3b 20 6f 74  cking issues; ot
fc90: 68 65 72 77 69 73 65 2c 20 73 65 74 20 74 6f 20  herwise, set to 
fca0: 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  false...    /// 
fcb0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
fcc0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
fcd0: 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 74 68 65   /// True if the
fce0: 72 65 20 61 72 65 20 6d 6f 72 65 20 70 61 67 65  re are more page
fcf0: 73 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2c 20  s to be copied, 
fd00: 66 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e  false otherwise.
fd10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
fd20: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
fd30: 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
fd40: 20 53 74 65 70 42 61 63 6b 75 70 28 0d 0a 20 20   StepBackup(..  
fd50: 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
fd60: 75 70 20 62 61 63 6b 75 70 2c 0d 0a 20 20 20 20  up backup,..    
fd70: 20 20 20 20 69 6e 74 20 6e 50 61 67 65 2c 0d 0a      int nPage,..
fd80: 20 20 20 20 20 20 20 20 6f 75 74 20 62 6f 6f 6c          out bool
fd90: 20 72 65 74 72 79 0d 0a 20 20 20 20 20 20 20 20   retry..        
fda0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
fdb0: 20 20 72 65 74 72 79 20 3d 20 66 61 6c 73 65 3b    retry = false;
fdc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
fdd0: 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d  backup == null).
fde0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
fdf0: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
fe00: 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61  ullException("ba
fe10: 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ckup");....     
fe20: 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48     SQLiteBackupH
fe30: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62  andle handle = b
fe40: 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61  ackup._sqlite_ba
fe50: 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ckup;....       
fe60: 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e   if (handle == n
fe70: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
fe80: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
fe90: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
fea0: 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
feb0: 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
fec0: 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
fed0: 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b  valid handle.");
fee0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
fef0: 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68  tr handlePtr = h
ff00: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
ff10: 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20    if (handlePtr 
ff20: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
ff30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
ff40: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
ff50: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
ff60: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
ff70: 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
ff80: 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
ff90: 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e   handle pointer.
ffa0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
ffb0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
ffc0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
ffd0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
ffe0: 61 63 6b 75 70 5f 73 74 65 70 28 68 61 6e 64 6c  ackup_step(handl
fff0: 65 50 74 72 2c 20 6e 50 61 67 65 29 3b 0d 0a 20  ePtr, nPage);.. 
10000 20 20 20 20 20 20 20 62 61 63 6b 75 70 2e 5f 73         backup._s
10010 74 65 70 52 65 73 75 6c 74 20 3d 20 6e 3b 20 2f  tepResult = n; /
10020 2a 20 4e 4f 54 45 3a 20 53 61 76 65 20 66 6f 72  * NOTE: Save for
10030 20 75 73 65 20 62 79 20 46 69 6e 69 73 68 42 61   use by FinishBa
10040 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20  ckup. */....    
10050 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
10060 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
10070 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
10080 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10090 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
100a0 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69  ..        else i
100b0 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
100c0 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20  rorCode.Busy).. 
100d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
100e0 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74 72        retry = tr
100f0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
10100 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
10110 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10120 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
10130 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
10140 4c 6f 63 6b 65 64 29 0d 0a 20 20 20 20 20 20 20  Locked)..       
10150 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10160 72 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20  retry = true;.. 
10170 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10180 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
10190 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
101a0 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
101b0 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 0d  ErrorCode.Done).
101c0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
101d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
101e0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  alse;..        }
101f0 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a  ..        else..
10200 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10210 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
10220 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
10230 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
10240 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ());..        }.
10250 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
10260 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
10270 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
10280 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
10290 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65   remaining to be
102a0 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65   copied from the
102b0 20 73 6f 75 72 63 65 0d 0a 20 20 20 20 2f 2f 2f   source..    ///
102c0 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
102d0 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
102e0 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
102f0 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
10300 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 61 63  ied..    /// bac
10310 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20  kup object...   
10320 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10330 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
10340 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68  name="backup">Th
10350 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
10360 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d  to check.</param
10370 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
10380 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f  rns>The number o
10390 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e  f pages remainin
103a0 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2e 3c  g to be copied.<
103b0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
103c0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
103d0 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e 67 42 61   int RemainingBa
103e0 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53  ckup(..        S
103f0 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b  QLiteBackup back
10400 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  up..        ).. 
10410 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
10420 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c   (backup == null
10430 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
10440 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
10450 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
10460 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20  backup");....   
10470 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
10480 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  pHandle handle =
10490 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f   backup._sqlite_
104a0 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20  backup;....     
104b0 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d     if (handle ==
104c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
104d0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
104e0 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
104f0 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
10500 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
10510 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
10520 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
10530 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
10540 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d  tPtr handlePtr =
10550 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
10560 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74      if (handlePt
10570 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r == IntPtr.Zero
10580 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
10590 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
105a0 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
105b0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
105c0 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
105d0 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
105e0 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65  id handle pointe
105f0 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r.");....       
10600 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
10610 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10620 74 65 33 5f 62 61 63 6b 75 70 5f 72 65 6d 61 69  te3_backup_remai
10630 6e 69 6e 67 28 68 61 6e 64 6c 65 50 74 72 29 3b  ning(handlePtr);
10640 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
10650 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
10660 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
10670 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
10680 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73  f pages in the s
10690 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20 61  ource database a
106a0 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 2f  ssociated..    /
106b0 2f 2f 20 77 69 74 68 20 74 68 65 20 73 70 65 63  // with the spec
106c0 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a  ified backup obj
106d0 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ect...    /// </
106e0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
106f0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
10700 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75  ackup">The backu
10710 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63  p object to chec
10720 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  k.</param>..    
10730 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
10740 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
10750 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f   pages in the so
10760 75 72 63 65 20 64 61 74 61 62 61 73 65 2e 3c 2f  urce database.</
10770 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
10780 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10790 69 6e 74 20 50 61 67 65 43 6f 75 6e 74 42 61 63  int PageCountBac
107a0 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51  kup(..        SQ
107b0 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75  LiteBackup backu
107c0 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  p..        )..  
107d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
107e0 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29  (backup == null)
107f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
10800 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
10810 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62  NullException("b
10820 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20  ackup");....    
10830 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
10840 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
10850 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62  backup._sqlite_b
10860 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20  ackup;....      
10870 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20    if (handle == 
10880 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
10890 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
108a0 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
108b0 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
108c0 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
108d0 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
108e0 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29  nvalid handle.")
108f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
10900 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20  Ptr handlePtr = 
10910 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
10920 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72     if (handlePtr
10930 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
10940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
10950 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
10960 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
10970 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
10980 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
10990 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
109a0 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72  d handle pointer
109b0 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
109c0 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
109d0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
109e0 65 33 5f 62 61 63 6b 75 70 5f 70 61 67 65 63 6f  e3_backup_pageco
109f0 75 6e 74 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d  unt(handlePtr);.
10a00 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
10a10 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
10a20 20 2f 2f 2f 20 44 65 73 74 72 6f 79 73 20 74 68   /// Destroys th
10a30 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2c  e backup object,
10a40 20 72 6f 6c 6c 69 6e 67 20 62 61 63 6b 20 61 6e   rolling back an
10a50 79 20 62 61 63 6b 75 70 20 74 68 61 74 20 6d 61  y backup that ma
10a60 79 20 62 65 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f  y be in..    ///
10a70 20 70 72 6f 67 65 73 73 2e 0d 0a 20 20 20 20 2f   progess...    /
10a80 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
10a90 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
10aa0 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
10ab0 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
10ac0 20 64 65 73 74 72 6f 79 2e 3c 2f 70 61 72 61 6d   destroy.</param
10ad0 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
10ae0 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 46 69  override void Fi
10af0 6e 69 73 68 42 61 63 6b 75 70 28 0d 0a 20 20 20  nishBackup(..   
10b00 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
10b10 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20  p backup..      
10b20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
10b30 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
10b40 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
10b50 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
10b60 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
10b70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
10b80 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
10b90 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
10ba0 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
10bb0 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
10bc0 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
10bd0 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
10be0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
10bf0 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
10c00 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
10c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
10c30 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
10c40 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
10c50 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
10c60 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
10c70 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
10c80 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
10c90 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
10ca0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
10cb0 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
10cc0 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
10cd0 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
10ce0 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
10cf0 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
10d00 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 23  pointer.");....#
10d10 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
10d20 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ARD..        SQL
10d30 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
10d40 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
10d50 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
10d60 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65 72  kup_finish_inter
10d70 6f 70 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a  op(handlePtr);..
10d80 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 53  #else..        S
10d90 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
10da0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
10db0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
10dc0 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 68 61 6e  ackup_finish(han
10dd0 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6e 64 69 66  dlePtr);..#endif
10de0 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65  ..        handle
10df0 2e 53 65 74 48 61 6e 64 6c 65 41 73 49 6e 76 61  .SetHandleAsInva
10e00 6c 69 64 28 29 3b 0d 0a 0d 0a 23 69 66 20 43 4f  lid();....#if CO
10e10 55 4e 54 5f 48 41 4e 44 4c 45 0d 0a 20 20 20 20  UNT_HANDLE..    
10e20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51      if ((n == SQ
10e30 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
10e40 29 20 7c 7c 20 28 6e 20 3d 3d 20 62 61 63 6b 75  ) || (n == backu
10e50 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29 20  p._stepResult)) 
10e60 68 61 6e 64 6c 65 2e 57 61 73 52 65 6c 65 61 73  handle.WasReleas
10e70 65 64 4f 6b 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  edOk();..#endif.
10e80 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
10e90 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
10ea0 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6e 20 21  Code.Ok) && (n !
10eb0 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65  = backup._stepRe
10ec0 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20  sult))..        
10ed0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
10ee0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
10ef0 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
10f00 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
10f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
10f70 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
10f80 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65  ary>..    /// De
10f90 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20  termines if the 
10fa0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
10fb0 61 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69  ary has been ini
10fc0 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65  tialized for the
10fd0 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e  ..    /// curren
10fe0 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
10ff0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
11000 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
11010 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f  >..    /// A boo
11020 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20  lean indicating 
11030 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
11040 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
11050 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d  ibrary has been.
11060 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c  .    /// initial
11070 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75 72  ized for the cur
11080 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process... 
11090 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
110a0 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
110b0 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
110c0 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20  Initialized().. 
110d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
110e0 74 75 72 6e 20 53 74 61 74 69 63 49 73 49 6e 69  turn StaticIsIni
110f0 74 69 61 6c 69 7a 65 64 28 29 3b 0d 0a 20 20 20  tialized();..   
11100 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
11110 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
11120 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74   Determines if t
11130 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
11140 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 20  ibrary has been 
11150 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
11160 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72  the..    /// cur
11170 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process... 
11180 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
11190 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
111a0 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20  rns>..    /// A 
111b0 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69  boolean indicati
111c0 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
111d0 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  t the SQLite cor
111e0 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
111f0 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74  en..    /// init
11200 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 20  ialized for the 
11210 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
11220 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
11230 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
11240 61 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 53  al static bool S
11250 74 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69 7a  taticIsInitializ
11260 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
11270 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11280 20 2f 2f 20 42 55 47 46 49 58 3a 20 50 72 65 76   // BUGFIX: Prev
11290 65 6e 74 20 72 61 63 65 73 20 77 69 74 68 20 6f  ent races with o
112a0 74 68 65 72 20 74 68 72 65 61 64 73 20 66 6f 72  ther threads for
112b0 20 74 68 69 73 20 65 6e 74 69 72 65 20 62 6c 6f   this entire blo
112c0 63 6b 2c 20 64 75 65 0d 0a 20 20 20 20 20 20 20  ck, due..       
112d0 20 2f 2f 20 20 20 20 20 20 20 20 20 74 6f 20 74   //         to t
112e0 68 65 20 74 72 79 2f 66 69 6e 61 6c 6c 79 20 73  he try/finally s
112f0 65 6d 61 6e 74 69 63 73 2e 20 20 53 65 65 20 74  emantics.  See t
11300 69 63 6b 65 74 20 5b 37 32 39 30 35 63 39 61 37  icket [72905c9a7
11310 37 5d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  7]...        //.
11320 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73  .        lock (s
11330 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20  yncRoot)..      
11340 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11350 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11360 20 2f 2f 20 4e 4f 54 45 3a 20 53 61 76 65 20 74   // NOTE: Save t
11370 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
11380 6c 6f 67 67 69 6e 67 20 63 6c 61 73 73 20 61 6e  logging class an
11390 64 20 74 68 65 6e 20 72 65 73 74 6f 72 65 20 69  d then restore i
113a0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  t..            /
113b0 2f 20 20 20 20 20 20 20 61 66 74 65 72 20 77 65  /       after we
113c0 20 61 72 65 20 64 6f 6e 65 20 74 6f 20 61 76 6f   are done to avo
113d0 69 64 20 6c 6f 67 67 69 6e 67 20 74 6f 6f 20 6d  id logging too m
113e0 61 6e 79 20 66 61 6c 73 65 20 65 72 72 6f 72 73  any false errors
113f0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
11400 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  /..            b
11410 6f 6f 6c 20 73 61 76 65 64 45 6e 61 62 6c 65 64  ool savedEnabled
11420 20 3d 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61   = SQLiteLog.Ena
11430 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  bled;..         
11440 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61     SQLiteLog.Ena
11450 62 6c 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  bled = false;...
11460 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
11470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
11480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11490 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
114a0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
114b0 69 73 20 6d 65 74 68 6f 64 20 5b 61 62 5d 75 73  is method [ab]us
114c0 65 73 20 74 68 65 20 66 61 63 74 20 74 68 61 74  es the fact that
114d0 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77   SQLite will alw
114e0 61 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ays..           
114f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65       //       re
11500 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
11510 52 20 66 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f 77  R for any unknow
11520 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  n configuration 
11530 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  option..        
11540 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
11550 20 2a 75 6e 6c 65 73 73 2a 20 74 68 65 20 53 51   *unless* the SQ
11560 4c 69 74 65 20 6c 69 62 72 61 72 79 20 68 61 73  Lite library has
11570 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e   already been in
11580 69 74 69 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20  itialized...    
11590 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
115a0 20 20 20 20 20 49 6e 20 74 68 61 74 20 63 61 73       In that cas
115b0 65 20 69 74 20 77 69 6c 6c 20 61 6c 77 61 79 73  e it will always
115c0 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
115d0 49 53 55 53 45 2e 0d 0a 20 20 20 20 20 20 20 20  ISUSE...        
115e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
115f0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
11600 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
11610 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11620 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
11630 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20 20 20 20 20  fig_none(..     
11640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
11650 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e  QLiteConfigOpsEn
11660 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  um.SQLITE_CONFIG
11670 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20 20 20 20 20  _NONE);....     
11680 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11690 6e 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  n (rc == SQLiteE
116a0 72 72 6f 72 43 6f 64 65 2e 4d 69 73 75 73 65 29  rrorCode.Misuse)
116b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
116c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69  ..            fi
116d0 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
116e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
116f0 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
11700 45 6e 61 62 6c 65 64 20 3d 20 73 61 76 65 64 45  Enabled = savedE
11710 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20  nabled;..       
11720 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11730 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
11740 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
11750 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20 66 75     /// Helper fu
11760 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74 72 69 65  nction to retrie
11770 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 64  ve a column of d
11780 61 74 61 20 66 72 6f 6d 20 61 6e 20 61 63 74 69  ata from an acti
11790 76 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20  ve statement... 
117a0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
117b0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
117c0 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68  m name="stmt">Th
117d0 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  e statement bein
117e0 67 20 73 74 65 70 28 29 27 64 20 74 68 72 6f 75  g step()'d throu
117f0 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  gh</param>..    
11800 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
11810 22 66 6c 61 67 73 22 3e 54 68 65 20 66 6c 61 67  "flags">The flag
11820 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
11830 68 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  h the connection
11840 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
11850 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
11860 69 6e 64 65 78 22 3e 54 68 65 20 63 6f 6c 75 6d  index">The colum
11870 6e 20 69 6e 64 65 78 20 74 6f 20 72 65 74 72 69  n index to retri
11880 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eve</param>..   
11890 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
118a0 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
118b0 6f 66 20 64 61 74 61 20 63 6f 6e 74 61 69 6e 65  of data containe
118c0 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  d in the column.
118d0 20 20 49 66 20 55 6e 69 6e 69 74 69 61 6c 69 7a    If Uninitializ
118e0 65 64 2c 20 74 68 69 73 20 66 75 6e 63 74 69 6f  ed, this functio
118f0 6e 20 77 69 6c 6c 20 72 65 74 72 69 65 76 65 20  n will retrieve 
11900 74 68 65 20 64 61 74 61 74 79 70 65 20 69 6e 66  the datatype inf
11910 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d  ormation.</param
11920 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
11930 72 6e 73 3e 52 65 74 75 72 6e 73 20 74 68 65 20  rns>Returns the 
11940 64 61 74 61 20 69 6e 20 74 68 65 20 63 6f 6c 75  data in the colu
11950 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  mn</returns>..  
11960 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
11970 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56 61  ide object GetVa
11980 6c 75 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  lue(SQLiteStatem
11990 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
119a0 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
119b0 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
119c0 2c 20 53 51 4c 69 74 65 54 79 70 65 20 74 79 70  , SQLiteType typ
119d0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
119e0 69 66 20 28 49 73 4e 75 6c 6c 28 73 74 6d 74 2c  if (IsNull(stmt,
119f0 20 69 6e 64 65 78 29 29 20 72 65 74 75 72 6e 20   index)) return 
11a00 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20  DBNull.Value;.. 
11a10 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
11a20 79 20 61 66 66 20 3d 20 74 79 70 2e 41 66 66 69  y aff = typ.Affi
11a30 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 54 79 70  nity;..      Typ
11a40 65 20 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  e t = null;.... 
11a50 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70       if (typ.Typ
11a60 65 20 21 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65  e != DbType.Obje
11a70 63 74 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ct)..      {..  
11a80 20 20 20 20 20 20 74 20 3d 20 53 51 4c 69 74 65        t = SQLite
11a90 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65 54 79  Convert.SQLiteTy
11aa0 70 65 54 6f 54 79 70 65 28 74 79 70 29 3b 0d 0a  peToType(typ);..
11ab0 20 20 20 20 20 20 20 20 61 66 66 20 3d 20 54 79          aff = Ty
11ac0 70 65 54 6f 41 66 66 69 6e 69 74 79 28 74 29 3b  peToAffinity(t);
11ad0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
11ae0 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
11af0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
11b00 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73 54 65  Flags.GetAllAsTe
11b10 78 74 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  xt) == SQLiteCon
11b20 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74  nectionFlags.Get
11b30 41 6c 6c 41 73 54 65 78 74 29 0d 0a 20 20 20 20  AllAsText)..    
11b40 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
11b50 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
11b60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74  );....      swit
11b70 63 68 20 28 61 66 66 29 0d 0a 20 20 20 20 20 20  ch (aff)..      
11b80 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  {..        case 
11b90 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f  TypeAffinity.Blo
11ba0 62 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  b:..          if
11bb0 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62   (typ.Type == Db
11bc0 54 79 70 65 2e 47 75 69 64 20 26 26 20 74 79 70  Type.Guid && typ
11bd0 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70  .Affinity == Typ
11be0 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74 29 0d  eAffinity.Text).
11bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
11c00 75 72 6e 20 6e 65 77 20 47 75 69 64 28 47 65 74  urn new Guid(Get
11c10 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
11c20 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
11c30 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29 47 65   int n = (int)Ge
11c40 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64  tBytes(stmt, ind
11c50 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20  ex, 0, null, 0, 
11c60 30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  0);..          b
11c70 79 74 65 5b 5d 20 62 20 3d 20 6e 65 77 20 62 79  yte[] b = new by
11c80 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20  te[n];..        
11c90 20 20 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c    GetBytes(stmt,
11ca0 20 69 6e 64 65 78 2c 20 30 2c 20 62 2c 20 30 2c   index, 0, b, 0,
11cb0 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   n);....        
11cc0 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d    if (typ.Type =
11cd0 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26  = DbType.Guid &&
11ce0 20 6e 20 3d 3d 20 31 36 29 0d 0a 20 20 20 20 20   n == 16)..     
11cf0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
11d00 77 20 47 75 69 64 28 62 29 3b 0d 0a 0d 0a 20 20  w Guid(b);....  
11d10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62          return b
11d20 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
11d30 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74  TypeAffinity.Dat
11d40 65 54 69 6d 65 3a 0d 0a 20 20 20 20 20 20 20 20  eTime:..        
11d50 20 20 72 65 74 75 72 6e 20 47 65 74 44 61 74 65    return GetDate
11d60 54 69 6d 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  Time(stmt, index
11d70 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  );..        case
11d80 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f   TypeAffinity.Do
11d90 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20  uble:..         
11da0 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20   if (t == null) 
11db0 72 65 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65  return GetDouble
11dc0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
11dd0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11de0 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54   Convert.ChangeT
11df0 79 70 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74  ype(GetDouble(st
11e00 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e  mt, index), t, n
11e10 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 63  ull);..        c
11e20 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
11e30 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20  .Int64:..       
11e40 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c     if (t == null
11e50 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36  ) return GetInt6
11e60 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  4(stmt, index);.
11e70 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
11e80 20 3d 3d 20 74 79 70 65 6f 66 28 53 42 79 74 65   == typeof(SByte
11e90 29 29 20 72 65 74 75 72 6e 20 47 65 74 53 42 79  )) return GetSBy
11ea0 74 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te(stmt, index);
11eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
11ec0 74 20 3d 3d 20 74 79 70 65 6f 66 28 42 79 74 65  t == typeof(Byte
11ed0 29 29 20 72 65 74 75 72 6e 20 47 65 74 42 79 74  )) return GetByt
11ee0 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e(stmt, index);.
11ef0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
11f00 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74 31 36   == typeof(Int16
11f10 29 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74  )) return GetInt
11f20 31 36 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  16(stmt, index);
11f30 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
11f40 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74  t == typeof(UInt
11f50 31 36 29 29 20 72 65 74 75 72 6e 20 47 65 74 55  16)) return GetU
11f60 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e 64 65  Int16(stmt, inde
11f70 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
11f80 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49  f (t == typeof(I
11f90 6e 74 33 32 29 29 20 72 65 74 75 72 6e 20 47 65  nt32)) return Ge
11fa0 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64  tInt32(stmt, ind
11fb0 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
11fc0 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
11fd0 55 49 6e 74 33 32 29 29 20 72 65 74 75 72 6e 20  UInt32)) return 
11fe0 47 65 74 55 49 6e 74 33 32 28 73 74 6d 74 2c 20  GetUInt32(stmt, 
11ff0 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
12000 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
12010 6f 66 28 55 49 6e 74 36 34 29 29 20 72 65 74 75  of(UInt64)) retu
12020 72 6e 20 47 65 74 55 49 6e 74 36 34 28 73 74 6d  rn GetUInt64(stm
12030 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
12040 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e        return Con
12050 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28  vert.ChangeType(
12060 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
12070 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b  ndex), t, null);
12080 0d 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 6c  ..        defaul
12090 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  t:..          re
120a0 74 75 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d  turn GetText(stm
120b0 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
120c0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
120d0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
120e0 69 64 65 20 69 6e 74 20 47 65 74 43 75 72 73 6f  ide int GetCurso
120f0 72 46 6f 72 54 61 62 6c 65 28 53 51 4c 69 74 65  rForTable(SQLite
12100 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
12110 69 6e 74 20 64 62 2c 20 69 6e 74 20 72 6f 6f 74  int db, int root
12120 50 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  Page)..    {..#i
12130 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
12140 52 44 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  RD..      return
12150 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
12160 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62  hods.sqlite3_tab
12170 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65 72 6f  le_cursor_intero
12180 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
12190 74 6d 74 2c 20 64 62 2c 20 72 6f 6f 74 50 61 67  tmt, db, rootPag
121a0 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
121b0 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 23 65    return -1;..#e
121c0 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
121d0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
121e0 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 52 6f 77  ride long GetRow
121f0 49 64 46 6f 72 43 75 72 73 6f 72 28 53 51 4c 69  IdForCursor(SQLi
12200 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
12210 2c 20 69 6e 74 20 63 75 72 73 6f 72 29 0d 0a 20  , int cursor).. 
12220 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
12230 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
12240 20 20 6c 6f 6e 67 20 72 6f 77 69 64 3b 0d 0a 20    long rowid;.. 
12250 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
12260 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
12270 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
12280 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f 77  lite3_cursor_row
12290 69 64 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  id_interop(stmt.
122a0 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 63 75  _sqlite_stmt, cu
122b0 72 73 6f 72 2c 20 6f 75 74 20 72 6f 77 69 64 29  rsor, out rowid)
122c0 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63 20  ;..      if (rc 
122d0 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
122e0 64 65 2e 4f 6b 29 20 72 65 74 75 72 6e 20 72 6f  de.Ok) return ro
122f0 77 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  wid;....      re
12300 74 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a  turn 0;..#else..
12310 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d        return 0;.
12320 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
12330 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
12340 76 65 72 72 69 64 65 20 76 6f 69 64 20 47 65 74  verride void Get
12350 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e  IndexColumnExten
12360 64 65 64 49 6e 66 6f 28 73 74 72 69 6e 67 20 64  dedInfo(string d
12370 61 74 61 62 61 73 65 2c 20 73 74 72 69 6e 67 20  atabase, string 
12380 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 63 6f  index, string co
12390 6c 75 6d 6e 2c 20 6f 75 74 20 69 6e 74 20 73 6f  lumn, out int so
123a0 72 74 4d 6f 64 65 2c 20 6f 75 74 20 69 6e 74 20  rtMode, out int 
123b0 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20 73 74 72  onError, out str
123c0 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71  ing collationSeq
123d0 75 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d 0a 23  uence)..    {..#
123e0 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
123f0 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ARD..      IntPt
12400 72 20 63 6f 6c 6c 3b 0d 0a 20 20 20 20 20 20 69  r coll;..      i
12410 6e 74 20 63 6f 6c 6c 6c 65 6e 3b 0d 0a 20 20 20  nt colllen;..   
12420 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
12430 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20  de rc;....      
12440 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
12450 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12460 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e  _index_column_in
12470 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c  fo_interop(_sql,
12480 20 54 6f 55 54 46 38 28 64 61 74 61 62 61 73 65   ToUTF8(database
12490 29 2c 20 54 6f 55 54 46 38 28 69 6e 64 65 78 29  ), ToUTF8(index)
124a0 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29  , ToUTF8(column)
124b0 2c 20 6f 75 74 20 73 6f 72 74 4d 6f 64 65 2c 20  , out sortMode, 
124c0 6f 75 74 20 6f 6e 45 72 72 6f 72 2c 20 6f 75 74  out onError, out
124d0 20 63 6f 6c 6c 2c 20 6f 75 74 20 63 6f 6c 6c 6c   coll, out colll
124e0 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  en);..      if (
124f0 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc != SQLiteErro
12500 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
12510 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
12520 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29 3b 0d 0a  ion(rc, null);..
12530 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f  ..      collatio
12540 6e 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46 38  nSequence = UTF8
12550 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 2c 20 63  ToString(coll, c
12560 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  olllen);..#else.
12570 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f 64 65 20  .      sortMode 
12580 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f 6e 45 72  = 0;..      onEr
12590 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20 20 20 20  ror = 2;..      
125a0 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  collationSequenc
125b0 65 20 3d 20 22 42 49 4e 41 52 59 22 3b 0d 0a 23  e = "BINARY";..#
125c0 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
125d0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
125e0 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
125f0 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e 74 72 6f  rCode FileContro
12600 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e 61 6d 65  l(string zDbName
12610 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74 50 74 72  , int op, IntPtr
12620 20 70 41 72 67 29 0d 0a 20 20 20 20 7b 0d 0a 20   pArg)..    {.. 
12630 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
12640 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12650 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
12660 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44 62 4e  trol(_sql, (zDbN
12670 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54  ame != null) ? T
12680 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65 29 20 3a  oUTF8(zDbName) :
12690 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41 72 67 29   null, op, pArg)
126a0 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d  ;..    }..  }..}
126b0 0d 0a                                            ..