System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 6e973d8598ad222eb9ca3088d4f996e653aad368:


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 2f 2f 2f 20  ////....    /// 
0c40: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0c50: 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 74 68  // Constructs th
0c60: 65 20 6f 62 6a 65 63 74 20 75 73 65 64 20 74 6f  e object used to
0c70: 20 69 6e 74 65 72 61 63 74 20 77 69 74 68 20 74   interact with t
0c80: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
0c90: 69 62 72 61 72 79 0d 0a 20 20 20 20 2f 2f 2f 20  ibrary..    /// 
0ca0: 75 73 69 6e 67 20 74 68 65 20 55 54 46 2d 38 20  using the UTF-8 
0cb0: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 0d 0a  text encoding...
0cc0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0cd0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
0ce0: 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e 0d 0a  am name="fmt">..
0cf0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 44 61 74 65      /// The Date
0d00: 54 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20 62  Time format to b
0d10: 65 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6e 76  e used when conv
0d20: 65 72 74 69 6e 67 20 73 74 72 69 6e 67 20 76 61  erting string va
0d30: 6c 75 65 73 20 74 6f 20 61 0d 0a 20 20 20 20 2f  lues to a..    /
0d40: 2f 2f 20 44 61 74 65 54 69 6d 65 20 61 6e 64 20  // DateTime and 
0d50: 62 69 6e 64 69 6e 67 20 44 61 74 65 54 69 6d 65  binding DateTime
0d60: 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20   parameters...  
0d70: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
0d80: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
0d90: 61 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20 20 20  ame="kind">..   
0da0: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
0db0: 65 66 3d 22 44 61 74 65 54 69 6d 65 4b 69 6e 64  ef="DateTimeKind
0dc0: 22 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64 20  " /> to be used 
0dd0: 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 44 61  when creating Da
0de0: 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20  teTime..    /// 
0df0: 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f  values...    ///
0e00: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
0e10: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0e20: 66 6d 74 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20  fmtString">..   
0e30: 20 2f 2f 2f 20 54 68 65 20 66 6f 72 6d 61 74 20   /// The format 
0e40: 73 74 72 69 6e 67 20 74 6f 20 62 65 20 75 73 65  string to be use
0e50: 64 20 77 68 65 6e 20 70 61 72 73 69 6e 67 20 61  d when parsing a
0e60: 6e 64 20 66 6f 72 6d 61 74 74 69 6e 67 20 44 61  nd formatting Da
0e70: 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20  teTime..    /// 
0e80: 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f  values...    ///
0e90: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
0ea0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0eb0: 64 62 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  db">..    /// Th
0ec0: 65 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20  e native handle 
0ed0: 74 6f 20 62 65 20 61 73 73 6f 63 69 61 74 65 64  to be associated
0ee0: 20 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61   with the databa
0ef0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  se connection...
0f00: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
0f10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0f20: 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22   name="fileName"
0f30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
0f40: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66  ully qualified f
0f50: 69 6c 65 20 6e 61 6d 65 20 61 73 73 6f 63 69 61  ile name associa
0f60: 74 65 64 20 77 69 74 68 20 3c 70 61 72 61 6d 72  ted with <paramr
0f70: 65 66 20 6e 61 6d 65 3d 22 64 62 20 22 2f 3e 2e  ef name="db "/>.
0f80: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
0f90: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
0fa0: 61 6d 20 6e 61 6d 65 3d 22 6f 77 6e 48 61 6e 64  am name="ownHand
0fb0: 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  le">..    /// No
0fc0: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 65  n-zero if the ne
0fd0: 77 6c 79 20 63 72 65 61 74 65 64 20 6f 62 6a 65  wly created obje
0fe0: 63 74 20 69 6e 73 74 61 6e 63 65 20 77 69 6c 6c  ct instance will
0ff0: 20 6e 65 65 64 20 74 6f 20 64 69 73 70 6f 73 65   need to dispose
1000: 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 3c 70 61  ..    /// of <pa
1010: 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 64 62 22  ramref name="db"
1020: 20 2f 3e 20 77 68 65 6e 20 69 74 20 69 73 20 6e   /> when it is n
1030: 6f 20 6c 6f 6e 67 65 72 20 6e 65 65 64 65 64 2e  o longer needed.
1040: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
1050: 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
1060: 20 53 51 4c 69 74 65 33 28 0d 0a 20 20 20 20 20   SQLite3(..     
1070: 20 20 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72     SQLiteDateFor
1080: 6d 61 74 73 20 66 6d 74 2c 0d 0a 20 20 20 20 20  mats fmt,..     
1090: 20 20 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20     DateTimeKind 
10a0: 6b 69 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 73  kind,..        s
10b0: 74 72 69 6e 67 20 66 6d 74 53 74 72 69 6e 67 2c  tring fmtString,
10c0: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
10d0: 20 64 62 2c 0d 0a 20 20 20 20 20 20 20 20 73 74   db,..        st
10e0: 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
10f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f 77 6e          bool own
1100: 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20  Handle..        
1110: 29 0d 0a 20 20 20 20 20 20 3a 20 62 61 73 65 28  )..      : base(
1120: 66 6d 74 2c 20 6b 69 6e 64 2c 20 66 6d 74 53 74  fmt, kind, fmtSt
1130: 72 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ring)..    {..  
1140: 20 20 20 20 20 20 69 66 20 28 64 62 20 21 3d 20        if (db != 
1150: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
1160: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1170: 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20       _sql = new 
1180: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1190: 48 61 6e 64 6c 65 28 64 62 2c 20 6f 77 6e 48 61  Handle(db, ownHa
11a0: 6e 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndle);..        
11b0: 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20      _fileName = 
11c0: 66 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  fileName;..     
11d0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
11e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
11f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1240: 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
1250: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50  n IDisposable "P
1260: 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d  attern" Members.
1270: 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f  .    private boo
1280: 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20  l disposed;..   
1290: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
12a0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a  eckDisposed() /*
12b0: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b   throw */..    {
12c0: 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44  ..#if THROW_ON_D
12d0: 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20  ISPOSED..       
12e0: 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a   if (disposed)..
12f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1300: 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70  w new ObjectDisp
1310: 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74 79  osedException(ty
1320: 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2e 4e 61  peof(SQLite3).Na
1330: 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  me);..#endif..  
1340: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
1350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
13b0: 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72    protected over
13c0: 72 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73  ride void Dispos
13d0: 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67  e(bool disposing
13e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
13f0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
1400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1410: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
1420: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1430: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69               //i
1440: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
1450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1460: 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  /{..            
1470: 20 20 20 20 2f 2f 20 20 20 20 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 0d 0a  //////////////..
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b0: 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65  //    // dispose
14c0: 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
14d0: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
14e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
14f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1510: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
1520: 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20          //}.... 
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1560: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1570: 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73         // releas
1580: 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f  e unmanaged reso
1590: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54  /////....#if INT
15e0: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
15f0: 4c 45 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  LE..            
1600: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1610: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1620: 20 49 66 20 61 6e 79 20 6d 6f 64 75 6c 65 73 20   If any modules 
1630: 77 65 72 65 20 63 72 65 61 74 65 64 2c 20 61 74  were created, at
1640: 74 65 6d 70 74 20 74 6f 20 64 69 73 70 6f 73 65  tempt to dispose
1650: 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20   of..           
1660: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
1670: 65 6d 20 6e 6f 77 2e 20 20 54 68 69 73 20 63 6f  em now.  This co
1680: 64 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74  de is designed t
1690: 6f 20 61 76 6f 69 64 20 74 68 72 6f 77 69 6e 67  o avoid throwing
16a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16b0: 20 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70    //       excep
16c0: 74 69 6f 6e 73 20 75 6e 6c 65 73 73 20 74 68 65  tions unless the
16d0: 20 44 69 73 70 6f 73 65 20 6d 65 74 68 6f 64 20   Dispose method 
16e0: 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 0d 0a 20  of the module.. 
16f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1700: 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 74  /       itself t
1710: 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74 69  hrows an excepti
1720: 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on...           
1730: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1740: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f           if (_mo
1750: 64 75 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a  dules != null)..
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1770: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1780: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
1790: 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74 72  KeyValuePair<str
17a0: 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c  ing, SQLiteModul
17b0: 65 3e 20 70 61 69 72 20 69 6e 20 5f 6d 6f 64 75  e> pair in _modu
17c0: 6c 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  les)..          
17d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f0: 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
1800: 65 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69 72 2e  e module = pair.
1810: 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  Value;....      
1820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1830: 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
1840: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1860: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1880: 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44          module.D
1890: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18c0: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
18e0: 6c 6f 73 65 28 66 61 6c 73 65 29 3b 20 2f 2a 20  lose(false); /* 
18f0: 44 69 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e 6f  Disposing, canno
1900: 74 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a 0d 0a 20  t throw. */.... 
1910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1920: 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d  isposed = true;.
1930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1940: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1950: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
1960: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1970: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
1980: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 20 20 20  disposing);..   
1990: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
19a0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
19b0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
19c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a10: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49  ////....    // I
1a20: 74 20 69 73 6e 27 74 20 6e 65 63 65 73 73 61 72  t isn't necessar
1a30: 79 20 74 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79  y to cleanup any
1a40: 20 66 75 6e 63 74 69 6f 6e 73 20 77 65 27 76 65   functions we've
1a50: 20 72 65 67 69 73 74 65 72 65 64 2e 20 20 49 66   registered.  If
1a60: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d   the connection.
1a70: 0a 20 20 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20  .    // goes to 
1a80: 74 68 65 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20  the pool and is 
1a90: 72 65 73 75 72 72 65 63 74 65 64 20 6c 61 74 65  resurrected late
1aa0: 72 2c 20 72 65 2d 72 65 67 69 73 74 65 72 65 64  r, re-registered
1ab0: 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20   functions will 
1ac0: 6f 76 65 72 77 72 69 74 65 20 74 68 65 0d 0a 20  overwrite the.. 
1ad0: 20 20 20 2f 2f 20 70 72 65 76 69 6f 75 73 20 66     // previous f
1ae0: 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 53  unctions.  The S
1af0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f  QLiteFunctionCoo
1b00: 6b 69 65 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74  kieHandle will t
1b10: 61 6b 65 20 63 61 72 65 20 6f 66 20 66 72 65 65  ake care of free
1b20: 69 6e 67 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20  ing unmanaged.. 
1b30: 20 20 20 2f 2f 20 72 65 73 6f 75 72 63 65 73 20     // resources 
1b40: 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65  belonging to the
1b50: 20 70 72 65 76 69 6f 75 73 6c 79 2d 72 65 67 69   previously-regi
1b60: 73 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73  stered functions
1b70: 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1b80: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c  override void Cl
1b90: 6f 73 65 28 62 6f 6f 6c 20 63 61 6e 54 68 72 6f  ose(bool canThro
1ba0: 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  w)..    {..     
1bb0: 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c   if (_sql != nul
1bc0: 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
1bd0: 20 20 20 20 20 20 20 69 66 20 28 21 5f 73 71 6c         if (!_sql
1be0: 2e 4f 77 6e 48 61 6e 64 6c 65 29 0d 0a 20 20 20  .OwnHandle)..   
1bf0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c00: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
1c10: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
1c20: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20      return;..   
1c30: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1c40: 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f        if (_usePo
1c50: 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ol)..          {
1c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c70: 69 66 20 28 53 51 4c 69 74 65 42 61 73 65 2e 52  if (SQLiteBase.R
1c80: 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f  esetConnection(_
1c90: 73 71 6c 2c 20 5f 73 71 6c 2c 20 63 61 6e 54 68  sql, _sql, canTh
1ca0: 72 6f 77 29 29 0d 0a 20 20 20 20 20 20 20 20 20  row))..         
1cb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1cc0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1cd0: 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41  ConnectionPool.A
1ce0: 64 64 28 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 73  dd(_fileName, _s
1cf0: 71 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e  ql, _poolVersion
1d00: 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  );....#if !NET_C
1d10: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
1d20: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d40: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
1d50: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
1d60: 43 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 53 75 63  Close (Pool) Suc
1d70: 63 65 73 73 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c  cess: {0}", _sql
1d80: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
1d90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69             }..#i
1da0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
1db0: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
1dc0: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
1dd0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
1de0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1e00: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74  ace.WriteLine(St
1e10: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43 6c 6f  ring.Format("Clo
1e20: 73 65 20 28 50 6f 6f 6c 29 20 46 61 69 6c 75 72  se (Pool) Failur
1e30: 65 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29 29 3b  e: {0}", _sql));
1e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e50: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
1e60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1e70: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1e80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e90: 20 20 20 5f 73 71 6c 2e 44 69 73 70 6f 73 65 28     _sql.Dispose(
1ea0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
1eb0: 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20  .          _sql 
1ec0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d  = null;..      }
1ed0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1f40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1f50: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74  ry>..    /// Att
1f60: 65 6d 70 74 73 20 74 6f 20 69 6e 74 65 72 72 75  empts to interru
1f70: 70 74 20 74 68 65 20 71 75 65 72 79 20 63 75 72  pt the query cur
1f80: 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
1f90: 20 6f 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74   on the associat
1fa0: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69  ed..    /// nati
1fb0: 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ve database conn
1fc0: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
1fd0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1fe0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
1ff0: 64 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28 29  de void Cancel()
2000: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
2010: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2020: 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  ds.sqlite3_inter
2030: 72 75 70 74 28 5f 73 71 6c 29 3b 0d 0a 20 20 20  rupt(_sql);..   
2040: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
2050: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
2060: 6e 67 20 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  ng Version..    
2070: 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20  {..      get..  
2080: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
2090: 65 74 75 72 6e 20 53 51 4c 69 74 65 33 2e 53 51  eturn SQLite3.SQ
20a0: 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20  LiteVersion;..  
20b0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
20c0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
20d0: 72 72 69 64 65 20 69 6e 74 20 56 65 72 73 69 6f  rride int Versio
20e0: 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a  nNumber..    {..
20f0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
2100: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
2110: 72 6e 20 53 51 4c 69 74 65 33 2e 53 51 4c 69 74  rn SQLite3.SQLit
2120: 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d  eVersionNumber;.
2130: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
2140: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2150: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
2160: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20  fineConstants.. 
2170: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65     {..        ge
2180: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
2190: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
21a0: 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d  Builder result =
21b0: 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64   new StringBuild
21c0: 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  er();..         
21d0: 20 20 20 49 4c 69 73 74 3c 73 74 72 69 6e 67 3e     IList<string>
21e0: 20 6c 69 73 74 20 3d 20 53 51 4c 69 74 65 44 65   list = SQLiteDe
21f0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 2e 4f 70  fineConstants.Op
2200: 74 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20  tionList;....   
2210: 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 69 73           if (lis
2220: 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
2230: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2240: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
2250: 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d 65  ch (string eleme
2260: 6e 74 20 69 6e 20 6c 69 73 74 29 0d 0a 20 20 20  nt in list)..   
2270: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2290: 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20      if (element 
22a0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
22b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
22d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e0: 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65     if (result.Le
22f0: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
2300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2310: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
2320: 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  (' ');....      
2330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2340: 73 75 6c 74 2e 41 70 70 65 6e 64 28 65 6c 65 6d  sult.Append(elem
2350: 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ent);..         
2360: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2370: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2380: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
2390: 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b  sult.ToString();
23a0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
23b0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
23c0: 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  al static string
23d0: 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a   SQLiteVersion..
23e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
23f0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
2400: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
2410: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
2420: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2430: 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 2c  e3_libversion(),
2440: 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a   -1);..      }..
2450: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
2460: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 69 6e 74  ernal static int
2470: 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75   SQLiteVersionNu
2480: 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  mber..    {..   
2490: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
24a0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
24b0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
24c0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62 76  ods.sqlite3_libv
24d0: 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 3b  ersion_number();
24e0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
24f0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2500: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 53   static string S
2510: 51 4c 69 74 65 53 6f 75 72 63 65 49 64 0d 0a 20  QLiteSourceId.. 
2520: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
2530: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2540: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
2550: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
2560: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
2570: 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d 31  3_sourceid(), -1
2580: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
2590: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
25a0: 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
25b0: 20 41 75 74 6f 43 6f 6d 6d 69 74 0d 0a 20 20 20   AutoCommit..   
25c0: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
25d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25e0: 72 65 74 75 72 6e 20 49 73 41 75 74 6f 63 6f 6d  return IsAutocom
25f0: 6d 69 74 28 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b  mit(_sql, _sql);
2600: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2610: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2620: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4c   override long L
2630: 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64 0d 0a  astInsertRowId..
2640: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
2650: 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21  ..      {..#if !
2660: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
2670: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
2680: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
2690: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
26a0: 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
26b0: 74 5f 72 6f 77 69 64 28 5f 73 71 6c 29 3b 0d 0a  t_rowid(_sql);..
26c0: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
26d0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
26e0: 6c 6f 6e 67 20 72 6f 77 49 64 20 3d 20 30 3b 0d  long rowId = 0;.
26f0: 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e  .        UnsafeN
2700: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
2710: 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
2720: 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28 5f  _rowid_interop(_
2730: 73 71 6c 2c 20 72 65 66 20 72 6f 77 49 64 29 3b  sql, ref rowId);
2740: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2750: 20 72 6f 77 49 64 3b 0d 0a 23 65 6c 73 65 0d 0a   rowId;..#else..
2760: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
2770: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
2780: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
2790: 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ndif..      }.. 
27a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
27b0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
27c0: 74 20 43 68 61 6e 67 65 73 0d 0a 20 20 20 20 7b  t Changes..    {
27d0: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
27e0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
27f0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
2800: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
2810: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
2820: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 5f 69  qlite3_changes_i
2830: 6e 74 65 72 6f 70 28 5f 73 71 6c 29 3b 0d 0a 23  nterop(_sql);..#
2840: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 72 65  else..        re
2850: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
2860: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
2870: 5f 63 68 61 6e 67 65 73 28 5f 73 71 6c 29 3b 0d  _changes(_sql);.
2880: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d  .#endif..      }
2890: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
28a0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
28b0: 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 55 73 65 64   long MemoryUsed
28c0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
28d0: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66  et..      {..#if
28e0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
28f0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
2900: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
2910: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2920: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75  sqlite3_memory_u
2930: 73 65 64 28 29 3b 0d 0a 23 65 6c 69 66 20 21 53  sed();..#elif !S
2940: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
2950: 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 62 79 74          long byt
2960: 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  es = 0;..       
2970: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2980: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d  hods.sqlite3_mem
2990: 6f 72 79 5f 75 73 65 64 5f 69 6e 74 65 72 6f 70  ory_used_interop
29a0: 28 72 65 66 20 62 79 74 65 73 29 3b 0d 0a 20 20  (ref bytes);..  
29b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74        return byt
29c0: 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  es;..#else..    
29d0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
29e0: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
29f0: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
2a00: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2a10: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2a20: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d   override long M
2a30: 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72 0d 0a  emoryHighwater..
2a40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
2a50: 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21  ..      {..#if !
2a60: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
2a70: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
2a80: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
2a90: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
2aa0: 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67  lite3_memory_hig
2ab0: 68 77 61 74 65 72 28 30 29 3b 0d 0a 23 65 6c 69  hwater(0);..#eli
2ac0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
2ad0: 52 44 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67  RD..        long
2ae0: 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20   bytes = 0;..   
2af0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
2b00: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
2b10: 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65  _memory_highwate
2b20: 72 5f 69 6e 74 65 72 6f 70 28 30 2c 20 72 65 66  r_interop(0, ref
2b30: 20 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20   bytes);..      
2b40: 20 20 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d    return bytes;.
2b50: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
2b60: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
2b70: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
2b80: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
2b90: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
2ba0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2bb0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
2bc0: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  ns non-zero if t
2bd0: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6e 61  he underlying na
2be0: 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tive connection 
2bf0: 68 61 6e 64 6c 65 20 69 73 20 6f 77 6e 65 64 0d  handle is owned.
2c00: 0a 20 20 20 20 2f 2f 2f 20 62 79 20 74 68 69 73  .    /// by this
2c10: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
2c20: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2c30: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
2c40: 72 72 69 64 65 20 62 6f 6f 6c 20 4f 77 6e 48 61  rride bool OwnHa
2c50: 6e 64 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ndle..    {..   
2c60: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
2c70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c80: 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c   if (_sql == nul
2c90: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ca0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
2cb0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6e  LiteException("n
2cc0: 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  o connection han
2cd0: 64 6c 65 20 61 76 61 69 6c 61 62 6c 65 22 29 3b  dle available");
2ce0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2cf0: 72 65 74 75 72 6e 20 5f 73 71 6c 2e 4f 77 6e 48  return _sql.OwnH
2d00: 61 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  andle;..        
2d10: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
2d20: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
2d30: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
2d40: 65 20 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75  e SetMemoryStatu
2d50: 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20  s(bool value).. 
2d60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
2d70: 74 75 72 6e 20 53 74 61 74 69 63 53 65 74 4d 65  turn StaticSetMe
2d80: 6d 6f 72 79 53 74 61 74 75 73 28 76 61 6c 75 65  moryStatus(value
2d90: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
2da0: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
2db0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2dc0: 20 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79   StaticSetMemory
2dd0: 53 74 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75  Status(bool valu
2de0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
2df0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
2e00: 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
2e10: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
2e20: 74 65 33 5f 63 6f 6e 66 69 67 5f 69 6e 74 28 0d  te3_config_int(.
2e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
2e40: 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d  iteConfigOpsEnum
2e50: 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d  .SQLITE_CONFIG_M
2e60: 45 4d 53 54 41 54 55 53 2c 20 76 61 6c 75 65 20  EMSTATUS, value 
2e70: 3f 20 31 20 3a 20 30 29 3b 0d 0a 0d 0a 20 20 20  ? 1 : 0);....   
2e80: 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d       return rc;.
2e90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
2ea0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2eb0: 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e 20 74 68   /// Shutdown th
2ec0: 65 20 53 51 4c 69 74 65 20 65 6e 67 69 6e 65 20  e SQLite engine 
2ed0: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
2ee0: 65 20 72 65 73 74 61 72 74 65 64 20 77 69 74 68  e restarted with
2ef0: 20 64 69 66 66 65 72 65 6e 74 20 63 6f 6e 66 69   different confi
2f00: 67 20 6f 70 74 69 6f 6e 73 2e 0d 0a 20 20 20 20  g options...    
2f10: 2f 2f 2f 20 57 65 20 64 65 70 65 6e 64 20 6f 6e  /// We depend on
2f20: 20 61 75 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61   auto initializa
2f30: 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e  tion to recover.
2f40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2f50: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
2f60: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
2f70: 20 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65   result code</re
2f80: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
2f90: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
2fa0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 68  LiteErrorCode Sh
2fb0: 75 74 64 6f 77 6e 28 29 0d 0a 20 20 20 20 7b 0d  utdown()..    {.
2fc0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
2fd0: 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e  rrorCode rc = Un
2fe0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
2ff0: 73 2e 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f  s.sqlite3_shutdo
3000: 77 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  wn();..        r
3010: 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d  eturn rc;..    }
3020: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
3030: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44  mary>..    /// D
3040: 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65  etermines if the
3050: 20 61 73 73 6f 63 69 61 74 65 64 20 6e 61 74 69   associated nati
3060: 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ve connection ha
3070: 6e 64 6c 65 20 69 73 20 6f 70 65 6e 2e 0d 0a 20  ndle is open... 
3080: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
3090: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
30a0: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  rns>..    /// No
30b0: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 61 73  n-zero if the as
30c0: 73 6f 63 69 61 74 65 64 20 6e 61 74 69 76 65 20  sociated native 
30d0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
30e0: 65 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20  e is open...    
30f0: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
3100: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3110: 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4f 70 65  rride bool IsOpe
3120: 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  n()..    {..    
3130: 20 20 20 20 72 65 74 75 72 6e 20 28 5f 73 71 6c      return (_sql
3140: 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20 21 5f 73   != null) && !_s
3150: 71 6c 2e 49 73 49 6e 76 61 6c 69 64 20 26 26 20  ql.IsInvalid && 
3160: 21 5f 73 71 6c 2e 49 73 43 6c 6f 73 65 64 3b 0d  !_sql.IsClosed;.
3170: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
3180: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
3190: 76 6f 69 64 20 4f 70 65 6e 28 73 74 72 69 6e 67  void Open(string
31a0: 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 53 51   strFilename, SQ
31b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
31c0: 61 67 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  ags connectionFl
31d0: 61 67 73 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46  ags, SQLiteOpenF
31e0: 6c 61 67 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61  lagsEnum openFla
31f0: 67 73 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53  gs, int maxPoolS
3200: 69 7a 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f  ize, bool usePoo
3210: 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  l)..    {..     
3220: 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f   //..      // NO
3230: 54 45 3a 20 49 66 20 74 68 65 20 64 61 74 61 62  TE: If the datab
3240: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
3250: 73 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  s currently open
3260: 2c 20 61 74 74 65 6d 70 74 20 74 6f 0d 0a 20 20  , attempt to..  
3270: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6c 6f      //       clo
3280: 73 65 20 69 74 20 6e 6f 77 2e 20 20 54 68 69 73  se it now.  This
3290: 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 62 65   must be done be
32a0: 63 61 75 73 65 20 74 68 65 20 66 69 6c 65 20 6e  cause the file n
32b0: 61 6d 65 20 6f 72 0d 0a 20 20 20 20 20 20 2f 2f  ame or..      //
32c0: 20 20 20 20 20 20 20 6f 74 68 65 72 20 70 61 72         other par
32d0: 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79  ameters that may
32e0: 20 69 6d 70 61 63 74 20 74 68 65 20 75 6e 64 65   impact the unde
32f0: 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 0d  rlying database.
3300: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
3310: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 79 20 68  connection may h
3320: 61 76 65 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20  ave changed...  
3330: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66      //..      if
3340: 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20   (_sql != null) 
3350: 43 6c 6f 73 65 28 74 72 75 65 29 3b 0d 0a 0d 0a  Close(true);....
3360: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3370: 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20  // NOTE: If the 
3380: 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6e  connection was n
3390: 6f 74 20 63 6c 6f 73 65 64 20 73 75 63 63 65 73  ot closed succes
33a0: 73 66 75 6c 6c 79 2c 20 74 68 72 6f 77 20 61 6e  sfully, throw an
33b0: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
33c0: 20 65 78 63 65 70 74 69 6f 6e 20 6e 6f 77 2e 0d   exception now..
33d0: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
33e0: 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c   if (_sql != nul
33f0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68  l)..          th
3400: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
3410: 63 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74  ception("connect
3420: 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 73 74  ion handle is st
3430: 69 6c 6c 20 61 63 74 69 76 65 22 29 3b 0d 0a 0d  ill active");...
3440: 0a 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20  .      _usePool 
3450: 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20  = usePool;..    
3460: 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 73 74    _fileName = st
3470: 72 46 69 6c 65 6e 61 6d 65 3b 0d 0a 0d 0a 20 20  rFilename;....  
3480: 20 20 20 20 69 66 20 28 75 73 65 50 6f 6f 6c 29      if (usePool)
3490: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
34a0: 20 20 20 5f 73 71 6c 20 3d 20 53 51 4c 69 74 65     _sql = SQLite
34b0: 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 52  ConnectionPool.R
34c0: 65 6d 6f 76 65 28 73 74 72 46 69 6c 65 6e 61 6d  emove(strFilenam
34d0: 65 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20  e, maxPoolSize, 
34e0: 6f 75 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e  out _poolVersion
34f0: 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  );....#if !NET_C
3500: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
3510: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
3520: 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
3530: 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f  teLine(String.Fo
3540: 72 6d 61 74 28 22 4f 70 65 6e 20 28 50 6f 6f 6c  rmat("Open (Pool
3550: 29 3a 20 7b 30 7d 22 2c 20 28 5f 73 71 6c 20 21  ): {0}", (_sql !
3560: 3d 20 6e 75 6c 6c 29 20 3f 20 5f 73 71 6c 2e 54  = null) ? _sql.T
3570: 6f 53 74 72 69 6e 67 28 29 20 3a 20 22 3c 6e 75  oString() : "<nu
3580: 6c 6c 3e 22 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ll>"));..#endif.
3590: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
35a0: 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75    if (_sql == nu
35b0: 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ll)..      {..  
35c0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
35d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35e0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
35f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
3600: 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20       finally /* 
3610: 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f  NOTE: Thread.Abo
3620: 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e  rt() protection.
3630: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
3640: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
3650: 20 64 62 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   db;..          
3660: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
3670: 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  n;....#if !SQLIT
3680: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
3690: 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 6e 65        if ((conne
36a0: 63 74 69 6f 6e 46 6c 61 67 73 20 26 20 53 51 4c  ctionFlags & SQL
36b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
36c0: 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75  gs.NoExtensionFu
36d0: 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69  nctions) != SQLi
36e0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
36f0: 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e  s.NoExtensionFun
3700: 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20  ctions)..       
3710: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3720: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
3730: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
3740: 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28 54  3_open_interop(T
3750: 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e 61 6d  oUTF8(strFilenam
3760: 65 29 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 6f  e), openFlags, o
3770: 75 74 20 64 62 29 3b 0d 0a 20 20 20 20 20 20 20  ut db);..       
3780: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
3790: 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  else..#endif..  
37a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37b0: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
37c0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
37d0: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 54  qlite3_open_v2(T
37e0: 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e 61 6d  oUTF8(strFilenam
37f0: 65 29 2c 20 6f 75 74 20 64 62 2c 20 6f 70 65 6e  e), out db, open
3800: 46 6c 61 67 73 2c 20 49 6e 74 50 74 72 2e 5a 65  Flags, IntPtr.Ze
3810: 72 6f 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ro);..          
3820: 7d 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  }....#if !NET_CO
3830: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
3840: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
3850: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
3860: 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46  iteLine(String.F
3870: 6f 72 6d 61 74 28 22 4f 70 65 6e 3a 20 7b 30 7d  ormat("Open: {0}
3880: 22 2c 20 64 62 29 29 3b 0d 0a 23 65 6e 64 69 66  ", db));..#endif
3890: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
38a0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
38b0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
38c0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
38d0: 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a  tion(n, null);..
38e0: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d            _sql =
38f0: 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65   new SQLiteConne
3900: 63 74 69 6f 6e 48 61 6e 64 6c 65 28 64 62 2c 20  ctionHandle(db, 
3910: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
3920: 7d 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20  }..        lock 
3930: 28 5f 73 71 6c 29 20 7b 20 2f 2a 20 48 41 43 4b  (_sql) { /* HACK
3940: 3a 20 46 6f 72 63 65 20 74 68 65 20 53 79 6e 63  : Force the Sync
3950: 42 6c 6f 63 6b 20 74 6f 20 62 65 20 22 63 72 65  Block to be "cre
3960: 61 74 65 64 22 20 6e 6f 77 2e 20 2a 2f 20 7d 0d  ated" now. */ }.
3970: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
3980: 20 20 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74 69    // Bind functi
3990: 6f 6e 73 20 74 6f 20 74 68 69 73 20 63 6f 6e 6e  ons to this conn
39a0: 65 63 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79 20  ection.  If any 
39b0: 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f  previous functio
39c0: 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e  ns of the same n
39d0: 61 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77 65  ame..      // we
39e0: 72 65 20 61 6c 72 65 61 64 79 20 62 6f 75 6e 64  re already bound
39f0: 2c 20 74 68 65 6e 20 74 68 65 20 6e 65 77 20 62  , then the new b
3a00: 69 6e 64 69 6e 67 73 20 72 65 70 6c 61 63 65 20  indings replace 
3a10: 74 68 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20 20  the old...      
3a20: 69 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46  if ((connectionF
3a30: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
3a40: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 46  nectionFlags.NoF
3a50: 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c  unctions) != SQL
3a60: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
3a70: 67 73 2e 4e 6f 46 75 6e 63 74 69 6f 6e 73 29 0d  gs.NoFunctions).
3a80: 0a 20 20 20 20 20 20 20 20 20 20 5f 66 75 6e 63  .          _func
3a90: 74 69 6f 6e 73 41 72 72 61 79 20 3d 20 53 51 4c  tionsArray = SQL
3aa0: 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64  iteFunction.Bind
3ab0: 46 75 6e 63 74 69 6f 6e 73 28 74 68 69 73 2c 20  Functions(this, 
3ac0: 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 29  connectionFlags)
3ad0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 53 65 74 54 69  ;....      SetTi
3ae0: 6d 65 6f 75 74 28 30 29 3b 0d 0a 20 20 20 20 20  meout(0);..     
3af0: 20 47 43 2e 4b 65 65 70 41 6c 69 76 65 28 5f 73   GC.KeepAlive(_s
3b00: 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ql);..    }.... 
3b10: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
3b20: 72 69 64 65 20 76 6f 69 64 20 43 6c 65 61 72 50  ride void ClearP
3b30: 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ool()..    {..  
3b40: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
3b50: 74 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f  tionPool.ClearPo
3b60: 6f 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a  ol(_fileName);..
3b70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
3b80: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
3b90: 6e 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29 0d 0a  nt CountPool()..
3ba0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44      {..        D
3bb0: 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67  ictionary<string
3bc0: 2c 20 69 6e 74 3e 20 63 6f 75 6e 74 73 20 3d 20  , int> counts = 
3bd0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 69  null;..        i
3be0: 6e 74 20 6f 70 65 6e 43 6f 75 6e 74 20 3d 20 30  nt openCount = 0
3bf0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 63  ;..        int c
3c00: 6c 6f 73 65 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a  loseCount = 0;..
3c10: 20 20 20 20 20 20 20 20 69 6e 74 20 74 6f 74 61          int tota
3c20: 6c 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20  lCount = 0;.... 
3c30: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
3c40: 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65 74 43  nectionPool.GetC
3c50: 6f 75 6e 74 73 28 5f 66 69 6c 65 4e 61 6d 65 2c  ounts(_fileName,
3c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
3c70: 66 20 63 6f 75 6e 74 73 2c 20 72 65 66 20 6f 70  f counts, ref op
3c80: 65 6e 43 6f 75 6e 74 2c 20 72 65 66 20 63 6c 6f  enCount, ref clo
3c90: 73 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20  seCount,..      
3ca0: 20 20 20 20 20 20 72 65 66 20 74 6f 74 61 6c 43        ref totalC
3cb0: 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
3cc0: 20 20 72 65 74 75 72 6e 20 74 6f 74 61 6c 43 6f    return totalCo
3cd0: 75 6e 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  unt;..    }.... 
3ce0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
3cf0: 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 69 6d  ride void SetTim
3d00: 65 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f 75  eout(int nTimeou
3d10: 74 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tMS)..    {..   
3d20: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
3d30: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
3d40: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
3d50: 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  e3_busy_timeout(
3d60: 5f 73 71 6c 2c 20 6e 54 69 6d 65 6f 75 74 4d 53  _sql, nTimeoutMS
3d70: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
3d80: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
3d90: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
3da0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
3db0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
3dc0: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
3dd0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
3de0: 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 28 53  ride bool Step(S
3df0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
3e00: 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tmt)..    {..   
3e10: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
3e20: 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e  de n;..      Ran
3e30: 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d  dom rnd = null;.
3e40: 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74 61 72  .      uint star
3e50: 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e  ttick = (uint)En
3e60: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
3e70: 75 6e 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74  unt;..      uint
3e80: 20 74 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74   timeout = (uint
3e90: 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e  )(stmt._command.
3ea0: 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20  _commandTimeout 
3eb0: 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20  * 1000);....    
3ec0: 20 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d 0a    while (true)..
3ed0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3ee0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
3ef0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
3f00: 5f 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69  _step(stmt._sqli
3f10: 74 65 5f 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20  te_stmt);....   
3f20: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
3f30: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f  LiteErrorCode.Ro
3f40: 77 29 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d  w) return true;.
3f50: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d  .        if (n =
3f60: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
3f70: 65 2e 44 6f 6e 65 29 20 72 65 74 75 72 6e 20 66  e.Done) return f
3f80: 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
3f90: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
3fa0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
3fb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3fc0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
3fd0: 6f 64 65 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20  ode r;....      
3fe0: 20 20 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72 20      // An error 
3ff0: 6f 63 63 75 72 72 65 64 2c 20 61 74 74 65 6d 70  occurred, attemp
4000: 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 73  t to reset the s
4010: 74 61 74 65 6d 65 6e 74 2e 20 20 49 66 20 74 68  tatement.  If th
4020: 65 20 72 65 73 65 74 20 77 6f 72 6b 65 64 20 62  e reset worked b
4030: 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20  ecause the..    
4040: 20 20 20 20 20 20 2f 2f 20 73 63 68 65 6d 61 20        // schema 
4050: 68 61 73 20 63 68 61 6e 67 65 64 2c 20 72 65 2d  has changed, re-
4060: 74 72 79 20 74 68 65 20 73 74 65 70 20 61 67 61  try the step aga
4070: 69 6e 2e 20 20 49 66 20 69 74 20 65 72 72 6f 72  in.  If it error
4080: 65 64 20 6f 75 72 20 62 65 63 61 75 73 65 20 74  ed our because t
4090: 68 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  he database..   
40a0: 20 20 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f 63         // is loc
40b0: 6b 65 64 2c 20 74 68 65 6e 20 6b 65 65 70 20 72  ked, then keep r
40c0: 65 74 72 79 69 6e 67 20 75 6e 74 69 6c 20 74 68  etrying until th
40d0: 65 20 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f 75  e command timeou
40e0: 74 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20  t occurs...     
40f0: 20 20 20 20 20 72 20 3d 20 52 65 73 65 74 28 73       r = Reset(s
4100: 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tmt);....       
4110: 20 20 20 69 66 20 28 72 20 3d 3d 20 53 51 4c 69     if (r == SQLi
4120: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
4130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
4140: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
4150: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
4160: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20  tError());....  
4170: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
4180: 28 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((r == SQLiteErr
4190: 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c  orCode.Locked ||
41a0: 20 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   r == SQLiteErro
41b0: 72 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20 73  rCode.Busy) && s
41c0: 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20  tmt._command != 
41d0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
41e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
41f0: 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a  // Keep trying..
4200: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4210: 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20  rnd == null) // 
4220: 46 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65  First time we've
4230: 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65   encountered the
4240: 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20   lock..         
4250: 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52       rnd = new R
4260: 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20  andom();....    
4270: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
4280: 27 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65  've exceeded the
4290: 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f   command's timeo
42a0: 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20  ut, give up and 
42b0: 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a  throw an error..
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
42d0: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
42e0: 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74  t.TickCount - st
42f0: 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75  arttick > timeou
4300: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
4310: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4320: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
4330: 65 45 78 63 65 70 74 69 6f 6e 28 72 2c 20 47 65  eException(r, Ge
4340: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
4350: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4360: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
4370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
4380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4390: 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65 70   Otherwise sleep
43a0: 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d   for a random am
43b0: 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20  ount of time up 
43c0: 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20  to 150ms..      
43d0: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54          System.T
43e0: 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e  hreading.Thread.
43f0: 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31  Sleep(rnd.Next(1
4400: 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20  , 150));..      
4410: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4420: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
4430: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
4440: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
4450: 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
4460: 72 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28 53  rrorCode Reset(S
4470: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
4480: 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tmt)..    {..   
4490: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
44a0: 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  de n;....#if !SQ
44b0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
44c0: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
44d0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
44e0: 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72  ite3_reset_inter
44f0: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
4500: 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  stmt);..#else.. 
4510: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
4520: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
4530: 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74 2e  ite3_reset(stmt.
4540: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a  _sqlite_stmt);..
4550: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
4560: 2f 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  // If the schema
4570: 20 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61 6e   changed, try an
4580: 64 20 72 65 2d 70 72 65 70 61 72 65 20 69 74 0d  d re-prepare it.
4590: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20  .      if (n == 
45a0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
45b0: 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 7b  Schema)..      {
45c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65 63  ..        // Rec
45d0: 72 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73 74  reate a dummy st
45e0: 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20  atement..       
45f0: 20 73 74 72 69 6e 67 20 73 74 72 3b 0d 0a 20 20   string str;..  
4600: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
4610: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6d 70  iteStatement tmp
4620: 20 3d 20 50 72 65 70 61 72 65 28 6e 75 6c 6c 2c   = Prepare(null,
4630: 20 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65 6d   stmt._sqlStatem
4640: 65 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e 74  ent, null, (uint
4650: 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e  )(stmt._command.
4660: 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20  _commandTimeout 
4670: 2a 20 31 30 30 30 29 2c 20 6f 75 74 20 73 74 72  * 1000), out str
4680: 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
4690: 20 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e 61           // Fina
46a0: 6c 69 7a 65 20 74 68 65 20 65 78 69 73 74 69 6e  lize the existin
46b0: 67 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20  g statement..   
46c0: 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c         stmt._sql
46d0: 69 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73 65  ite_stmt.Dispose
46e0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f  ();..          /
46f0: 2f 20 52 65 61 73 73 69 67 6e 20 61 20 6e 65 77  / Reassign a new
4700: 20 73 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e 74   statement point
4710: 65 72 20 74 6f 20 74 68 65 20 6f 6c 64 20 73 74  er to the old st
4720: 61 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65 61  atement and clea
4730: 72 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  r the temporary 
4740: 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 73  one..          s
4750: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
4760: 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73   = tmp._sqlite_s
4770: 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tmt;..          
4780: 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmp._sqlite_stmt
4790: 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
47a0: 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c 79        // Reapply
47b0: 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20   parameters..   
47c0: 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e 64         stmt.Bind
47d0: 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a 20  Parameters();.. 
47e0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
47f0: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
4800: 72 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e 6f 77 6e  rrorCode.Unknown
4810: 3b 20 2f 2f 20 52 65 73 65 74 20 77 61 73 20 4f  ; // Reset was O
4820: 4b 2c 20 77 69 74 68 20 73 63 68 65 6d 61 20 63  K, with schema c
4830: 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  hange..      }..
4840: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
4850: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
4860: 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20  ode.Locked || n 
4870: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
4880: 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20  de.Busy)..      
4890: 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a 20    return n;.... 
48a0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
48b0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
48c0: 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
48d0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
48e0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
48f0: 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  rror());....    
4900: 20 20 72 65 74 75 72 6e 20 6e 3b 20 2f 2f 20 57    return n; // W
4910: 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20 73  e reset OK, no s
4920: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a 20  chema changes.. 
4930: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
4940: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
4950: 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f  ring GetLastErro
4960: 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  r()..    {..    
4970: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 42    return SQLiteB
4980: 61 73 65 2e 47 65 74 4c 61 73 74 45 72 72 6f 72  ase.GetLastError
4990: 28 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20  (_sql, _sql);.. 
49a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
49b0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
49c0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 50 72  LiteStatement Pr
49d0: 65 70 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e  epare(SQLiteConn
49e0: 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69  ection cnn, stri
49f0: 6e 67 20 73 74 72 53 71 6c 2c 20 53 51 4c 69 74  ng strSql, SQLit
4a00: 65 53 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69  eStatement previ
4a10: 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75  ous, uint timeou
4a20: 74 4d 53 2c 20 6f 75 74 20 73 74 72 69 6e 67 20  tMS, out string 
4a30: 73 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20 20 20  strRemain)..    
4a40: 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 21 53 74  {..      if (!St
4a50: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
4a60: 74 79 28 73 74 72 53 71 6c 29 29 0d 0a 20 20 20  ty(strSql))..   
4a70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
4a80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
4a90: 45 3a 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e  E: SQLite does n
4aa0: 6f 74 20 73 75 70 70 6f 72 74 20 74 68 65 20 63  ot support the c
4ab0: 6f 6e 63 65 70 74 20 6f 66 20 73 65 70 61 72 61  oncept of separa
4ac0: 74 65 20 73 63 68 65 6d 61 73 0d 0a 20 20 20 20  te schemas..    
4ad0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 20      //       in 
4ae0: 6f 6e 65 20 64 61 74 61 62 61 73 65 3b 20 74 68  one database; th
4af0: 65 72 65 66 6f 72 65 2c 20 72 65 6d 6f 76 65 20  erefore, remove 
4b00: 74 68 65 20 62 61 73 65 20 73 63 68 65 6d 61 20  the base schema 
4b10: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  name..        //
4b20: 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 73         used to s
4b30: 6d 6f 6f 74 68 20 69 6e 74 65 67 72 61 74 69 6f  mooth integratio
4b40: 6e 20 77 69 74 68 20 74 68 65 20 62 61 73 65 20  n with the base 
4b50: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d 0a  .NET Framework..
4b60: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
4b70: 20 64 61 74 61 20 63 6c 61 73 73 65 73 2e 0d 0a   data classes...
4b80: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4b90: 20 20 20 20 73 74 72 69 6e 67 20 62 61 73 65 53      string baseS
4ba0: 63 68 65 6d 61 4e 61 6d 65 20 3d 20 28 63 6e 6e  chemaName = (cnn
4bb0: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e   != null) ? cnn.
4bc0: 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20  _baseSchemaName 
4bd0: 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  : null;....     
4be0: 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
4bf0: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 62 61 73  sNullOrEmpty(bas
4c00: 65 53 63 68 65 6d 61 4e 61 6d 65 29 29 0d 0a 20  eSchemaName)).. 
4c10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4c20: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
4c30: 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20  Sql.Replace(..  
4c40: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
4c50: 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72  ng.Format(Cultur
4c60: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
4c70: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
4c80: 20 20 20 20 20 20 20 22 5b 7b 30 7d 5d 2e 22 2c         "[{0}].",
4c90: 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29   baseSchemaName)
4ca0: 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b  , String.Empty);
4cb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  ....          st
4cc0: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65  rSql = strSql.Re
4cd0: 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  place(..        
4ce0: 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
4cf0: 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
4d00: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
4d10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4d20: 20 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63 68   "{0}.", baseSch
4d30: 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67  emaName), String
4d40: 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20  .Empty);..      
4d50: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
4d60: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
4d70: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
4d80: 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 28  s =..          (
4d90: 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63  cnn != null) ? c
4da0: 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69 74  nn.Flags : SQLit
4db0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
4dc0: 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20 20 20  .Default;....   
4dd0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
4de0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
4df0: 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61 72 65  Flags.LogPrepare
4e00: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
4e10: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72  ctionFlags.LogPr
4e20: 65 70 61 72 65 29 0d 0a 20 20 20 20 20 20 7b 0d  epare)..      {.
4e30: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28  .          if ((
4e40: 73 74 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c 29 20  strSql == null) 
4e50: 7c 7c 20 28 73 74 72 53 71 6c 2e 4c 65 6e 67 74  || (strSql.Lengt
4e60: 68 20 3d 3d 20 30 29 20 7c 7c 20 28 73 74 72 53  h == 0) || (strS
4e70: 71 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e 67 74 68  ql.Trim().Length
4e80: 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20 20 20   == 0))..       
4e90: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
4ea0: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 22 50 72 65  .LogMessage("Pre
4eb0: 70 61 72 69 6e 67 20 7b 3c 6e 6f 74 68 69 6e 67  paring {<nothing
4ec0: 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20 20 20 20  >}...");..      
4ed0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
4ee0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
4ef0: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72  g.LogMessage(Str
4f00: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
4f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
4f20: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
4f30: 6e 74 43 75 6c 74 75 72 65 2c 20 22 50 72 65 70  ntCulture, "Prep
4f40: 61 72 69 6e 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e  aring {{{0}}}...
4f50: 22 2c 20 73 74 72 53 71 6c 29 29 3b 0d 0a 20 20  ", strSql));..  
4f60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 49      }....      I
4f70: 6e 74 50 74 72 20 73 74 6d 74 20 3d 20 49 6e 74  ntPtr stmt = Int
4f80: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
4f90: 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 49 6e   IntPtr ptr = In
4fa0: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
4fb0: 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a    int len = 0;..
4fc0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
4fd0: 72 43 6f 64 65 20 6e 20 3d 20 53 51 4c 69 74 65  rCode n = SQLite
4fe0: 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61  ErrorCode.Schema
4ff0: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72 65 74  ;..      int ret
5000: 72 69 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ries = 0;..     
5010: 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54   byte[] b = ToUT
5020: 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20 20  F8(strSql);..   
5030: 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 64 65     string typede
5040: 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  fs = null;..    
5050: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
5060: 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  t cmd = null;.. 
5070: 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20       Random rnd 
5080: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75  = null;..      u
5090: 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20  int starttick = 
50a0: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
50b0: 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a  t.TickCount;....
50c0: 20 20 20 20 20 20 47 43 48 61 6e 64 6c 65 20 68        GCHandle h
50d0: 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e 64 6c 65  andle = GCHandle
50e0: 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48 61 6e 64  .Alloc(b, GCHand
50f0: 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64 29 3b 0d  leType.Pinned);.
5100: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 73  .      IntPtr ps
5110: 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41 64 64 72  ql = handle.Addr
5120: 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63 74 28 29  OfPinnedObject()
5130: 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53  ;..      SQLiteS
5140: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 73  tatementHandle s
5150: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d  tatementHandle =
5160: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 74 72   null;..      tr
5170: 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  y..      {..    
5180: 20 20 20 20 77 68 69 6c 65 20 28 28 6e 20 3d 3d      while ((n ==
5190: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
51a0: 2e 53 63 68 65 6d 61 20 7c 7c 20 6e 20 3d 3d 20  .Schema || n == 
51b0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
51c0: 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53  Locked || n == S
51d0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42  QLiteErrorCode.B
51e0: 75 73 79 29 20 26 26 20 72 65 74 72 69 65 73 20  usy) && retries 
51f0: 3c 20 33 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  < 3)..        {.
5200: 0a 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a  .          try..
5210: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5220: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
5230: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
5240: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5250: 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a  finally /* NOTE:
5260: 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20   Thread.Abort() 
5270: 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a  protection. */..
5280: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66            {..#if
5290: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
52a0: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  D..            n
52b0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
52c0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70  ethods.sqlite3_p
52d0: 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 5f  repare_interop(_
52e0: 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e  sql, psql, b.Len
52f0: 67 74 68 20 2d 20 31 2c 20 6f 75 74 20 73 74 6d  gth - 1, out stm
5300: 74 2c 20 6f 75 74 20 70 74 72 2c 20 6f 75 74 20  t, out ptr, out 
5310: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 23 69  len);..#else..#i
5320: 66 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56 32  f USE_PREPARE_V2
5330: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
5340: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
5350: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72  thods.sqlite3_pr
5360: 65 70 61 72 65 5f 76 32 28 5f 73 71 6c 2c 20 70  epare_v2(_sql, p
5370: 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  sql, b.Length - 
5380: 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75 74  1, out stmt, out
5390: 20 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   ptr);..#else.. 
53a0: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
53b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
53c0: 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61  ds.sqlite3_prepa
53d0: 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62  re(_sql, psql, b
53e0: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74  .Length - 1, out
53f0: 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 29 3b   stmt, out ptr);
5400: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
5410: 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d        len = -1;.
5420: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 21  .#endif....#if !
5430: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
5440: 26 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45 4e  & TRACE_STATEMEN
5450: 54 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54  T..            T
5460: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53  race.WriteLine(S
5470: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 50 72  tring.Format("Pr
5480: 65 70 61 72 65 20 28 7b 30 7d 29 3a 20 7b 31 7d  epare ({0}): {1}
5490: 22 2c 20 6e 2c 20 73 74 6d 74 29 29 3b 0d 0a 23  ", n, stmt));..#
54a0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
54b0: 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53       if ((n == S
54c0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
54d0: 6b 29 20 26 26 20 28 73 74 6d 74 20 21 3d 20 49  k) && (stmt != I
54e0: 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20  ntPtr.Zero))..  
54f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
5500: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 65  ementHandle = ne
5510: 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  w SQLiteStatemen
5520: 74 48 61 6e 64 6c 65 28 5f 73 71 6c 2c 20 73 74  tHandle(_sql, st
5530: 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mt);..          
5540: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  }....          i
5550: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
5560: 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 29 0d  rorCode.Schema).
5570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5580: 72 69 65 73 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  ries++;..       
5590: 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
55a0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
55b0: 2e 45 72 72 6f 72 29 0d 0a 20 20 20 20 20 20 20  .Error)..       
55c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
55d0: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d    if (String.Com
55e0: 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f  pare(GetLastErro
55f0: 72 28 29 2c 20 22 6e 65 61 72 20 5c 22 54 59 50  r(), "near \"TYP
5600: 45 53 5c 22 3a 20 73 79 6e 74 61 78 20 65 72 72  ES\": syntax err
5610: 6f 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  or", StringCompa
5620: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
5630: 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a  oreCase) == 0)..
5640: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5650: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
5660: 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 49 6e   pos = strSql.In
5670: 64 65 78 4f 66 28 27 3b 27 29 3b 0d 0a 20 20 20  dexOf(';');..   
5680: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
5690: 6f 73 20 3d 3d 20 2d 31 29 20 70 6f 73 20 3d 20  os == -1) pos = 
56a0: 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20  strSql.Length - 
56b0: 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  1;....          
56c0: 20 20 20 20 74 79 70 65 64 65 66 73 20 3d 20 73      typedefs = s
56d0: 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28  trSql.Substring(
56e0: 30 2c 20 70 6f 73 20 2b 20 31 29 3b 0d 0a 20 20  0, pos + 1);..  
56f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53              strS
5700: 71 6c 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73  ql = strSql.Subs
5710: 74 72 69 6e 67 28 70 6f 73 20 2b 20 31 29 3b 0d  tring(pos + 1);.
5720: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5730: 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b   strRemain = "";
5740: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5750: 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20    while (cmd == 
5760: 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c  null && strSql.L
5770: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
5780: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5790: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64               cmd
57a0: 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20   = Prepare(cnn, 
57b0: 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73  strSql, previous
57c0: 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74  , timeoutMS, out
57d0: 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20   strRemain);..  
57e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
57f0: 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e  rSql = strRemain
5800: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5810: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5820: 20 20 20 20 69 66 20 28 63 6d 64 20 21 3d 20 6e      if (cmd != n
5830: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5840: 20 20 20 20 20 20 63 6d 64 2e 53 65 74 54 79 70        cmd.SetTyp
5850: 65 73 28 74 79 70 65 64 65 66 73 29 3b 0d 0a 0d  es(typedefs);...
5860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
5870: 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20  eturn cmd;..    
5880: 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 28          }..#if (
5890: 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f 34 30  NET_35 || NET_40
58a0: 20 7c 7c 20 4e 45 54 5f 34 35 29 20 26 26 20 21   || NET_45) && !
58b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
58c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
58d0: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
58e0: 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20  _buildingSchema 
58f0: 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72 69  == false && Stri
5900: 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c 61  ng.Compare(GetLa
5910: 73 74 45 72 72 6f 72 28 29 2c 20 30 2c 20 22 6e  stError(), 0, "n
5920: 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 54 45  o such table: TE
5930: 4d 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c 20 32  MP.SCHEMA", 0, 2
5940: 36 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  6, StringCompari
5950: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
5960: 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20  eCase) == 0)..  
5970: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5980: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52 65             strRe
5990: 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 20 20 20 20  main = "";..    
59a0: 20 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c 64            _build
59b0: 69 6e 67 53 63 68 65 6d 61 20 3d 20 74 72 75 65  ingSchema = true
59c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
59d0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
59e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
59f0: 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 53 63         ISQLiteSc
5a00: 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 20 65  hemaExtensions e
5a10: 78 74 20 3d 20 28 28 49 53 65 72 76 69 63 65 50  xt = ((IServiceP
5a20: 72 6f 76 69 64 65 72 29 53 51 4c 69 74 65 46 61  rovider)SQLiteFa
5a30: 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65 29 2e  ctory.Instance).
5a40: 47 65 74 53 65 72 76 69 63 65 28 74 79 70 65 6f  GetService(typeo
5a50: 66 28 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45  f(ISQLiteSchemaE
5a60: 78 74 65 6e 73 69 6f 6e 73 29 29 20 61 73 20 49  xtensions)) as I
5a70: 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65  SQLiteSchemaExte
5a80: 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20 20  nsions;....     
5a90: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
5aa0: 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  xt != null)..   
5ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
5ac0: 78 74 2e 42 75 69 6c 64 54 65 6d 70 53 63 68 65  xt.BuildTempSche
5ad0: 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20 20 20  ma(cnn);....    
5ae0: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
5af0: 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26  e (cmd == null &
5b00: 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  & strSql.Length 
5b10: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
5b20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5b30: 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 20 3d             cmd =
5b40: 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73 74   Prepare(cnn, st
5b50: 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20  rSql, previous, 
5b60: 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20 73  timeoutMS, out s
5b70: 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20  trRemain);..    
5b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
5b90: 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e  rSql = strRemain
5ba0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5bb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
5bc0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
5bd0: 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  md;..           
5be0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5bf0: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
5c00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 62                _b
5c20: 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 20  uildingSchema = 
5c30: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
5c40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5c50: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
5c60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5c70: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
5c80: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
5c90: 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e  Code.Locked || n
5ca0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
5cb0: 6f 64 65 2e 42 75 73 79 29 20 2f 2f 20 4c 6f 63  ode.Busy) // Loc
5cc0: 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61 20 73  ked -- delay a s
5cd0: 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65 66 6f  mall amount befo
5ce0: 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20 20 20  re retrying..   
5cf0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5d00: 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74 72        // Keep tr
5d10: 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ying..          
5d20: 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c    if (rnd == nul
5d30: 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d 65  l) // First time
5d40: 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65 72   we've encounter
5d50: 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20  ed the lock..   
5d60: 20 20 20 20 20 20 20 20 20 20 20 72 6e 64 20 3d             rnd =
5d70: 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a   new Random();..
5d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
5d90: 20 49 66 20 77 65 27 76 65 20 65 78 63 65 65 64   If we've exceed
5da0: 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73  ed the command's
5db0: 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20 75   timeout, give u
5dc0: 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20 65  p and throw an e
5dd0: 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
5de0: 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76 69    if ((uint)Envi
5df0: 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e  ronment.TickCoun
5e00: 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e 20  t - starttick > 
5e10: 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20  timeoutMS)..    
5e20: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5e30: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
5e40: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
5e50: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
5e60: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  or());..        
5e70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
5e80: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
5e90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5ea0: 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72 77 69        // Otherwi
5eb0: 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61 20 72  se sleep for a r
5ec0: 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20  andom amount of 
5ed0: 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30 6d 73  time up to 150ms
5ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5ef0: 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67  System.Threading
5f00: 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28 72 6e  .Thread.Sleep(rn
5f10: 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29 29 3b  d.Next(1, 150));
5f20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
5f30: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
5f40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5f50: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
5f60: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
5f70: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
5f80: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
5f90: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
5fa0: 0a 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61  .        strRema
5fb0: 69 6e 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  in = UTF8ToStrin
5fc0: 67 28 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a  g(ptr, len);....
5fd0: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61 74          if (stat
5fe0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e  ementHandle != n
5ff0: 75 6c 6c 29 20 63 6d 64 20 3d 20 6e 65 77 20 53  ull) cmd = new S
6000: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 28 74  QLiteStatement(t
6010: 68 69 73 2c 20 66 6c 61 67 73 2c 20 73 74 61 74  his, flags, stat
6020: 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74 72  ementHandle, str
6030: 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c  Sql.Substring(0,
6040: 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d   strSql.Length -
6050: 20 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67 74   strRemain.Lengt
6060: 68 29 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d 0a  h), previous);..
6070: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
6080: 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a   cmd;..      }..
6090: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
60a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
60b0: 68 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d 0a  handle.Free();..
60c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
60d0: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
60e0: 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42  static void LogB
60f0: 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ind(SQLiteStatem
6100: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
6110: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
6120: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
6130: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
6140: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
6150: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
6160: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
6170: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
6180: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
6190: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
61a0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
61b0: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
61c0: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
61d0: 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e 2e 22  #{1} as NULL..."
61e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68  ,..            h
61f0: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
6200: 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ex));..    }....
6210: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74      protected st
6220: 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e  atic void LogBin
6230: 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  d(SQLiteStatemen
6240: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20  tHandle handle, 
6250: 69 6e 74 20 69 6e 64 65 78 2c 20 56 61 6c 75 65  int index, Value
6260: 54 79 70 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  Type value)..   
6270: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
6280: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
6290: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
62a0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
62b0: 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67  ogMessage(String
62c0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
62d0: 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73        "Binding s
62e0: 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72  tatement {0} par
62f0: 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79  amter #{1} as ty
6300: 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75  pe {2} with valu
6310: 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a  e {{{3}}}...",..
6320: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
6330: 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c  leIntPtr, index,
6340: 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29   value.GetType()
6350: 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  , value));..    
6360: 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65  }....    private
6370: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 46   static string F
6380: 6f 72 6d 61 74 44 61 74 65 54 69 6d 65 28 44 61  ormatDateTime(Da
6390: 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20  teTime value).. 
63a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 74     {..        St
63b0: 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75  ringBuilder resu
63c0: 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42  lt = new StringB
63d0: 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20  uilder();....   
63e0: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
63f0: 6e 64 28 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e  nd(value.ToStrin
6400: 67 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48  g("yyyy-MM-ddTHH
6410: 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22  :mm:ss.FFFFFFFK"
6420: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73  ));..        res
6430: 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b  ult.Append(' ');
6440: 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74  ..        result
6450: 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b 69  .Append(value.Ki
6460: 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  nd);..        re
6470: 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29  sult.Append(' ')
6480: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c  ;..        resul
6490: 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54  t.Append(value.T
64a0: 69 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  icks);....      
64b0: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e    return result.
64c0: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
64d0: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63   }....    protec
64e0: 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20  ted static void 
64f0: 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74  LogBind(SQLiteSt
6500: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
6510: 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c  ndle, int index,
6520: 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29   DateTime value)
6530: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
6540: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
6550: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
6560: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
6570: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
6580: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
6590: 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64             "Bind
65a0: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30  ing statement {0
65b0: 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20  } paramter #{1} 
65c0: 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68  as type {2} with
65d0: 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e   value {{{3}}}..
65e0: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
65f0: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69   handleIntPtr, i
6600: 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61 74  ndex, typeof(Dat
6610: 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44 61  eTime), FormatDa
6620: 74 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29 3b  teTime(value)));
6630: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
6640: 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20  rotected static 
6650: 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c  void LogBind(SQL
6660: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
6670: 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69  le handle, int i
6680: 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c  ndex, string val
6690: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
66a0: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
66b0: 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65  eIntPtr = handle
66c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
66d0: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
66e0: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
66f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42  ..            "B
6700: 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  inding statement
6710: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b   {0} paramter #{
6720: 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77  1} as type {2} w
6730: 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d  ith value {{{3}}
6740: 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  }...",..        
6750: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
6760: 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28  , index, typeof(
6770: 53 74 72 69 6e 67 29 2c 20 28 76 61 6c 75 65 20  String), (value 
6780: 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75 65  != null) ? value
6790: 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a   : "<null>"));..
67a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
67b0: 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
67c0: 6e 67 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c  ng ToHexadecimal
67d0: 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20  String(..       
67e0: 20 62 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a 20   byte[] array.. 
67f0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
6800: 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72 72  .        if (arr
6810: 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ay == null)..   
6820: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6830: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
6840: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72   StringBuilder r
6850: 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69  esult = new Stri
6860: 6e 67 42 75 69 6c 64 65 72 28 61 72 72 61 79 2e  ngBuilder(array.
6870: 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d 0a  Length * 2);....
6880: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67          int leng
6890: 74 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74  th = array.Lengt
68a0: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f  h;....        fo
68b0: 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
68c0: 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68  ; index < length
68d0: 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
68e0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
68f0: 70 70 65 6e 64 28 61 72 72 61 79 5b 69 6e 64 65  ppend(array[inde
6900: 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78 32 22  x].ToString("x2"
6910: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ));....        r
6920: 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53  eturn result.ToS
6930: 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d  tring();..    }.
6940: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
6950: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67   static void Log
6960: 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65  Bind(SQLiteState
6970: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
6980: 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79  e, int index, by
6990: 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20  te[] value)..   
69a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
69b0: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
69c0: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
69d0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
69e0: 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67  ogMessage(String
69f0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
6a00: 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73        "Binding s
6a10: 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72  tatement {0} par
6a20: 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79  amter #{1} as ty
6a30: 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75  pe {2} with valu
6a40: 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a  e {{{3}}}...",..
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
6a60: 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c  leIntPtr, index,
6a70: 20 74 79 70 65 6f 66 28 42 79 74 65 5b 5d 29 2c   typeof(Byte[]),
6a80: 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29   (value != null)
6a90: 20 3f 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c   ? ToHexadecimal
6aa0: 53 74 72 69 6e 67 28 76 61 6c 75 65 29 20 3a 20  String(value) : 
6ab0: 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20  "<null>"));..   
6ac0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
6ad0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
6ae0: 20 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53 51 4c   Bind_Double(SQL
6af0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
6b00: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
6b10: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
6b20: 69 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c  int index, doubl
6b30: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  e value)..    {.
6b40: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
6b50: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
6b60: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
6b70: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20  lite_stmt;....  
6b80: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
6b90: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
6ba0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
6bb0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
6bc0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
6bd0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
6be0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
6bf0: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
6c00: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
6c10: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c      }....#if !PL
6c20: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
6c30: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
6c40: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6c50: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
6c60: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6c70: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e  _bind_double(han
6c80: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
6c90: 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
6ca0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
6cb0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
6cc0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
6cd0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6ce0: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
6cf0: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
6d00: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
6d10: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
6d20: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
6d30: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
6d40: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
6d50: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
6d60: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
6d70: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
6d80: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
6d90: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
6da0: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
6db0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
6dc0: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49  ride void Bind_I
6dd0: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
6de0: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
6df0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6e00: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
6e10: 78 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20  x, int value).. 
6e20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
6e30: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
6e40: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
6e50: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
6e60: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
6e70: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
6e80: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
6e90: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
6ea0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6eb0: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
6ec0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6ed0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
6ee0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
6ef0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
6f00: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
6f10: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
6f20: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
6f30: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68  lite3_bind_int(h
6f40: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
6f50: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  lue);..        i
6f60: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
6f70: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
6f80: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
6f90: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
6fa0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
6fb0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
6fc0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
6fd0: 69 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c 69 74  ind_UInt32(SQLit
6fe0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
6ff0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7000: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
7010: 74 20 69 6e 64 65 78 2c 20 75 69 6e 74 20 76 61  t index, uint va
7020: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
7030: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
7040: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
7050: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
7060: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
7070: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
7080: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
7090: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
70a0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
70b0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
70c0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
70d0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
70e0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
70f0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
7100: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
7110: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
7120: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
7130: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
7140: 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20  Code n;....     
7150: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
7160: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7170: 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74 33 32  Flags.BindUInt32
7180: 41 73 49 6e 74 36 34 29 20 3d 3d 20 53 51 4c 69  AsInt64) == SQLi
7190: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
71a0: 73 2e 42 69 6e 64 55 49 6e 74 33 32 41 73 49 6e  s.BindUInt32AsIn
71b0: 74 36 34 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  t64)..        {.
71c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e  .            lon
71d0: 67 20 76 61 6c 75 65 32 20 3d 20 76 61 6c 75 65  g value2 = value
71e0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
71f0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
7200: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
7210: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
7220: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7230: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64  _bind_int64(hand
7240: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
7250: 32 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  2);..#elif !SQLI
7260: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
7270: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
7280: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7290: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
72a0: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
72b0: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
72c0: 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 73 65 0d 0a  alue2);..#else..
72d0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
72e0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
72f0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
7300: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
7310: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
7320: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
7330: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
7340: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7350: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75  s.sqlite3_bind_u
7360: 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  int(handle, inde
7370: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
7380: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 69      }..        i
7390: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
73a0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
73b0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
73c0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
73d0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
73e0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
73f0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
7400: 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65  ind_Int64(SQLite
7410: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
7420: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7430: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
7440: 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c   index, long val
7450: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
7460: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
7470: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
7480: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
7490: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
74a0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
74b0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
74c0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
74d0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
74e0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
74f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7500: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
7510: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7520: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
7530: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
7540: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
7550: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
7560: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
7570: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7580: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
7590: 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69  _int64(handle, i
75a0: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
75b0: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
75c0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53  NDARD..        S
75d0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
75e0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
75f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
7600: 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ind_int64_intero
7610: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
7620: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
7630: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72  lse..        thr
7640: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
7650: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
7660: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
7670: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
7680: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
7690: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
76a0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
76b0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
76c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
76d0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
76e0: 69 64 20 42 69 6e 64 5f 55 49 6e 74 36 34 28 53  id Bind_UInt64(S
76f0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
7700: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
7710: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
7720: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 6c 6f  , int index, ulo
7730: 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
7740: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
7750: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
7760: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
7770: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23  qlite_stmt;....#
7780: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
7790: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
77a0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
77b0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
77c0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
77d0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
77e0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
77f0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
7800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
7810: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
7820: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
7830: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7840: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
7850: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
7860: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
7870: 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 28 68 61  3_bind_uint64(ha
7880: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
7890: 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
78a0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
78b0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
78c0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
78d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
78e0: 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36  lite3_bind_uint6
78f0: 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  4_interop(handle
7900: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
7910: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
7920: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
7930: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
7940: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
7950: 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  f..        if (n
7960: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
7970: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
7980: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
7990: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
79a0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
79b0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
79c0: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
79d0: 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74 65  Text(SQLiteState
79e0: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
79f0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7a00: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
7a10: 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29  x, string value)
7a20: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
7a30: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
7a40: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
7a50: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
7a60: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
7a70: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
7a80: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
7a90: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
7aa0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7ab0: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
7ac0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7ad0: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
7ae0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7af0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
7b00: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
7b10: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
7b20: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
7b30: 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54   byte[] b = ToUT
7b40: 46 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 23 69  F8(value);....#i
7b50: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
7b60: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
7b70: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
7b80: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
7b90: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
7ba0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
7bb0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
7bc0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
7be0: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
7bf0: 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20  x, b);..        
7c00: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
7c10: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
7c20: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
7c30: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
7c40: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68  ite3_bind_text(h
7c50: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c  andle, index, b,
7c60: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28   b.Length - 1, (
7c70: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
7c80: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
7c90: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
7ca0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
7cb0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
7cc0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
7cd0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
7ce0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
7cf0: 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74 65  e void Bind_Date
7d00: 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Time(SQLiteState
7d10: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
7d20: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7d30: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
7d40: 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29 0d  x, DateTime dt).
7d50: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
7d60: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
7d70: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
7d80: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
7d90: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
7da0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
7db0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
7dc0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
7dd0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7de0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
7df0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7e00: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
7e10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7e20: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
7e30: 65 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d 0a  e, index, dt);..
7e40: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
7e50: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 77 69  f....        swi
7e60: 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46 6f  tch (_datetimeFo
7e70: 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b  rmat)..        {
7e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
7e90: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
7ea0: 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20  mats.Ticks:..   
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ed0: 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d      long value =
7ee0: 20 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 23 69   dt.Ticks;....#i
7ef0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
7f00: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f20: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
7f30: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7f40: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
7f50: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7f60: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
7f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7f80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fa0: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
7fb0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
7fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
7ff0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
8000: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
8010: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
8020: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
8030: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
8040: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
8050: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
8060: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
8070: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
8080: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8090: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
80a0: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68  _int64_interop(h
80b0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
80c0: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  f value);..#else
80d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
80e0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
80f0: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
8100: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
8110: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
8120: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
8130: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8140: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
8150: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
8160: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
8170: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8180: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
8190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
81b0: 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f  ase SQLiteDateFo
81c0: 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79 3a  rmats.JulianDay:
81d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
81e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
81f0: 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20           double 
8200: 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69 61 6e  value = ToJulian
8210: 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20  Day(dt);....#if 
8220: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
8230: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
8240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8250: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
8260: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
8270: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
8280: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
8290: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
82a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
82c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f                Lo
82d0: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
82e0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
82f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8300: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
8310: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
8320: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
8330: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
8340: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
8350: 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69  double(handle, i
8360: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
8370: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
8380: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
8390: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
83a0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
83b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
83c0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
83d0: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68  double_interop(h
83e0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
83f0: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  f value);..#else
8400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8410: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
8420: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
8430: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
8440: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
8450: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
8460: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8470: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
8480: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
8490: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
84a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
84b0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
84c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84d0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
84e0: 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f  ase SQLiteDateFo
84f0: 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 3a  rmats.UnixEpoch:
8500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8510: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8520: 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61           long va
8530: 6c 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f  lue = Convert.To
8540: 49 6e 74 36 34 28 64 74 2e 53 75 62 74 72 61 63  Int64(dt.Subtrac
8550: 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f 74  t(UnixEpoch).Tot
8560: 61 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a 23  alSeconds);....#
8570: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
8580: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
8590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85a0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
85b0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
85c0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
85d0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
85e0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
85f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8600: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8620: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
8630: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
8640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8650: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
8670: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
8680: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
8690: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
86a0: 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c  nd_int64(handle,
86b0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
86c0: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
86d0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
86e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
86f0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
8700: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
8710: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
8720: 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  d_int64_interop(
8730: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
8740: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
8750: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
8760: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
8770: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
8780: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
8790: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
87a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
87b0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
87c0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
87d0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
87e0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
87f0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
8800: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
8810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8820: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8830: 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20  default:..      
8840: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8860: 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54   byte[] b = ToUT
8870: 46 38 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21  F8(dt);....#if !
8880: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
8890: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
88a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
88b0: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
88c0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
88d0: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
88e0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
88f0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
8900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8910: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8920: 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67               Log
8930: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
8940: 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20  ex, b);..       
8950: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
8960: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
8970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
8980: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
8990: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
89a0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
89b0: 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c 20  nd_text(handle, 
89c0: 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67  index, b, b.Leng
89d0: 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29  th - 1, (IntPtr)
89e0: 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  (-1));..        
89f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8a00: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
8a10: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
8a20: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
8a30: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
8a40: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  or());..        
8a50: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
8a60: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
8a70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
8a80: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
8a90: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
8aa0: 20 76 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62 28   void Bind_Blob(
8ab0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
8ac0: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
8ad0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
8ae0: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79  s, int index, by
8af0: 74 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29 0d 0a  te[] blobData)..
8b00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
8b10: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
8b20: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
8b30: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
8b40: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
8b50: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
8b60: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
8b70: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
8b80: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
8b90: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
8ba0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
8bb0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
8bc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8bd0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
8be0: 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74  , index, blobDat
8bf0: 61 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  a);..        }..
8c00: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
8c10: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
8c20: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
8c30: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
8c40: 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 68 61 6e 64  3_bind_blob(hand
8c50: 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44  le, index, blobD
8c60: 61 74 61 2c 20 62 6c 6f 62 44 61 74 61 2e 4c 65  ata, blobData.Le
8c70: 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28 2d  ngth, (IntPtr)(-
8c80: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  1));..        if
8c90: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
8ca0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
8cb0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
8cc0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
8cd0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
8ce0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
8cf0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
8d00: 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74  nd_Null(SQLiteSt
8d10: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
8d20: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
8d30: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
8d40: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
8d50: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
8d60: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
8d70: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
8d80: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21  e_stmt;....#if !
8d90: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
8da0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
8db0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
8dc0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8dd0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
8de0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
8df0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
8e00: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
8e10: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
8e20: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b  (handle, index);
8e30: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
8e40: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  dif....        S
8e50: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
8e60: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
8e70: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
8e80: 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65 2c  ind_null(handle,
8e90: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
8ea0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
8eb0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
8ec0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
8ed0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
8ee0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
8ef0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
8f00: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
8f10: 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74   Bind_ParamCount
8f20: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
8f30: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
8f40: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
8f50: 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  gs)..    {..    
8f60: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
8f70: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
8f80: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
8f90: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69  stmt;..        i
8fa0: 6e 74 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66  nt value = Unsaf
8fb0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
8fc0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
8fd0: 6d 65 74 65 72 5f 63 6f 75 6e 74 28 68 61 6e 64  meter_count(hand
8fe0: 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  le);....        
8ff0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
9000: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
9010: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
9020: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
9030: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
9040: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9050: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
9060: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
9070: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
9080: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
9090: 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46  Message(String.F
90a0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
90b0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
90c0: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
90d0: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
90e0: 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20       "Statement 
90f0: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 63 6f 75  {0} paramter cou
9100: 6e 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20 20  nt is {1}.",..  
9110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
9120: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c 75  ndleIntPtr, valu
9130: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e));..        }.
9140: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
9150: 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d  n value;..    }.
9160: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
9170: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
9180: 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28 53  Bind_ParamName(S
9190: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
91a0: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
91b0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
91c0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
91d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
91e0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
91f0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
9200: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
9210: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
9220: 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  ame;....#if !SQL
9230: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
9240: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
9250: 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55          name = U
9260: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
9270: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9280: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
9290: 61 6d 65 74 65 72 5f 6e 61 6d 65 5f 69 6e 74 65  ameter_name_inte
92a0: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
92b0: 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e  x, out len), len
92c0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
92d0: 20 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f     name = UTF8To
92e0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
92f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9300: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
9310: 72 5f 6e 61 6d 65 28 68 61 6e 64 6c 65 2c 20 69  r_name(handle, i
9320: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
9330: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  dif....        i
9340: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
9350: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
9360: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
9370: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
9380: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
9390: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
93a0: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
93b0: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
93c0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
93d0: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
93e0: 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f  essage(String.Fo
93f0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
9400: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
9410: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
9420: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
9430: 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b      "Statement {
9440: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
9450: 20 6e 61 6d 65 20 69 73 20 7b 7b 7b 32 7d 7d 7d   name is {{{2}}}
9460: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
9470: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
9480: 72 2c 20 69 6e 64 65 78 2c 20 6e 61 6d 65 29 29  r, index, name))
9490: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
94a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
94b0: 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ame;..    }.... 
94c0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
94d0: 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61  ride int Bind_Pa
94e0: 72 61 6d 49 6e 64 65 78 28 53 51 4c 69 74 65 53  ramIndex(SQLiteS
94f0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
9500: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
9510: 6c 61 67 73 20 66 6c 61 67 73 2c 20 73 74 72 69  lags flags, stri
9520: 6e 67 20 70 61 72 61 6d 4e 61 6d 65 29 0d 0a 20  ng paramName).. 
9530: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
9540: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
9550: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
9560: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
9570: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64  .        int ind
9580: 65 78 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ex = UnsafeNativ
9590: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
95a0: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
95b0: 69 6e 64 65 78 28 68 61 6e 64 6c 65 2c 20 54 6f  index(handle, To
95c0: 55 54 46 38 28 70 61 72 61 6d 4e 61 6d 65 29 29  UTF8(paramName))
95d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
95e0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
95f0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
9600: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
9610: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
9620: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
9630: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9640: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
9650: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
9660: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9670: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
9680: 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  sage(String.Form
9690: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
96a0: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
96b0: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
96c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
96d0: 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d    "Statement {0}
96e0: 20 70 61 72 61 6d 74 65 72 20 69 6e 64 65 78 20   paramter index 
96f0: 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d 7d 20  of name {{{1}}} 
9700: 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20 20 20  is #{2}.",..    
9710: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
9720: 6c 65 49 6e 74 50 74 72 2c 20 70 61 72 61 6d 4e  leIntPtr, paramN
9730: 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20  ame, index));.. 
9740: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9750: 20 20 20 20 72 65 74 75 72 6e 20 69 6e 64 65 78      return index
9760: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9770: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
9780: 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e  e int ColumnCoun
9790: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
97a0: 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a  t stmt)..    {..
97b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
97c0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
97d0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
97e0: 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69  count(stmt._sqli
97f0: 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 7d  te_stmt);..    }
9800: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
9810: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
9820: 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c 69   ColumnName(SQLi
9830: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
9840: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
9850: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
9860: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
9870: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
9880: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
9890: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
98a0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
98b0: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74  _column_name_int
98c0: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
98d0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
98e0: 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ut len), len);..
98f0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
9900: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
9910: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
9920: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
9930: 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73  umn_name(stmt._s
9940: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
9950: 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  x), -1);..#endif
9960: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
9970: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
9980: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 43 6f   TypeAffinity Co
9990: 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 53 51 4c  lumnAffinity(SQL
99a0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
99b0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
99c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
99d0: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
99e0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
99f0: 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d 74 2e  olumn_type(stmt.
9a00: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
9a10: 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  dex);..    }....
9a20: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9a30: 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
9a40: 75 6d 6e 54 79 70 65 28 53 51 4c 69 74 65 53 74  umnType(SQLiteSt
9a50: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
9a60: 74 20 69 6e 64 65 78 2c 20 6f 75 74 20 54 79 70  t index, out Typ
9a70: 65 41 66 66 69 6e 69 74 79 20 6e 41 66 66 69 6e  eAffinity nAffin
9a80: 69 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ity)..    {..   
9a90: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66     int len;..#if
9aa0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
9ab0: 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  D..      IntPtr 
9ac0: 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
9ad0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9ae0: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f  column_decltype_
9af0: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
9b00: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
9b10: 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c  , out len);..#el
9b20: 73 65 0d 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20  se..      len = 
9b30: 2d 31 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  -1;..      IntPt
9b40: 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  r p = UnsafeNati
9b50: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9b60: 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
9b70: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
9b80: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
9b90: 6e 64 69 66 0d 0a 20 20 20 20 20 20 6e 41 66 66  ndif..      nAff
9ba0: 69 6e 69 74 79 20 3d 20 43 6f 6c 75 6d 6e 41 66  inity = ColumnAf
9bb0: 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64  finity(stmt, ind
9bc0: 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ex);....      if
9bd0: 20 28 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65   (p != IntPtr.Ze
9be0: 72 6f 29 20 72 65 74 75 72 6e 20 55 54 46 38 54  ro) return UTF8T
9bf0: 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b  oString(p, len);
9c00: 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20  ..      else..  
9c10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73      {..        s
9c20: 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74 6d  tring[] ar = stm
9c30: 74 2e 54 79 70 65 44 65 66 69 6e 69 74 69 6f 6e  t.TypeDefinition
9c40: 73 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  s;..        if (
9c50: 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ar != null)..   
9c60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9c70: 20 20 69 66 20 28 69 6e 64 65 78 20 3c 20 61 72    if (index < ar
9c80: 2e 4c 65 6e 67 74 68 20 26 26 20 61 72 5b 69 6e  .Length && ar[in
9c90: 64 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  dex] != null).. 
9ca0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9cb0: 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20  n ar[index];..  
9cc0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9cd0: 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45   return String.E
9ce0: 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mpty;....       
9cf0: 20 2f 2f 73 77 69 74 63 68 20 28 6e 41 66 66 69   //switch (nAffi
9d00: 6e 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20 2f  nity)..        /
9d10: 2f 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  /{..        //  
9d20: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
9d30: 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20  y.Int64:..      
9d40: 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22    //    return "
9d50: 42 49 47 49 4e 54 22 3b 0d 0a 20 20 20 20 20 20  BIGINT";..      
9d60: 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41    //  case TypeA
9d70: 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d  ffinity.Double:.
9d80: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72  .        //    r
9d90: 65 74 75 72 6e 20 22 44 4f 55 42 4c 45 22 3b 0d  eturn "DOUBLE";.
9da0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73  .        //  cas
9db0: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42  e TypeAffinity.B
9dc0: 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lob:..        //
9dd0: 20 20 20 20 72 65 74 75 72 6e 20 22 42 4c 4f 42      return "BLOB
9de0: 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ";..        //  
9df0: 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20  default:..      
9e00: 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22    //    return "
9e10: 54 45 58 54 22 3b 0d 0a 20 20 20 20 20 20 20 20  TEXT";..        
9e20: 2f 2f 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  //}..      }..  
9e30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
9e40: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
9e50: 20 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51 4c   ColumnIndex(SQL
9e60: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
9e70: 74 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e  t, string column
9e80: 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Name)..    {..  
9e90: 20 20 20 20 69 6e 74 20 78 20 3d 20 43 6f 6c 75      int x = Colu
9ea0: 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d 0a  mnCount(stmt);..
9eb0: 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74  ..      for (int
9ec0: 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20 6e   n = 0; n < x; n
9ed0: 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ++)..      {..  
9ee0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
9ef0: 2e 43 6f 6d 70 61 72 65 28 63 6f 6c 75 6d 6e 4e  .Compare(columnN
9f00: 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28  ame, ColumnName(
9f10: 73 74 6d 74 2c 20 6e 29 2c 20 53 74 72 69 6e 67  stmt, n), String
9f20: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
9f30: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
9f40: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72   0)..          r
9f50: 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20  eturn n;..      
9f60: 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  }..      return 
9f70: 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  -1;..    }....  
9f80: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
9f90: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
9fa0: 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51  nOriginalName(SQ
9fb0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
9fc0: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
9fd0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
9fe0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
9ff0: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
a000: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
a010: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
a020: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a030: 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
a040: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74  _name_interop(st
a050: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
a060: 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29   index, out len)
a070: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
a080: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
a090: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
a0a0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
a0b0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
a0c0: 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73  gin_name(stmt._s
a0d0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
a0e0: 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  x), -1);..#endif
a0f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
a100: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
a110: 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 44 61   string ColumnDa
a120: 74 61 62 61 73 65 4e 61 6d 65 28 53 51 4c 69 74  tabaseName(SQLit
a130: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
a140: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
a150: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
a160: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
a170: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
a180: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
a190: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
a1a0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a1b0: 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f  column_database_
a1c0: 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  name_interop(stm
a1d0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
a1e0: 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c  index, out len),
a1f0: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
a200: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
a210: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
a220: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a230: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61  ite3_column_data
a240: 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f  base_name(stmt._
a250: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
a260: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
a270: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
a280: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
a290: 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54  e string ColumnT
a2a0: 61 62 6c 65 4e 61 6d 65 28 53 51 4c 69 74 65 53  ableName(SQLiteS
a2b0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
a2c0: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
a2d0: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
a2e0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e  ANDARD..      in
a2f0: 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65  t len;..      re
a300: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
a310: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
a320: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
a330: 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f  lumn_table_name_
a340: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
a350: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
a360: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
a370: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
a380: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
a390: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
a3a0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a3b0: 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
a3c0: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
a3d0: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  tmt, index), -1)
a3e0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
a3f0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
a400: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
a410: 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 73 74  olumnMetaData(st
a420: 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c 20 73  ring dataBase, s
a430: 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74 72  tring table, str
a440: 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20  ing column, out 
a450: 73 74 72 69 6e 67 20 64 61 74 61 54 79 70 65 2c  string dataType,
a460: 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c   out string coll
a470: 61 74 65 53 65 71 75 65 6e 63 65 2c 20 6f 75 74  ateSequence, out
a480: 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 6f   bool notNull, o
a490: 75 74 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79 4b  ut bool primaryK
a4a0: 65 79 2c 20 6f 75 74 20 62 6f 6f 6c 20 61 75 74  ey, out bool aut
a4b0: 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20 20 20  oIncrement)..   
a4c0: 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72   {..      IntPtr
a4d0: 20 64 61 74 61 54 79 70 65 50 74 72 3b 0d 0a 20   dataTypePtr;.. 
a4e0: 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c       IntPtr coll
a4f0: 53 65 71 50 74 72 3b 0d 0a 20 20 20 20 20 20 69  SeqPtr;..      i
a500: 6e 74 20 6e 6e 6f 74 4e 75 6c 6c 3b 0d 0a 20 20  nt nnotNull;..  
a510: 20 20 20 20 69 6e 74 20 6e 70 72 69 6d 61 72 79      int nprimary
a520: 4b 65 79 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  Key;..      int 
a530: 6e 61 75 74 6f 49 6e 63 3b 0d 0a 20 20 20 20 20  nautoInc;..     
a540: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
a550: 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 64   n;..      int d
a560: 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  tLen;..      int
a570: 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20 21   csLen;....#if !
a580: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
a590: 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
a5a0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a5b0: 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c  qlite3_table_col
a5c0: 75 6d 6e 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74  umn_metadata_int
a5d0: 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46  erop(_sql, ToUTF
a5e0: 38 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55  8(dataBase), ToU
a5f0: 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54  TF8(table), ToUT
a600: 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20  F8(column), out 
a610: 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f 75 74  dataTypePtr, out
a620: 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75 74   collSeqPtr, out
a630: 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e   nnotNull, out n
a640: 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20  primaryKey, out 
a650: 6e 61 75 74 6f 49 6e 63 2c 20 6f 75 74 20 64 74  nautoInc, out dt
a660: 4c 65 6e 2c 20 6f 75 74 20 63 73 4c 65 6e 29 3b  Len, out csLen);
a670: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 64  ..#else..      d
a680: 74 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20  tLen = -1;..    
a690: 20 20 63 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d    csLen = -1;...
a6a0: 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
a6b0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a6c0: 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c  qlite3_table_col
a6d0: 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 5f 73 71  umn_metadata(_sq
a6e0: 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42 61  l, ToUTF8(dataBa
a6f0: 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c  se), ToUTF8(tabl
a700: 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d  e), ToUTF8(colum
a710: 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79 70 65  n), out dataType
a720: 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71  Ptr, out collSeq
a730: 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c  Ptr, out nnotNul
a740: 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72 79 4b  l, out nprimaryK
a750: 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e 63  ey, out nautoInc
a760: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
a770: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
a780: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
a790: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
a7a0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
a7b0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a  astError());....
a7c0: 20 20 20 20 20 20 64 61 74 61 54 79 70 65 20 3d        dataType =
a7d0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 64 61   UTF8ToString(da
a7e0: 74 61 54 79 70 65 50 74 72 2c 20 64 74 4c 65 6e  taTypePtr, dtLen
a7f0: 29 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74  );..      collat
a800: 65 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46 38  eSequence = UTF8
a810: 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 53 65 71  ToString(collSeq
a820: 50 74 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d 0a  Ptr, csLen);....
a830: 20 20 20 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d 20        notNull = 
a840: 28 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29 3b  (nnotNull == 1);
a850: 0d 0a 20 20 20 20 20 20 70 72 69 6d 61 72 79 4b  ..      primaryK
a860: 65 79 20 3d 20 28 6e 70 72 69 6d 61 72 79 4b 65  ey = (nprimaryKe
a870: 79 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20  y == 1);..      
a880: 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20  autoIncrement = 
a890: 28 6e 61 75 74 6f 49 6e 63 20 3d 3d 20 31 29 3b  (nautoInc == 1);
a8a0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
a8b0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
a8c0: 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62 6c   double GetDoubl
a8d0: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
a8e0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
a8f0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
a900: 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a   double value;..
a910: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
a920: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
a930: 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e        value = Un
a940: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a950: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
a960: 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73 71  _double(stmt._sq
a970: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
a980: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
a990: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
a9a0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
a9b0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
a9c0: 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  lumn_double_inte
a9d0: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
a9e0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
a9f0: 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  t value);..#else
aa00: 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
aa10: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
aa20: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
aa30: 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75  ndif..      retu
aa40: 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d  rn value;..    }
aa50: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
aa60: 20 6f 76 65 72 72 69 64 65 20 73 62 79 74 65 20   override sbyte 
aa70: 47 65 74 53 42 79 74 65 28 53 51 4c 69 74 65 53  GetSByte(SQLiteS
aa80: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
aa90: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
aaa0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75  ..      return u
aab0: 6e 63 68 65 63 6b 65 64 28 28 73 62 79 74 65 29  nchecked((sbyte)
aac0: 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20  (GetInt32(stmt, 
aad0: 69 6e 64 65 78 29 20 26 20 62 79 74 65 2e 4d 61  index) & byte.Ma
aae0: 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d  xValue));..    }
aaf0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
ab00: 20 6f 76 65 72 72 69 64 65 20 62 79 74 65 20 47   override byte G
ab10: 65 74 42 79 74 65 28 53 51 4c 69 74 65 53 74 61  etByte(SQLiteSta
ab20: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
ab30: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
ab40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63        return unc
ab50: 68 65 63 6b 65 64 28 28 62 79 74 65 29 28 47 65  hecked((byte)(Ge
ab60: 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64  tInt32(stmt, ind
ab70: 65 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56 61  ex) & byte.MaxVa
ab80: 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  lue));..    }...
ab90: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
aba0: 65 72 72 69 64 65 20 73 68 6f 72 74 20 47 65 74  erride short Get
abb0: 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61 74  Int16(SQLiteStat
abc0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
abd0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
abe0: 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68       return unch
abf0: 65 63 6b 65 64 28 28 73 68 6f 72 74 29 28 47 65  ecked((short)(Ge
ac00: 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64  tInt32(stmt, ind
ac10: 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61 78  ex) & ushort.Max
ac20: 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d  Value));..    }.
ac30: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
ac40: 6f 76 65 72 72 69 64 65 20 75 73 68 6f 72 74 20  override ushort 
ac50: 47 65 74 55 49 6e 74 31 36 28 53 51 4c 69 74 65  GetUInt16(SQLite
ac60: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
ac70: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
ac80: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
ac90: 75 6e 63 68 65 63 6b 65 64 28 28 75 73 68 6f 72  unchecked((ushor
aca0: 74 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74  t)(GetInt32(stmt
acb0: 2c 20 69 6e 64 65 78 29 20 26 20 75 73 68 6f 72  , index) & ushor
acc0: 74 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20  t.MaxValue));.. 
acd0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
ace0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
acf0: 74 20 47 65 74 49 6e 74 33 32 28 53 51 4c 69 74  t GetInt32(SQLit
ad00: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
ad10: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
ad20: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
ad30: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ad40: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
ad50: 75 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f 73 71  umn_int(stmt._sq
ad60: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
ad70: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
ad80: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
ad90: 64 65 20 75 69 6e 74 20 47 65 74 55 49 6e 74 33  de uint GetUInt3
ada0: 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  2(SQLiteStatemen
adb0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
adc0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
add0: 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65   return unchecke
ade0: 64 28 28 75 69 6e 74 29 47 65 74 49 6e 74 33 32  d((uint)GetInt32
adf0: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d  (stmt, index));.
ae00: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
ae10: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
ae20: 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34 28 53 51  long GetInt64(SQ
ae30: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
ae40: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
ae50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c 6f 6e      {..      lon
ae60: 67 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50  g value;..#if !P
ae70: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
ae80: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
ae90: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
aea0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
aeb0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34  te3_column_int64
aec0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
aed0: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c  mt, index);..#el
aee0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
aef0: 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  ARD..      Unsaf
af00: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
af10: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
af20: 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  t64_interop(stmt
af30: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
af40: 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c 75 65 29  ndex, out value)
af50: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
af60: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
af70: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
af80: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
af90: 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65      return value
afa0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
afb0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
afc0: 65 20 75 6c 6f 6e 67 20 47 65 74 55 49 6e 74 36  e ulong GetUInt6
afd0: 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  4(SQLiteStatemen
afe0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
aff0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
b000: 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65   return unchecke
b010: 64 28 28 75 6c 6f 6e 67 29 47 65 74 49 6e 74 36  d((ulong)GetInt6
b020: 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b  4(stmt, index));
b030: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
b040: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
b050: 20 73 74 72 69 6e 67 20 47 65 74 54 65 78 74 28   string GetText(
b060: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
b070: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
b080: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
b090: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
b0a0: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20       int len;.. 
b0b0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
b0c0: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
b0d0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
b0e0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
b0f0: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
b100: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
b110: 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e  x, out len), len
b120: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
b130: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
b140: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
b150: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
b160: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d  _column_text(stm
b170: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
b180: 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20 20 20  index),..       
b190: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
b1a0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
b1b0: 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f  umn_bytes(stmt._
b1c0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
b1d0: 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ex));..#endif.. 
b1e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
b1f0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 44 61  rnal override Da
b200: 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54 69  teTime GetDateTi
b210: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
b220: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
b230: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
b240: 20 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46    if (_datetimeF
b250: 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44  ormat == SQLiteD
b260: 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73  ateFormats.Ticks
b270: 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  )..        retur
b280: 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74  n ToDateTime(Get
b290: 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65  Int64(stmt, inde
b2a0: 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e  x), _datetimeKin
b2b0: 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20  d);..      else 
b2c0: 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72  if (_datetimeFor
b2d0: 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44 61 74  mat == SQLiteDat
b2e0: 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44  eFormats.JulianD
b2f0: 61 79 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ay)..        ret
b300: 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 47  urn ToDateTime(G
b310: 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69  etDouble(stmt, i
b320: 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65  ndex), _datetime
b330: 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c  Kind);..      el
b340: 73 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65  se if (_datetime
b350: 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65  Format == SQLite
b360: 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78  DateFormats.Unix
b370: 45 70 6f 63 68 29 0d 0a 20 20 20 20 20 20 20 20  Epoch)..        
b380: 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
b390: 65 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  e(GetInt32(stmt,
b3a0: 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69   index), _dateti
b3b0: 6d 65 4b 69 6e 64 29 3b 0d 0a 0d 0a 23 69 66 20  meKind);....#if 
b3c0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
b3d0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
b3e0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54  ..      return T
b3f0: 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65  oDateTime(Unsafe
b400: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b410: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
b420: 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  t_interop(stmt._
b430: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
b440: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
b450: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
b460: 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54    return ToDateT
b470: 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ime(UnsafeNative
b480: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b490: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74  column_text(stmt
b4a0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
b4b0: 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20 20 20 20  ndex),..        
b4c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
b4d0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
b4e0: 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73  mn_bytes(stmt._s
b4f0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
b500: 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  x));..#endif..  
b510: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
b520: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
b530: 67 20 47 65 74 42 79 74 65 73 28 53 51 4c 69 74  g GetBytes(SQLit
b540: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
b550: 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20   int index, int 
b560: 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74  nDataOffset, byt
b570: 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  e[] bDest, int n
b580: 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
b590: 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
b5a0: 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73    int nlen = Uns
b5b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b5c0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
b5d0: 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69  bytes(stmt._sqli
b5e0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
b5f0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20  ....      // If 
b600: 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62  no destination b
b610: 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68  uffer, return th
b620: 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a  e size needed...
b630: 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20        if (bDest 
b640: 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
b650: 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  nlen;....      i
b660: 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65  nt nCopied = nLe
b670: 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ngth;....      i
b680: 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74  f (nCopied + nSt
b690: 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67  art > bDest.Leng
b6a0: 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44  th) nCopied = bD
b6b0: 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74  est.Length - nSt
b6c0: 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  art;..      if (
b6d0: 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f  nCopied + nDataO
b6e0: 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43  ffset > nlen) nC
b6f0: 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e  opied = nlen - n
b700: 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20  DataOffset;.... 
b710: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
b720: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   > 0)..      {..
b730: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
b740: 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  tr = UnsafeNativ
b750: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
b760: 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74 6d  _column_blob(stm
b770: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
b780: 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  index);....     
b790: 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28     Marshal.Copy(
b7a0: 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49  (IntPtr)(ptr.ToI
b7b0: 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66  nt64() + nDataOf
b7c0: 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53  fset), bDest, nS
b7d0: 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d  tart, nCopied);.
b7e0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
b7f0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  else..      {.. 
b800: 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d         nCopied =
b810: 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a   0;..      }....
b820: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f        return nCo
b830: 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  pied;..    }....
b840: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
b850: 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 43 68  rride long GetCh
b860: 61 72 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ars(SQLiteStatem
b870: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
b880: 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66  dex, int nDataOf
b890: 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62 44 65  fset, char[] bDe
b8a0: 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20  st, int nStart, 
b8b0: 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20  int nLength)..  
b8c0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
b8d0: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  len;..      int 
b8e0: 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74  nCopied = nLengt
b8f0: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 74 72 69  h;....      stri
b900: 6e 67 20 73 74 72 20 3d 20 47 65 74 54 65 78 74  ng str = GetText
b910: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
b920: 20 20 20 20 20 20 6e 6c 65 6e 20 3d 20 73 74 72        nlen = str
b930: 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  .Length;....    
b940: 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e    if (bDest == n
b950: 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e  ull) return nlen
b960: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
b970: 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20  Copied + nStart 
b980: 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20  > bDest.Length) 
b990: 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e  nCopied = bDest.
b9a0: 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b  Length - nStart;
b9b0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
b9c0: 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65  ied + nDataOffse
b9d0: 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65  t > nlen) nCopie
b9e0: 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61  d = nlen - nData
b9f0: 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20  Offset;....     
ba00: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30   if (nCopied > 0
ba10: 29 0d 0a 20 20 20 20 20 20 20 20 73 74 72 2e 43  )..        str.C
ba20: 6f 70 79 54 6f 28 6e 44 61 74 61 4f 66 66 73 65  opyTo(nDataOffse
ba30: 74 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74  t, bDest, nStart
ba40: 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20  , nCopied);..   
ba50: 20 20 20 65 6c 73 65 20 6e 43 6f 70 69 65 64 20     else nCopied 
ba60: 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  = 0;....      re
ba70: 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20  turn nCopied;.. 
ba80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
ba90: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
baa0: 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65  ol IsNull(SQLite
bab0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
bac0: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
bad0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
bae0: 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  (ColumnAffinity(
baf0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 3d 3d 20  stmt, index) == 
bb00: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c  TypeAffinity.Nul
bb10: 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
bb20: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
bb30: 69 64 65 20 69 6e 74 20 41 67 67 72 65 67 61 74  ide int Aggregat
bb40: 65 43 6f 75 6e 74 28 49 6e 74 50 74 72 20 63 6f  eCount(IntPtr co
bb50: 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  ntext)..    {.. 
bb60: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
bb70: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
bb80: 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74  sqlite3_aggregat
bb90: 65 5f 63 6f 75 6e 74 28 63 6f 6e 74 65 78 74 29  e_count(context)
bba0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
bbb0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
bbc0: 65 20 76 6f 69 64 20 43 72 65 61 74 65 46 75 6e  e void CreateFun
bbd0: 63 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72  ction(string str
bbe0: 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e 41  Function, int nA
bbf0: 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43 6f  rgs, bool needCo
bc00: 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65 43 61 6c  llSeq, SQLiteCal
bc10: 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c 69  lback func, SQLi
bc20: 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 73  teCallback funcs
bc30: 74 65 70 2c 20 53 51 4c 69 74 65 46 69 6e 61 6c  tep, SQLiteFinal
bc40: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e  Callback funcfin
bc50: 61 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  al)..    {..    
bc60: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
bc70: 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  e n;....#if !SQL
bc80: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
bc90: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
bca0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
bcb0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
bcc0: 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  ion_interop(_sql
bcd0: 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63  , ToUTF8(strFunc
bce0: 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c  tion), nArgs, 4,
bcf0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
bd00: 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75  nc, funcstep, fu
bd10: 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f  ncfinal, (needCo
bd20: 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f  llSeq == true) ?
bd30: 20 31 20 3a 20 30 29 3b 0d 0a 20 20 20 20 20 20   1 : 0);..      
bd40: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
bd50: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d  rrorCode.Ok) n =
bd60: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
bd70: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
bd80: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74  ate_function_int
bd90: 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46  erop(_sql, ToUTF
bda0: 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
bdb0: 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72  nArgs, 1, IntPtr
bdc0: 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
bdd0: 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
bde0: 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d  , (needCollSeq =
bdf0: 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29  = true) ? 1 : 0)
be00: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
be10: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
be20: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
be30: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
be40: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
be50: 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73  Function), nArgs
be60: 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 4, IntPtr.Zero
be70: 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70  , func, funcstep
be80: 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20  , funcfinal);.. 
be90: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
bea0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
beb0: 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ) n = UnsafeNati
bec0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
bed0: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
bee0: 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  n(_sql, ToUTF8(s
bef0: 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72  trFunction), nAr
bf00: 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65  gs, 1, IntPtr.Ze
bf10: 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74  ro, func, funcst
bf20: 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d  ep, funcfinal);.
bf30: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69  .#endif..      i
bf40: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
bf50: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
bf60: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
bf70: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
bf80: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
bf90: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
bfa0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
bfb0: 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73  reateCollation(s
bfc0: 74 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69  tring strCollati
bfd0: 6f 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74  on, SQLiteCollat
bfe0: 69 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74 65  ion func, SQLite
bff0: 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36  Collation func16
c000: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
c010: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
c020: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
c030: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
c040: 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
c050: 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
c060: 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c 20  rCollation), 2, 
c070: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
c080: 63 31 36 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  c16);..      if 
c090: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
c0a0: 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e  rCode.Ok) n = Un
c0b0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
c0c0: 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
c0d0: 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c  _collation(_sql,
c0e0: 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61   ToUTF8(strColla
c0f0: 74 69 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74 72  tion), 1, IntPtr
c100: 2e 5a 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20  .Zero, func);.. 
c110: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
c120: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
c130: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
c140: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
c150: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
c160: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
c170: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
c180: 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61  int ContextColla
c190: 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74  teCompare(Collat
c1a0: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20  ionEncodingEnum 
c1b0: 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  enc, IntPtr cont
c1c0: 65 78 74 2c 20 73 74 72 69 6e 67 20 73 31 2c 20  ext, string s1, 
c1d0: 73 74 72 69 6e 67 20 73 32 29 0d 0a 20 20 20 20  string s2)..    
c1e0: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
c1f0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62  TANDARD..      b
c200: 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20  yte[] b1;..     
c210: 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20   byte[] b2;..   
c220: 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45     System.Text.E
c230: 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65  ncoding converte
c240: 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  r = null;....   
c250: 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d     switch (enc).
c260: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
c270: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
c280: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
c290: 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  8:..          co
c2a0: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
c2b0: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
c2c0: 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  TF8;..          
c2d0: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
c2e0: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
c2f0: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36  codingEnum.UTF16
c300: 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  LE:..          c
c310: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
c320: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
c330: 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
c340: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
c350: 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
c360: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
c370: 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20  TF16BE:..       
c380: 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
c390: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
c3a0: 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69  ing.BigEndianUni
c3b0: 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
c3c0: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d   break;..      }
c3d0: 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63  ....      b1 = c
c3e0: 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
c3f0: 73 28 73 31 29 3b 0d 0a 20 20 20 20 20 20 62 32  s(s1);..      b2
c400: 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74   = converter.Get
c410: 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20  Bytes(s2);....  
c420: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
c430: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c440: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63  qlite3_context_c
c450: 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72  ollcompare_inter
c460: 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20  op(context, b1, 
c470: 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62  b1.Length, b2, b
c480: 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73  2.Length);..#els
c490: 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
c4a0: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
c4b0: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
c4c0: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
c4d0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
c4e0: 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65 78  rride int Contex
c4f0: 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28  tCollateCompare(
c500: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
c510: 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74  gEnum enc, IntPt
c520: 72 20 63 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b  r context, char[
c530: 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20 63 32 29  ] c1, char[] c2)
c540: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
c550: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
c560: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d       byte[] b1;.
c570: 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 32  .      byte[] b2
c580: 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e  ;..      System.
c590: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f  Text.Encoding co
c5a0: 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d  nverter = null;.
c5b0: 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20  ...      switch 
c5c0: 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  (enc)..      {..
c5d0: 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c          case Col
c5e0: 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
c5f0: 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20 20  um.UTF8:..      
c600: 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
c610: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
c620: 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20  ding.UTF8;..    
c630: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
c640: 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61        case Colla
c650: 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
c660: 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20  .UTF16LE:..     
c670: 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
c680: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
c690: 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a  oding.Unicode;..
c6a0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
c6b0: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
c6c0: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
c6d0: 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20  Enum.UTF16BE:.. 
c6e0: 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
c6f0: 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
c700: 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64  .Encoding.BigEnd
c710: 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20  ianUnicode;..   
c720: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
c730: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
c740: 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47  b1 = converter.G
c750: 65 74 42 79 74 65 73 28 63 31 29 3b 0d 0a 20 20  etBytes(c1);..  
c760: 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72 74      b2 = convert
c770: 65 72 2e 47 65 74 42 79 74 65 73 28 63 32 29 3b  er.GetBytes(c2);
c780: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
c790: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
c7a0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
c7b0: 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65  text_collcompare
c7c0: 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
c7d0: 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c  , b1, b1.Length,
c7e0: 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b   b2, b2.Length);
c7f0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
c800: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
c810: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
c820: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
c830: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
c840: 61 6c 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c  al override Coll
c850: 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 47 65  ationSequence Ge
c860: 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e  tCollationSequen
c870: 63 65 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ce(SQLiteFunctio
c880: 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 20 63  n func, IntPtr c
c890: 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
c8a0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
c8b0: 44 41 52 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c  DARD..      Coll
c8c0: 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 73 65  ationSequence se
c8d0: 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f  q = new Collatio
c8e0: 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20  nSequence();..  
c8f0: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20      int len;..  
c900: 20 20 20 20 69 6e 74 20 74 79 70 65 3b 0d 0a 20      int type;.. 
c910: 20 20 20 20 20 69 6e 74 20 65 6e 63 3b 0d 0a 20       int enc;.. 
c920: 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20       IntPtr p = 
c930: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
c940: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ods.sqlite3_cont
c950: 65 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74 65  ext_collseq_inte
c960: 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 6f 75 74  rop(context, out
c970: 20 74 79 70 65 2c 20 6f 75 74 20 65 6e 63 2c 20   type, out enc, 
c980: 6f 75 74 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20  out len);....   
c990: 20 20 20 69 66 20 28 70 20 21 3d 20 6e 75 6c 6c     if (p != null
c9a0: 29 20 73 65 71 2e 4e 61 6d 65 20 3d 20 55 54 46  ) seq.Name = UTF
c9b0: 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e  8ToString(p, len
c9c0: 29 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 54 79  );..      seq.Ty
c9d0: 70 65 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 54  pe = (CollationT
c9e0: 79 70 65 45 6e 75 6d 29 74 79 70 65 3b 0d 0a 20  ypeEnum)type;.. 
c9f0: 20 20 20 20 20 73 65 71 2e 5f 66 75 6e 63 20 3d       seq._func =
ca00: 20 66 75 6e 63 3b 0d 0a 20 20 20 20 20 20 73 65   func;..      se
ca10: 71 2e 45 6e 63 6f 64 69 6e 67 20 3d 20 28 43 6f  q.Encoding = (Co
ca20: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
ca30: 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20 20 20  num)enc;....    
ca40: 20 20 72 65 74 75 72 6e 20 73 65 71 3b 0d 0a 23    return seq;..#
ca50: 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
ca60: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
ca70: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
ca80: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
ca90: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
caa0: 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
cab0: 74 50 61 72 61 6d 56 61 6c 75 65 42 79 74 65 73  tParamValueBytes
cac0: 28 49 6e 74 50 74 72 20 70 2c 20 69 6e 74 20 6e  (IntPtr p, int n
cad0: 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65  DataOffset, byte
cae0: 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53  [] bDest, int nS
caf0: 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74  tart, int nLengt
cb00: 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  h)..    {..     
cb10: 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61   int nlen = Unsa
cb20: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
cb30: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
cb40: 74 65 73 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20  tes(p);....     
cb50: 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e   // If no destin
cb60: 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65  ation buffer, re
cb70: 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65  turn the size ne
cb80: 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20  eded...      if 
cb90: 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20  (bDest == null) 
cba0: 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a  return nlen;....
cbb0: 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65        int nCopie
cbc0: 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  d = nLength;....
cbd0: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
cbe0: 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65  d + nStart > bDe
cbf0: 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69  st.Length) nCopi
cc00: 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74  ed = bDest.Lengt
cc10: 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20  h - nStart;..   
cc20: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
cc30: 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e   nDataOffset > n
cc40: 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e  len) nCopied = n
cc50: 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65  len - nDataOffse
cc60: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  t;....      if (
cc70: 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20  nCopied > 0)..  
cc80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
cc90: 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61  ntPtr ptr = Unsa
cca0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
ccb0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c  sqlite3_value_bl
ccc0: 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ob(p);....      
ccd0: 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28    Marshal.Copy((
cce0: 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e  IntPtr)(ptr.ToIn
ccf0: 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66  t64() + nDataOff
cd00: 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74  set), bDest, nSt
cd10: 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a  art, nCopied);..
cd20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65        }..      e
cd30: 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  lse..      {..  
cd40: 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20        nCopied = 
cd50: 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  0;..      }.... 
cd60: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70       return nCop
cd70: 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ied;..    }.... 
cd80: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
cd90: 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74 50  ride double GetP
cda0: 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65 28  aramValueDouble(
cdb0: 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20  IntPtr ptr)..   
cdc0: 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65   {..      double
cdd0: 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c   value;..#if !PL
cde0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
cdf0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76  AMEWORK..      v
ce00: 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74  alue = UnsafeNat
ce10: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
ce20: 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28  e3_value_double(
ce30: 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  ptr);..#elif !SQ
ce40: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
ce50: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
ce60: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ce70: 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e  _value_double_in
ce80: 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 76  terop(ptr, out v
ce90: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
cea0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
ceb0: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
cec0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
ced0: 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  f..      return 
cee0: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  value;..    }...
cef0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
cf00: 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 50 61  erride int GetPa
cf10: 72 61 6d 56 61 6c 75 65 49 6e 74 33 32 28 49 6e  ramValueInt32(In
cf20: 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
cf30: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
cf40: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
cf50: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
cf60: 5f 69 6e 74 28 70 74 72 29 3b 0d 0a 20 20 20 20  _int(ptr);..    
cf70: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
cf80: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
cf90: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74  GetParamValueInt
cfa0: 36 34 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a  64(IntPtr ptr)..
cfb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74      {..      Int
cfc0: 36 34 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21  64 value;..#if !
cfd0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
cfe0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
cff0: 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e   value = UnsafeN
d000: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d010: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34  ite3_value_int64
d020: 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53  (ptr);..#elif !S
d030: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
d040: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
d050: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d060: 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e  3_value_int64_in
d070: 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 76  terop(ptr, out v
d080: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
d090: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
d0a0: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
d0b0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
d0c0: 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  f..      return 
d0d0: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  value;..    }...
d0e0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d0f0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65  erride string Ge
d100: 74 50 61 72 61 6d 56 61 6c 75 65 54 65 78 74 28  tParamValueText(
d110: 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20  IntPtr ptr)..   
d120: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
d130: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
d140: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
d150: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
d160: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
d170: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
d180: 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65 72  value_text_inter
d190: 6f 70 28 70 74 72 2c 20 6f 75 74 20 6c 65 6e 29  op(ptr, out len)
d1a0: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
d1b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
d1c0: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
d1d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d1e0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
d1f0: 28 70 74 72 29 2c 0d 0a 20 20 20 20 20 20 20 20  (ptr),..        
d200: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d210: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
d220: 65 5f 62 79 74 65 73 28 70 74 72 29 29 3b 0d 0a  e_bytes(ptr));..
d230: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
d240: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d250: 65 72 72 69 64 65 20 54 79 70 65 41 66 66 69 6e  erride TypeAffin
d260: 69 74 79 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ity GetParamValu
d270: 65 54 79 70 65 28 49 6e 74 50 74 72 20 70 74 72  eType(IntPtr ptr
d280: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
d290: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
d2a0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d2b0: 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 74  e3_value_type(pt
d2c0: 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  r);..    }....  
d2d0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
d2e0: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 42  ide void ReturnB
d2f0: 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  lob(IntPtr conte
d300: 78 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65  xt, byte[] value
d310: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
d320: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d330: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
d340: 6c 74 5f 62 6c 6f 62 28 63 6f 6e 74 65 78 74 2c  lt_blob(context,
d350: 20 76 61 6c 75 65 2c 20 76 61 6c 75 65 2e 4c 65   value, value.Le
d360: 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28 2d  ngth, (IntPtr)(-
d370: 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  1));..    }.... 
d380: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
d390: 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
d3a0: 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 63 6f  Double(IntPtr co
d3b0: 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65 20 76 61  ntext, double va
d3c0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  lue)..    {..#if
d3d0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
d3e0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
d3f0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
d400: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
d410: 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f 6e  esult_double(con
d420: 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  text, value);..#
d430: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
d440: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73  NDARD..      Uns
d450: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d460: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
d470: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 63  double_interop(c
d480: 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75  ontext, ref valu
d490: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
d4a0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
d4b0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
d4c0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
d4d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d4e0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
d4f0: 6f 69 64 20 52 65 74 75 72 6e 45 72 72 6f 72 28  oid ReturnError(
d500: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
d510: 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20  string value).. 
d520: 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
d530: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
d540: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
d550: 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 54 6f  rror(context, To
d560: 55 54 46 38 28 76 61 6c 75 65 29 2c 20 76 61 6c  UTF8(value), val
d570: 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20  ue.Length);..   
d580: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
d590: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
d5a0: 20 52 65 74 75 72 6e 49 6e 74 33 32 28 49 6e 74   ReturnInt32(Int
d5b0: 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e 74  Ptr context, int
d5c0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
d5d0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
d5e0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d5f0: 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e  3_result_int(con
d600: 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  text, value);.. 
d610: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d620: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
d630: 69 64 20 52 65 74 75 72 6e 49 6e 74 36 34 28 49  id ReturnInt64(I
d640: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 6c  ntPtr context, l
d650: 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ong value)..    
d660: 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
d670: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
d680: 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  K..      UnsafeN
d690: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d6a0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36  ite3_result_int6
d6b0: 34 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  4(context, value
d6c0: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
d6d0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
d6e0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
d6f0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
d700: 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65 72  sult_int64_inter
d710: 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20  op(context, ref 
d720: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
d730: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
d740: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
d750: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
d760: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
d770: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
d780: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 4e 75  de void ReturnNu
d790: 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  ll(IntPtr contex
d7a0: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
d7b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d7c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
d7d0: 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74  ult_null(context
d7e0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
d7f0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
d800: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 54 65  de void ReturnTe
d810: 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  xt(IntPtr contex
d820: 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29  t, string value)
d830: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 62  ..    {..      b
d840: 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38  yte[] b = ToUTF8
d850: 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20  (value);..      
d860: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d870: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
d880: 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c  lt_text(context,
d890: 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20   ToUTF8(value), 
d8a0: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49  b.Length - 1, (I
d8b0: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
d8c0: 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52    }....#if INTER
d8d0: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
d8e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
d8f0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c  ry>..    /// Cal
d900: 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51  ls the native SQ
d910: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
d920: 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 72  y in order to cr
d930: 65 61 74 65 20 61 20 64 69 73 70 6f 73 61 62 6c  eate a disposabl
d940: 65 0d 0a 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c  e..    /// modul
d950: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
d960: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
d970: 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
d980: 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  le...    /// </s
d990: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
d9a0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f   <param name="mo
d9b0: 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  dule">..    /// 
d9c0: 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63  The module objec
d9d0: 74 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65  t to be used whe
d9e0: 6e 20 63 72 65 61 74 69 6e 67 20 74 68 65 20 6e  n creating the n
d9f0: 61 74 69 76 65 20 64 69 73 70 6f 73 61 62 6c 65  ative disposable
da00: 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 2f 2f   module...    //
da10: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
da20: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
da30: 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f  "flags">..    //
da40: 2f 20 54 68 65 20 66 6c 61 67 73 20 66 6f 72 20  / The flags for 
da50: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 3c  the associated <
da60: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
da70: 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f  Connection" /> o
da80: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
da90: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
daa0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
dab0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 72  override void Cr
dac0: 65 61 74 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74  eateModule(SQLit
dad0: 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 20  eModule module, 
dae0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
daf0: 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20  Flags flags)..  
db00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
db10: 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (module == null)
db20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
db30: 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
db40: 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 6d  NullException("m
db50: 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  odule");....    
db60: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
db70: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
db80: 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64 75  nFlags.NoLogModu
db90: 6c 65 29 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e  le) != SQLiteCon
dba0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 4c  nectionFlags.NoL
dbb0: 6f 67 4d 6f 64 75 6c 65 29 0d 0a 20 20 20 20 20  ogModule)..     
dbc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
dbd0: 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 72 72 6f    module.LogErro
dbe0: 72 73 20 3d 20 28 28 66 6c 61 67 73 20 26 20 53  rs = ((flags & S
dbf0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
dc00: 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 72  lags.LogModuleEr
dc10: 72 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ror) == SQLiteCo
dc20: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
dc30: 67 4d 6f 64 75 6c 65 45 72 72 6f 72 29 3b 0d 0a  gModuleError);..
dc40: 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
dc50: 6c 65 2e 4c 6f 67 45 78 63 65 70 74 69 6f 6e 73  le.LogExceptions
dc60: 20 3d 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c   = ((flags & SQL
dc70: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
dc80: 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65  gs.LogModuleExce
dc90: 70 74 69 6f 6e 29 20 3d 3d 20 53 51 4c 69 74 65  ption) == SQLite
dca0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
dcb0: 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70 74 69  LogModuleExcepti
dcc0: 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  on);..        }.
dcd0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  ...        if (_
dce0: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
dcf0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
dd00: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
dd10: 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20  ion("connection 
dd20: 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
dd30: 61 6e 64 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  andle");....    
dd40: 20 20 20 20 53 65 74 4c 6f 61 64 45 78 74 65 6e      SetLoadExten
dd50: 73 69 6f 6e 28 74 72 75 65 29 3b 0d 0a 20 20 20  sion(true);..   
dd60: 20 20 20 20 20 4c 6f 61 64 45 78 74 65 6e 73 69       LoadExtensi
dd70: 6f 6e 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  on(UnsafeNativeM
dd80: 65 74 68 6f 64 73 2e 53 51 4c 49 54 45 5f 44 4c  ethods.SQLITE_DL
dd90: 4c 2c 20 22 73 71 6c 69 74 65 33 5f 76 74 73 68  L, "sqlite3_vtsh
dda0: 69 6d 5f 69 6e 69 74 22 29 3b 0d 0a 0d 0a 20 20  im_init");....  
ddb0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 4e 61        IntPtr pNa
ddc0: 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  me = IntPtr.Zero
ddd0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79  ;....        try
dde0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
ddf0: 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d           pName =
de00: 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74   SQLiteString.Ut
de10: 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
de20: 6e 67 28 6d 6f 64 75 6c 65 2e 4e 61 6d 65 29 3b  ng(module.Name);
de30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
de40: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
de50: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ods.sqlite3_modu
de60: 6c 65 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 20  le nativeModule 
de70: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
de80: 20 20 20 6d 6f 64 75 6c 65 2e 43 72 65 61 74 65     module.Create
de90: 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 29 3b 0d  NativeModule();.
dea0: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
deb0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
dec0: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  K..            i
ded0: 66 20 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  f (UnsafeNativeM
dee0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
def0: 72 65 61 74 65 5f 64 69 73 70 6f 73 61 62 6c 65  reate_disposable
df00: 5f 6d 6f 64 75 6c 65 28 0d 0a 20 20 20 20 20 20  _module(..      
df10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
df20: 71 6c 2c 20 70 4e 61 6d 65 2c 20 72 65 66 20 6e  ql, pName, ref n
df30: 61 74 69 76 65 4d 6f 64 75 6c 65 2c 20 49 6e 74  ativeModule, Int
df40: 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20 20 20  Ptr.Zero,..     
df50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
df60: 75 6c 6c 29 20 21 3d 20 49 6e 74 50 74 72 2e 5a  ull) != IntPtr.Z
df70: 65 72 6f 29 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ero)..#elif !SQL
df80: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
df90: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 55 6e            if (Un
dfa0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
dfb0: 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
dfc0: 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75  _disposable_modu
dfd0: 6c 65 5f 69 6e 74 65 72 6f 70 28 0d 0a 20 20 20  le_interop(..   
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dff0: 20 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c 20 6d 6f   _sql, pName, mo
e000: 64 75 6c 65 2e 43 72 65 61 74 65 4e 61 74 69 76  dule.CreateNativ
e010: 65 4d 6f 64 75 6c 65 49 6e 74 65 72 6f 70 28 29  eModuleInterop()
e020: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e030: 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
e040: 75 6c 65 2e 69 56 65 72 73 69 6f 6e 2c 20 6e 61  ule.iVersion, na
e050: 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61  tiveModule.xCrea
e060: 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te,..           
e070: 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
e080: 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 2c 20  odule.xConnect, 
e090: 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65  nativeModule.xBe
e0a0: 73 74 49 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20  stIndex,..      
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
e0c0: 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63  tiveModule.xDisc
e0d0: 6f 6e 6e 65 63 74 2c 20 6e 61 74 69 76 65 4d 6f  onnect, nativeMo
e0e0: 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 2c 0d 0a  dule.xDestroy,..
e0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e100: 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
e110: 2e 78 4f 70 65 6e 2c 20 6e 61 74 69 76 65 4d 6f  .xOpen, nativeMo
e120: 64 75 6c 65 2e 78 43 6c 6f 73 65 2c 0d 0a 20 20  dule.xClose,..  
e130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e140: 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
e150: 46 69 6c 74 65 72 2c 20 6e 61 74 69 76 65 4d 6f  Filter, nativeMo
e160: 64 75 6c 65 2e 78 4e 65 78 74 2c 0d 0a 20 20 20  dule.xNext,..   
e170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e180: 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45   nativeModule.xE
e190: 6f 66 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65  of, nativeModule
e1a0: 2e 78 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20 20 20  .xColumn,..     
e1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
e1c0: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77  ativeModule.xRow
e1d0: 49 64 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65  Id, nativeModule
e1e0: 2e 78 55 70 64 61 74 65 2c 0d 0a 20 20 20 20 20  .xUpdate,..     
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
e200: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67  ativeModule.xBeg
e210: 69 6e 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65  in, nativeModule
e220: 2e 78 53 79 6e 63 2c 0d 0a 20 20 20 20 20 20 20  .xSync,..       
e230: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
e240: 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69  iveModule.xCommi
e250: 74 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  t, nativeModule.
e260: 78 52 6f 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  xRollback,..    
e270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e280: 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  nativeModule.xFi
e290: 6e 64 46 75 6e 63 74 69 6f 6e 2c 20 6e 61 74 69  ndFunction, nati
e2a0: 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65  veModule.xRename
e2b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e2c0: 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
e2d0: 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 2c 20  ule.xSavepoint, 
e2e0: 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65  nativeModule.xRe
e2f0: 6c 65 61 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  lease,..        
e300: 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
e310: 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61  veModule.xRollba
e320: 63 6b 54 6f 2c 20 49 6e 74 50 74 72 2e 5a 65 72  ckTo, IntPtr.Zer
e330: 6f 2c 20 6e 75 6c 6c 29 20 21 3d 20 49 6e 74 50  o, null) != IntP
e340: 74 72 2e 5a 65 72 6f 29 0d 0a 23 65 6c 73 65 0d  tr.Zero)..#else.
e350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
e360: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
e370: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
e380: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 20 21  ;..#endif..#if !
e390: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
e3a0: 46 52 41 4d 45 57 4f 52 4b 20 7c 7c 20 21 53 51  FRAMEWORK || !SQ
e3b0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
e3c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e3e0: 20 28 5f 6d 6f 64 75 6c 65 73 20 3d 3d 20 6e 75   (_modules == nu
e3f0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
e400: 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65           _module
e410: 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  s = new Dictiona
e420: 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69 74  ry<string, SQLit
e430: 65 4d 6f 64 75 6c 65 3e 28 29 3b 0d 0a 0d 0a 20  eModule>();.... 
e440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
e450: 6d 6f 64 75 6c 65 73 2e 41 64 64 28 6d 6f 64 75  modules.Add(modu
e460: 6c 65 2e 4e 61 6d 65 2c 20 6d 6f 64 75 6c 65 29  le.Name, module)
e470: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
e480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
e490: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
e4a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e4b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
e4c0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 47 65 74  iteException(Get
e4d0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
e4e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
e4f0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
e500: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
e510: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
e520: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 4e 61           if (pNa
e530: 6d 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  me != IntPtr.Zer
e540: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
e550: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e560: 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e     SQLiteMemory.
e570: 46 72 65 65 28 70 4e 61 6d 65 29 3b 0d 0a 20 20  Free(pName);..  
e580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4e                pN
e590: 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ame = IntPtr.Zer
e5a0: 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
e5b0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
e5c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
e5d0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
e5e0: 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69  / Calls the nati
e5f0: 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  ve SQLite core l
e600: 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20  ibrary in order 
e610: 74 6f 20 63 6c 65 61 6e 75 70 20 74 68 65 20 72  to cleanup the r
e620: 65 73 6f 75 72 63 65 73 0d 0a 20 20 20 20 2f 2f  esources..    //
e630: 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  / associated wit
e640: 68 20 61 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61  h a module conta
e650: 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d  ining the implem
e660: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76 69  entation of a vi
e670: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
e680: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
e690: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
e6a0: 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d   name="module">.
e6b0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64  .    /// The mod
e6c0: 75 6c 65 20 6f 62 6a 65 63 74 20 70 72 65 76 69  ule object previ
e6d0: 6f 75 73 6c 79 20 70 61 73 73 65 64 20 74 6f 20  ously passed to 
e6e0: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43  the <see cref="C
e6f0: 72 65 61 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d  reateModule" />.
e700: 0a 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e  .    /// method.
e710: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
e720: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
e730: 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e  am name="flags">
e740: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c  ..    /// The fl
e750: 61 67 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f  ags for the asso
e760: 63 69 61 74 65 64 20 3c 73 65 65 20 63 72 65 66  ciated <see cref
e770: 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  ="SQLiteConnecti
e780: 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  on" /> object in
e790: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f  stance...    ///
e7a0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
e7b0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
e7c0: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 4d 6f 64   void DisposeMod
e7d0: 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ule(SQLiteModule
e7e0: 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74 65 43   module, SQLiteC
e7f0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
e800: 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  lags)..    {..  
e810: 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
e820: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
e830: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
e840: 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
e850: 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29  eption("module")
e860: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6d 6f 64  ;....        mod
e870: 75 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a  ule.Dispose();..
e880: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
e890: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
e8a0: 65 72 72 69 64 65 20 49 6e 74 50 74 72 20 41 67  erride IntPtr Ag
e8b0: 67 72 65 67 61 74 65 43 6f 6e 74 65 78 74 28 49  gregateContext(I
e8c0: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a  ntPtr context)..
e8d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
e8e0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
e8f0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
e900: 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78  aggregate_contex
e910: 74 28 63 6f 6e 74 65 78 74 2c 20 31 29 3b 0d 0a  t(context, 1);..
e920: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54      }....#if INT
e930: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
e940: 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  LE..    /// <sum
e950: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
e960: 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20  alls the native 
e970: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
e980: 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ary in order to 
e990: 64 65 63 6c 61 72 65 20 61 20 76 69 72 74 75 61  declare a virtua
e9a0: 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f  l table..    ///
e9b0: 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20   in response to 
e9c0: 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20  a call into the 
e9d0: 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
e9e0: 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
e9f0: 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20  Create" />..    
ea00: 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72 65 66  /// or <see cref
ea10: 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
ea20: 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20  odule.xConnect" 
ea30: 2f 3e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  /> virtual table
ea40: 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f   methods...    /
ea50: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
ea60: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
ea70: 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20  me="module">..  
ea80: 20 20 2f 2f 2f 20 54 68 65 20 76 69 72 74 75 61    /// The virtua
ea90: 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74  l table module t
eaa0: 68 61 74 20 69 73 20 74 6f 20 62 65 20 72 65 73  hat is to be res
eab0: 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74 68 65  ponsible for the
eac0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
ead0: 20 20 20 20 2f 2f 2f 20 62 65 69 6e 67 20 64 65      /// being de
eae0: 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  clared...    ///
eaf0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
eb00: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
eb10: 73 74 72 53 71 6c 22 3e 0d 0a 20 20 20 20 2f 2f  strSql">..    //
eb20: 2f 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6e  / The string con
eb30: 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20  taining the SQL 
eb40: 73 74 61 74 65 6d 65 6e 74 20 64 65 73 63 72 69  statement descri
eb50: 62 69 6e 67 20 74 68 65 20 76 69 72 74 75 61 6c  bing the virtual
eb60: 20 74 61 62 6c 65 20 74 6f 0d 0a 20 20 20 20 2f   table to..    /
eb70: 2f 2f 20 62 65 20 64 65 63 6c 61 72 65 64 2e 0d  // be declared..
eb80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
eb90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
eba0: 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d  m name="error">.
ebb0: 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75  .    /// Upon su
ebc0: 63 63 65 73 73 2c 20 74 68 65 20 63 6f 6e 74 65  ccess, the conte
ebd0: 6e 74 73 20 6f 66 20 74 68 69 73 20 70 61 72 61  nts of this para
ebe0: 6d 65 74 65 72 20 61 72 65 20 75 6e 64 65 66 69  meter are undefi
ebf0: 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75  ned.  Upon failu
ec00: 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20  re,..    /// it 
ec10: 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61  should contain a
ec20: 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 65 72  n appropriate er
ec30: 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20  ror message...  
ec40: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
ec50: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
ec60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61  >..    /// A sta
ec70: 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
ec80: 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f  urn code...    /
ec90: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
eca0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
ecb0: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
ecc0: 43 6f 64 65 20 44 65 63 6c 61 72 65 56 69 72 74  Code DeclareVirt
ecd0: 75 61 6c 54 61 62 6c 65 28 0d 0a 20 20 20 20 20  ualTable(..     
ece0: 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20     SQLiteModule 
ecf0: 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20  module,..       
ed00: 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 0d   string strSql,.
ed10: 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72  .        ref str
ed20: 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
ed30: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
ed40: 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d       if (_sql ==
ed50: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
ed60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  {..            e
ed70: 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69  rror = "connecti
ed80: 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  on has an invali
ed90: 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20  d handle";..    
eda0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
edb0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
edc0: 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rror;..        }
edd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
ede0: 74 72 20 70 53 71 6c 20 3d 20 49 6e 74 50 74 72  tr pSql = IntPtr
edf0: 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Zero;....      
ee00: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
ee10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 53  ..            pS
ee20: 71 6c 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e  ql = SQLiteStrin
ee30: 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d  g.Utf8IntPtrFrom
ee40: 53 74 72 69 6e 67 28 73 74 72 53 71 6c 29 3b 0d  String(strSql);.
ee50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
ee60: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
ee70: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
ee80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64  ethods.sqlite3_d
ee90: 65 63 6c 61 72 65 5f 76 74 61 62 28 0d 0a 20 20  eclare_vtab(..  
eea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
eeb0: 71 6c 2c 20 70 53 71 6c 29 3b 0d 0a 0d 0a 20 20  ql, pSql);....  
eec0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e            if ((n
eed0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
eee0: 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6d 6f 64 75  ode.Ok) && (modu
eef0: 6c 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  le != null))..  
ef00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
ef10: 64 75 6c 65 2e 44 65 63 6c 61 72 65 64 20 3d 20  dule.Declared = 
ef20: 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
ef30: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
ef40: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
ef50: 29 20 65 72 72 6f 72 20 3d 20 47 65 74 4c 61 73  ) error = GetLas
ef60: 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20  tError();....   
ef70: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ef80: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n;..        }.. 
ef90: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
efa0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
efb0: 20 20 20 20 20 20 20 69 66 20 28 70 53 71 6c 20         if (pSql 
efc0: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
efd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
efe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eff0: 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
f000: 65 28 70 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20  e(pSql);..      
f010: 20 20 20 20 20 20 20 20 20 20 70 53 71 6c 20 3d            pSql =
f020: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
f030: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
f040: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
f050: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
f060: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c  ry>..    /// Cal
f070: 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51  ls the native SQ
f080: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
f090: 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 64 65  y in order to de
f0a0: 63 6c 61 72 65 20 61 20 76 69 72 74 75 61 6c 20  clare a virtual 
f0b0: 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66  table..    /// f
f0c0: 75 6e 63 74 69 6f 6e 20 69 6e 20 72 65 73 70 6f  unction in respo
f0d0: 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e  nse to a call in
f0e0: 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  to the <see cref
f0f0: 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
f100: 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f  odule.xCreate" /
f110: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73  >..    /// or <s
f120: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
f130: 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
f140: 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72 74 75 61  nnect" /> virtua
f150: 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e  l table methods.
f160: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
f170: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
f180: 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c  aram name="modul
f190: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
f1a0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d   virtual table m
f1b0: 6f 64 75 6c 65 20 74 68 61 74 20 69 73 20 74 6f  odule that is to
f1c0: 20 62 65 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   be responsible 
f1d0: 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  for the virtual 
f1e0: 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66  table..    /// f
f1f0: 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65  unction being de
f200: 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  clared...    ///
f210: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
f220: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
f230: 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d  argumentCount">.
f240: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d  .    /// The num
f250: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
f260: 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   to the function
f270: 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e   being declared.
f280: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
f290: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
f2a0: 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d  am name="name">.
f2b0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d  .    /// The nam
f2c0: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
f2d0: 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64  n being declared
f2e0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
f2f0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
f300: 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22  ram name="error"
f310: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20  >..    /// Upon 
f320: 73 75 63 63 65 73 73 2c 20 74 68 65 20 63 6f 6e  success, the con
f330: 74 65 6e 74 73 20 6f 66 20 74 68 69 73 20 70 61  tents of this pa
f340: 72 61 6d 65 74 65 72 20 61 72 65 20 75 6e 64 65  rameter are unde
f350: 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61 69  fined.  Upon fai
f360: 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69  lure,..    /// i
f370: 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e  t should contain
f380: 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20   an appropriate 
f390: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a  error message...
f3a0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
f3b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
f3c0: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73  ns>..    /// A s
f3d0: 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
f3e0: 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
f3f0: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
f400: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
f410: 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
f420: 6f 72 43 6f 64 65 20 44 65 63 6c 61 72 65 56 69  orCode DeclareVi
f430: 72 74 75 61 6c 46 75 6e 63 74 69 6f 6e 28 0d 0a  rtualFunction(..
f440: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f          SQLiteMo
f450: 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20  dule module,..  
f460: 20 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d 65        int argume
f470: 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20  ntCount,..      
f480: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
f490: 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
f4a0: 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
f4b0: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
f4c0: 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20      if (_sql == 
f4d0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
f4e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 72  ..            er
f4f0: 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f  ror = "connectio
f500: 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  n has an invalid
f510: 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20   handle";..     
f520: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
f530: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
f540: 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ror;..        }.
f550: 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
f560: 72 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72  r pName = IntPtr
f570: 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Zero;....      
f580: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
f590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 4e  ..            pN
f5a0: 61 6d 65 20 3d 20 53 51 4c 69 74 65 53 74 72 69  ame = SQLiteStri
f5b0: 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f  ng.Utf8IntPtrFro
f5c0: 6d 53 74 72 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a  mString(name);..
f5d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
f5e0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
f5f0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
f600: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 76  thods.sqlite3_ov
f610: 65 72 6c 6f 61 64 5f 66 75 6e 63 74 69 6f 6e 28  erload_function(
f620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f630: 20 20 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c 20 61    _sql, pName, a
f640: 72 67 75 6d 65 6e 74 43 6f 75 6e 74 29 3b 0d 0a  rgumentCount);..
f650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
f660: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
f670: 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72  orCode.Ok) error
f680: 20 3d 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28   = GetLastError(
f690: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f6a0: 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20    return n;..   
f6b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
f6c0: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
f6d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f6e0: 69 66 20 28 70 4e 61 6d 65 20 21 3d 20 49 6e 74  if (pName != Int
f6f0: 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
f700: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f710: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
f720: 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 4e 61 6d  Memory.Free(pNam
f730: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
f740: 20 20 20 20 20 70 4e 61 6d 65 20 3d 20 49 6e 74       pName = Int
f750: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
f760: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
f770: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64    }..    }..#end
f780: 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  if....    /// <s
f790: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
f7a0: 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61   Enables or disa
f7b0: 62 6c 65 64 20 65 78 74 65 6e 73 69 6f 6e 20 6c  bled extension l
f7c0: 6f 61 64 69 6e 67 20 62 79 20 53 51 4c 69 74 65  oading by SQLite
f7d0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
f7e0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
f7f0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f  param name="bOnO
f800: 66 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72  ff">..    /// Tr
f810: 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61  ue to enable loa
f820: 64 69 6e 67 20 6f 66 20 65 78 74 65 6e 73 69 6f  ding of extensio
f830: 6e 73 2c 20 66 61 6c 73 65 20 74 6f 20 64 69 73  ns, false to dis
f840: 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  able...    /// <
f850: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
f860: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
f870: 6f 69 64 20 53 65 74 4c 6f 61 64 45 78 74 65 6e  oid SetLoadExten
f880: 73 69 6f 6e 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66  sion(bool bOnOff
f890: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
f8a0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
f8b0: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
f8c0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
f8d0: 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78  3_enable_load_ex
f8e0: 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  tension(..      
f8f0: 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e        _sql, (bOn
f900: 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d  Off ? -1 : 0));.
f910: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
f920: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
f930: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
f940: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
f950: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
f960: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
f970: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
f980: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73  >..    /// Loads
f990: 20 61 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73   a SQLite extens
f9a0: 69 6f 6e 20 6c 69 62 72 61 72 79 20 66 72 6f 6d  ion library from
f9b0: 20 74 68 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e   the named file.
f9c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
f9d0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
f9e0: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e  aram name="fileN
f9f0: 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ame">..    /// T
fa00: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
fa10: 79 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72  ynamic link libr
fa20: 61 72 79 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  ary file contain
fa30: 69 6e 67 20 74 68 65 20 65 78 74 65 6e 73 69 6f  ing the extensio
fa40: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  n...    /// </pa
fa50: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
fa60: 61 72 61 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e  aram name="procN
fa70: 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ame">..    /// T
fa80: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 65  he name of the e
fa90: 78 70 6f 72 74 65 64 20 66 75 6e 63 74 69 6f 6e  xported function
faa0: 20 75 73 65 64 20 74 6f 20 69 6e 69 74 69 61 6c   used to initial
fab0: 69 7a 65 20 74 68 65 20 65 78 74 65 6e 73 69 6f  ize the extensio
fac0: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e  n...    /// If n
fad0: 75 6c 6c 2c 20 74 68 65 20 64 65 66 61 75 6c 74  ull, the default
fae0: 20 22 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73   "sqlite3_extens
faf0: 69 6f 6e 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62  ion_init" will b
fb00: 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  e used...    ///
fb10: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
fb20: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
fb30: 20 76 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e 73   void LoadExtens
fb40: 69 6f 6e 28 73 74 72 69 6e 67 20 66 69 6c 65 4e  ion(string fileN
fb50: 61 6d 65 2c 20 73 74 72 69 6e 67 20 70 72 6f 63  ame, string proc
fb60: 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Name)..    {..  
fb70: 20 20 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61        if (fileNa
fb80: 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
fb90: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
fba0: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
fbb0: 78 63 65 70 74 69 6f 6e 28 22 66 69 6c 65 4e 61  xception("fileNa
fbc0: 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me");....       
fbd0: 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 20 3d   IntPtr pError =
fbe0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
fbf0: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
fc00: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
fc10: 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38       byte[] utf8
fc20: 46 69 6c 65 4e 61 6d 65 20 3d 20 55 54 46 38 45  FileName = UTF8E
fc30: 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74  ncoding.UTF8.Get
fc40: 42 79 74 65 73 28 66 69 6c 65 4e 61 6d 65 20 2b  Bytes(fileName +
fc50: 20 27 5c 30 27 29 3b 0d 0a 20 20 20 20 20 20 20   '\0');..       
fc60: 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38       byte[] utf8
fc70: 50 72 6f 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b  ProcName = null;
fc80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fc90: 69 66 20 28 70 72 6f 63 4e 61 6d 65 20 21 3d 20  if (procName != 
fca0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
fcb0: 20 20 20 20 20 20 20 75 74 66 38 50 72 6f 63 4e         utf8ProcN
fcc0: 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69  ame = UTF8Encodi
fcd0: 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73  ng.UTF8.GetBytes
fce0: 28 70 72 6f 63 4e 61 6d 65 20 2b 20 27 5c 30 27  (procName + '\0'
fcf0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
fd00: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
fd10: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
fd20: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
fd30: 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  3_load_extension
fd40: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
fd50: 20 20 20 5f 73 71 6c 2c 20 75 74 66 38 46 69 6c     _sql, utf8Fil
fd60: 65 4e 61 6d 65 2c 20 75 74 66 38 50 72 6f 63 4e  eName, utf8ProcN
fd70: 61 6d 65 2c 20 72 65 66 20 70 45 72 72 6f 72 29  ame, ref pError)
fd80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
fd90: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
fda0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
fdc0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
fdd0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 55 54 46 38  xception(n, UTF8
fde0: 54 6f 53 74 72 69 6e 67 28 70 45 72 72 6f 72 2c  ToString(pError,
fdf0: 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20   -1));..        
fe00: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
fe10: 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ly..        {.. 
fe20: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
fe30: 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e  Error != IntPtr.
fe40: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
fe50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
fe60: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
fe70: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
fe80: 33 5f 66 72 65 65 28 70 45 72 72 6f 72 29 3b 0d  3_free(pError);.
fe90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fea0: 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72   pError = IntPtr
feb0: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
fec0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
fed0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
fee0: 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69  // Enables or di
fef0: 73 61 62 6c 65 64 20 65 78 74 65 6e 64 65 64 20  sabled extended 
ff00: 72 65 73 75 6c 74 20 63 6f 64 65 73 20 72 65 74  result codes ret
ff10: 75 72 6e 65 64 20 62 79 20 53 51 4c 69 74 65 0d  urned by SQLite.
ff20: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
ff30: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 45  erride void SetE
ff40: 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64  xtendedResultCod
ff50: 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d  es(bool bOnOff).
ff60: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
ff70: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
ff80: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
ff90: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78  thods.sqlite3_ex
ffa0: 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f  tended_result_co
ffb0: 64 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  des(..          
ffc0: 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20  _sql, (bOnOff ? 
ffd0: 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20  -1 : 0));....   
ffe0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
fff0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
10000 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
10010 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
10020 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
10030 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65     }..    /// Ge
10040 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69  ts the last SQLi
10050 74 65 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20  te error code.. 
10060 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
10070 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
10080 43 6f 64 65 20 52 65 73 75 6c 74 43 6f 64 65 28  Code ResultCode(
10090 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
100a0 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
100b0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
100c0 65 33 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29  e3_errcode(_sql)
100d0 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f  ;..    }..    //
100e0 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20  / Gets the last 
100f0 53 51 4c 69 74 65 20 65 78 74 65 6e 64 65 64 20  SQLite extended 
10100 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20  error code..    
10110 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
10120 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
10130 65 20 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74  e ExtendedResult
10140 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Code()..    {.. 
10150 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
10160 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10170 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64  sqlite3_extended
10180 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d  _errcode(_sql);.
10190 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
101a0 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73  / Add a log mess
101b0 61 67 65 20 76 69 61 20 74 68 65 20 53 51 4c 69  age via the SQLi
101c0 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69  te sqlite3_log i
101d0 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69  nterface...    i
101e0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
101f0 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67 65   void LogMessage
10200 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  (SQLiteErrorCode
10210 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e   iErrCode, strin
10220 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20  g zMessage)..   
10230 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
10240 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10250 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f  lite3_log(iErrCo
10260 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65 73 73  de, ToUTF8(zMess
10270 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  age));..    }...
10280 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44  .#if INTEROP_COD
10290 45 43 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  EC..    internal
102a0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
102b0 65 74 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b  etPassword(byte[
102c0 5d 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 29  ] passwordBytes)
102d0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
102e0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
102f0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
10300 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6b  ethods.sqlite3_k
10310 65 79 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f 72  ey(_sql, passwor
10320 64 42 79 74 65 73 2c 20 70 61 73 73 77 6f 72 64  dBytes, password
10330 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a  Bytes.Length);..
10340 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
10350 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
10360 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
10370 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
10380 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
10390 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
103a0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
103b0 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73 73   void ChangePass
103c0 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77 50  word(byte[] newP
103d0 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20  asswordBytes).. 
103e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
103f0 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
10400 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10410 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 6b 65  ods.sqlite3_reke
10420 79 28 5f 73 71 6c 2c 20 6e 65 77 50 61 73 73 77  y(_sql, newPassw
10430 6f 72 64 42 79 74 65 73 2c 20 28 6e 65 77 50 61  ordBytes, (newPa
10440 73 73 77 6f 72 64 42 79 74 65 73 20 3d 3d 20 6e  sswordBytes == n
10450 75 6c 6c 29 20 3f 20 30 20 3a 20 6e 65 77 50 61  ull) ? 0 : newPa
10460 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67  sswordBytes.Leng
10470 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  th);..      if (
10480 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
10490 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
104a0 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
104b0 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
104c0 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23  or());..    }..#
104d0 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74  endif....    int
104e0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
104f0 6f 69 64 20 53 65 74 55 70 64 61 74 65 48 6f 6f  oid SetUpdateHoo
10500 6b 28 53 51 4c 69 74 65 55 70 64 61 74 65 43 61  k(SQLiteUpdateCa
10510 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
10520 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
10530 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
10540 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f  qlite3_update_ho
10550 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49  ok(_sql, func, I
10560 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
10570 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
10580 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
10590 64 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28  d SetCommitHook(
105a0 53 51 4c 69 74 65 43 6f 6d 6d 69 74 43 61 6c 6c  SQLiteCommitCall
105b0 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
105c0 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
105d0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
105e0 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b  ite3_commit_hook
105f0 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
10600 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
10610 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
10620 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
10630 53 65 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b  SetTraceCallback
10640 28 53 51 4c 69 74 65 54 72 61 63 65 43 61 6c 6c  (SQLiteTraceCall
10650 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
10660 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
10670 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10680 69 74 65 33 5f 74 72 61 63 65 28 5f 73 71 6c 2c  ite3_trace(_sql,
10690 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
106a0 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
106b0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
106c0 72 69 64 65 20 76 6f 69 64 20 53 65 74 52 6f 6c  ride void SetRol
106d0 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65  lbackHook(SQLite
106e0 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
106f0 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
10700 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
10710 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10720 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f  _rollback_hook(_
10730 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
10740 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
10750 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
10760 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c  ary>..    /// Al
10770 6c 6f 77 73 20 74 68 65 20 73 65 74 74 69 6e 67  lows the setting
10780 20 6f 66 20 61 20 6c 6f 67 67 69 6e 67 20 63 61   of a logging ca
10790 6c 6c 62 61 63 6b 20 69 6e 76 6f 6b 65 64 20 62  llback invoked b
107a0 79 20 53 51 4c 69 74 65 20 77 68 65 6e 20 61 0d  y SQLite when a.
107b0 0a 20 20 20 20 2f 2f 2f 20 6c 6f 67 20 65 76 65  .    /// log eve
107c0 6e 74 20 6f 63 63 75 72 73 2e 20 20 4f 6e 6c 79  nt occurs.  Only
107d0 20 6f 6e 65 20 63 61 6c 6c 62 61 63 6b 20 6d 61   one callback ma
107e0 79 20 62 65 20 73 65 74 2e 20 20 49 66 20 4e 55  y be set.  If NU
107f0 4c 4c 20 69 73 20 70 61 73 73 65 64 2c 0d 0a 20  LL is passed,.. 
10800 20 20 20 2f 2f 2f 20 74 68 65 20 6c 6f 67 67 69     /// the loggi
10810 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 75  ng callback is u
10820 6e 72 65 67 69 73 74 65 72 65 64 2e 0d 0a 20 20  nregistered...  
10830 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
10840 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
10850 20 6e 61 6d 65 3d 22 66 75 6e 63 22 3e 54 68 65   name="func">The
10860 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69   callback functi
10870 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70  on to invoke.</p
10880 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
10890 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20  returns>Returns 
108a0 61 20 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72  a result code</r
108b0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
108c0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
108d0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
108e0 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 53 51  etLogCallback(SQ
108f0 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 20  LiteLogCallback 
10900 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
10910 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
10920 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
10930 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
10940 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f  qlite3_config_lo
10950 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g(..            
10960 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
10970 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
10980 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20 49 6e 74  G_LOG, func, Int
10990 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20  Ptr.Zero);....  
109a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b        return rc;
109b0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
109c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
10a20 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
10a30 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65  ry>..    /// Cre
10a40 61 74 65 73 20 61 20 6e 65 77 20 53 51 4c 69 74  ates a new SQLit
10a50 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
10a60 62 61 73 65 64 20 6f 6e 20 74 68 65 20 70 72 6f  based on the pro
10a70 76 69 64 65 64 20 64 65 73 74 69 6e 61 74 69 6f  vided destinatio
10a80 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62  n..    /// datab
10a90 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
10aa0 20 54 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   The source data
10ab0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
10ac0 69 73 20 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20  is the one..    
10ad0 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77  /// associated w
10ae0 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74 2e  ith this object.
10af0 20 20 54 68 65 20 73 6f 75 72 63 65 20 61 6e 64    The source and
10b00 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
10b10 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63  abase..    /// c
10b20 6f 6e 6e 65 63 74 69 6f 6e 73 20 63 61 6e 6e 6f  onnections canno
10b30 74 20 62 65 20 74 68 65 20 73 61 6d 65 2e 0d 0a  t be the same...
10b40 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
10b50 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
10b60 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 43 6e 6e  am name="destCnn
10b70 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f  ">The destinatio
10b80 6e 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  n database conne
10b90 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  ction.</param>..
10ba0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
10bb0 61 6d 65 3d 22 64 65 73 74 4e 61 6d 65 22 3e 54  ame="destName">T
10bc0 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  he destination d
10bd0 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70  atabase name.</p
10be0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
10bf0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72  param name="sour
10c00 63 65 4e 61 6d 65 22 3e 54 68 65 20 73 6f 75 72  ceName">The sour
10c10 63 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  ce database name
10c20 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
10c30 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
10c40 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20 62 61  newly created ba
10c50 63 6b 75 70 20 6f 62 6a 65 63 74 2e 3c 2f 72 65  ckup object.</re
10c60 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
10c70 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
10c80 4c 69 74 65 42 61 63 6b 75 70 20 49 6e 69 74 69  LiteBackup Initi
10c90 61 6c 69 7a 65 42 61 63 6b 75 70 28 0d 0a 20 20  alizeBackup(..  
10ca0 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
10cb0 65 63 74 69 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d  ection destCnn,.
10cc0 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
10cd0 64 65 73 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  destName,..     
10ce0 20 20 20 73 74 72 69 6e 67 20 73 6f 75 72 63 65     string source
10cf0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 29 0d  Name..        ).
10d00 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
10d10 69 66 20 28 64 65 73 74 43 6e 6e 20 3d 3d 20 6e  if (destCnn == n
10d20 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
10d30 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
10d40 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
10d50 6e 28 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d  n("destCnn");...
10d60 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73  .        if (des
10d70 74 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  tName == null)..
10d80 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
10d90 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
10da0 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73  llException("des
10db0 74 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  tName");....    
10dc0 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 4e 61      if (sourceNa
10dd0 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
10de0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
10df0 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
10e00 78 63 65 70 74 69 6f 6e 28 22 73 6f 75 72 63 65  xception("source
10e10 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name");....     
10e20 20 20 20 53 51 4c 69 74 65 33 20 64 65 73 74 53     SQLite3 destS
10e30 71 6c 69 74 65 33 20 3d 20 64 65 73 74 43 6e 6e  qlite3 = destCnn
10e40 2e 5f 73 71 6c 20 61 73 20 53 51 4c 69 74 65 33  ._sql as SQLite3
10e50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
10e60 28 64 65 73 74 53 71 6c 69 74 65 33 20 3d 3d 20  (destSqlite3 == 
10e70 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
10e80 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
10e90 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d  umentException(.
10ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10eb0 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f   "Destination co
10ec0 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 6e 6f 20  nnection has no 
10ed0 77 72 61 70 70 65 72 2e 22 2c 0d 0a 20 20 20 20  wrapper.",..    
10ee0 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65 73              "des
10ef0 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tCnn");....     
10f00 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
10f10 69 6f 6e 48 61 6e 64 6c 65 20 64 65 73 74 48 61  ionHandle destHa
10f20 6e 64 6c 65 20 3d 20 64 65 73 74 53 71 6c 69 74  ndle = destSqlit
10f30 65 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20  e3._sql;....    
10f40 20 20 20 20 69 66 20 28 64 65 73 74 48 61 6e 64      if (destHand
10f50 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
10f60 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
10f70 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70  ew ArgumentExcep
10f80 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
10f90 20 20 20 20 20 20 20 22 44 65 73 74 69 6e 61 74         "Destinat
10fa0 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ion connection h
10fb0 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
10fc0 6e 64 6c 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20  ndle.",..       
10fd0 20 20 20 20 20 20 20 20 20 22 64 65 73 74 43 6e           "destCn
10fe0 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n");....        
10ff0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
11000 48 61 6e 64 6c 65 20 73 6f 75 72 63 65 48 61 6e  Handle sourceHan
11010 64 6c 65 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20  dle = _sql;.... 
11020 20 20 20 20 20 20 20 69 66 20 28 73 6f 75 72 63         if (sourc
11030 65 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29  eHandle == null)
11040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
11050 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
11060 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
11070 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
11080 20 20 20 20 22 53 6f 75 72 63 65 20 63 6f 6e 6e      "Source conn
11090 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e  ection has an in
110a0 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b  valid handle.");
110b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65  ....        byte
110c0 5b 5d 20 7a 44 65 73 74 4e 61 6d 65 20 3d 20 54  [] zDestName = T
110d0 6f 55 54 46 38 28 64 65 73 74 4e 61 6d 65 29 3b  oUTF8(destName);
110e0 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d  ..        byte[]
110f0 20 7a 53 6f 75 72 63 65 4e 61 6d 65 20 3d 20 54   zSourceName = T
11100 6f 55 54 46 38 28 73 6f 75 72 63 65 4e 61 6d 65  oUTF8(sourceName
11110 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
11120 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
11130 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20   backupHandle = 
11140 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
11150 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
11160 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
11170 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
11180 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11190 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a  finally /* NOTE:
111a0 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20   Thread.Abort() 
111b0 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a  protection. */..
111c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
111d0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 62 61         IntPtr ba
111e0 63 6b 75 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  ckup = UnsafeNat
111f0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
11200 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74 28 0d  e3_backup_init(.
11210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11220 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65   destHandle, zDe
11230 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61  stName, sourceHa
11240 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65 4e 61 6d  ndle, zSourceNam
11250 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
11260 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
11270 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
11280 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
112a0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 65  LiteErrorCode re
112b0 73 75 6c 74 43 6f 64 65 20 3d 20 52 65 73 75 6c  sultCode = Resul
112c0 74 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  tCode();....    
112d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
112e0 72 65 73 75 6c 74 43 6f 64 65 20 21 3d 20 53 51  resultCode != SQ
112f0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
11300 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11310 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
11320 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
11330 28 72 65 73 75 6c 74 43 6f 64 65 2c 20 47 65 74  (resultCode, Get
11340 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
11350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
11360 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
11370 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
11380 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
11390 6f 6e 28 22 66 61 69 6c 65 64 20 74 6f 20 69 6e  on("failed to in
113a0 69 74 69 61 6c 69 7a 65 20 62 61 63 6b 75 70 22  itialize backup"
113b0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
113c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
113d0 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20   backupHandle = 
113e0 6e 65 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70  new SQLiteBackup
113f0 48 61 6e 64 6c 65 28 64 65 73 74 48 61 6e 64 6c  Handle(destHandl
11400 65 2c 20 62 61 63 6b 75 70 29 3b 0d 0a 20 20 20  e, backup);..   
11410 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
11420 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c    return new SQL
11430 69 74 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  iteBackup(..    
11440 20 20 20 20 20 20 20 20 74 68 69 73 2c 20 62 61          this, ba
11450 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64 65 73 74  ckupHandle, dest
11460 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d  Handle, zDestNam
11470 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c  e, sourceHandle,
11480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 53  ..            zS
11490 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 20 20 20  ourceName);..   
114a0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
114b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
114c0 20 43 6f 70 69 65 73 20 75 70 20 74 6f 20 4e 20   Copies up to N 
114d0 70 61 67 65 73 20 66 72 6f 6d 20 74 68 65 20 73  pages from the s
114e0 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20 74  ource database t
114f0 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f  o the destinatio
11500 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62  n..    /// datab
11510 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  ase associated w
11520 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65  ith the specifie
11530 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e  d backup object.
11540 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
11550 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
11560 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75  aram name="backu
11570 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62  p">The backup ob
11580 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61  ject to use.</pa
11590 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
115a0 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65  aram name="nPage
115b0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
115c0 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
115d0 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61 74 69 76  to copy, negativ
115e0 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20 72 65  e to copy all re
115f0 6d 61 69 6e 69 6e 67 20 70 61 67 65 73 2e 0d 0a  maining pages...
11600 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
11610 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
11620 20 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e 0d 0a   name="retry">..
11630 20 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f 20 74      /// Set to t
11640 72 75 65 20 69 66 20 74 68 65 20 6f 70 65 72 61  rue if the opera
11650 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65  tion needs to be
11660 20 72 65 74 72 69 65 64 20 64 75 65 20 74 6f 20   retried due to 
11670 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f  database..    //
11680 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75 65 73  / locking issues
11690 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 73 65 74  ; otherwise, set
116a0 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20   to false...    
116b0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
116c0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
116d0 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66  .    /// True if
116e0 20 74 68 65 72 65 20 61 72 65 20 6d 6f 72 65 20   there are more 
116f0 70 61 67 65 73 20 74 6f 20 62 65 20 63 6f 70 69  pages to be copi
11700 65 64 2c 20 66 61 6c 73 65 20 6f 74 68 65 72 77  ed, false otherw
11710 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ise...    /// </
11720 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
11730 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
11740 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75 70 28  bool StepBackup(
11750 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
11760 42 61 63 6b 75 70 20 62 61 63 6b 75 70 2c 0d 0a  Backup backup,..
11770 20 20 20 20 20 20 20 20 69 6e 74 20 6e 50 61 67          int nPag
11780 65 2c 0d 0a 20 20 20 20 20 20 20 20 6f 75 74 20  e,..        out 
11790 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20 20 20 20  bool retry..    
117a0 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
117b0 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 66 61        retry = fa
117c0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
117d0 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75  if (backup == nu
117e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
117f0 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
11800 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
11810 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20  ("backup");.... 
11820 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
11830 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  kupHandle handle
11840 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74   = backup._sqlit
11850 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20  e_backup;....   
11860 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20       if (handle 
11870 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
11880 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
11890 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
118a0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
118b0 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
118c0 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
118d0 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
118e0 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
118f0 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72  IntPtr handlePtr
11900 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
11910 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
11920 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  Ptr == IntPtr.Ze
11930 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
11940 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
11950 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
11960 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
11970 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
11980 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
11990 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e  alid handle poin
119a0 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ter.");....     
119b0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
119c0 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
119d0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
119e0 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28 68  e3_backup_step(h
119f0 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61 67 65 29  andlePtr, nPage)
11a00 3b 0d 0a 20 20 20 20 20 20 20 20 62 61 63 6b 75  ;..        backu
11a10 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 20 3d 20  p._stepResult = 
11a20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 76 65  n; /* NOTE: Save
11a30 20 66 6f 72 20 75 73 65 20 62 79 20 46 69 6e 69   for use by Fini
11a40 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a  shBackup. */....
11a50 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d          if (n ==
11a60 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
11a70 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  .Ok)..        {.
11a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
11a90 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
11aa0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
11ab0 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69  se if (n == SQLi
11ac0 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79  teErrorCode.Busy
11ad0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
11ae0 20 20 20 20 20 20 20 20 20 20 72 65 74 72 79 20            retry 
11af0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
11b00 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
11b10 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
11b20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
11b30 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
11b40 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20 20  ode.Locked)..   
11b50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11b60 20 20 20 20 72 65 74 72 79 20 3d 20 74 72 75 65      retry = true
11b70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
11b80 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
11b90 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11ba0 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
11bb0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f  LiteErrorCode.Do
11bc0 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ne)..        {..
11bd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
11be0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
11bf0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
11c00 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  se..        {.. 
11c10 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
11c20 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
11c30 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
11c40 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
11c50 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
11c60 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
11c70 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
11c80 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
11c90 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74  ages remaining t
11ca0 6f 20 62 65 20 63 6f 70 69 65 64 20 66 72 6f 6d  o be copied from
11cb0 20 74 68 65 20 73 6f 75 72 63 65 0d 0a 20 20 20   the source..   
11cc0 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 74 6f   /// database to
11cd0 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e   the destination
11ce0 20 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69   database associ
11cf0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70  ated with the sp
11d00 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f  ecified..    ///
11d10 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d   backup object..
11d20 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
11d30 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
11d40 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
11d50 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
11d60 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70  ect to check.</p
11d70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
11d80 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62  returns>The numb
11d90 65 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61  er of pages rema
11da0 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69  ining to be copi
11db0 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ed.</returns>.. 
11dc0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
11dd0 72 69 64 65 20 69 6e 74 20 52 65 6d 61 69 6e 69  ride int Remaini
11de0 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  ngBackup(..     
11df0 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20     SQLiteBackup 
11e00 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20  backup..        
11e10 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
11e20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
11e30 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
11e40 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
11e50 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
11e60 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
11e70 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
11e80 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
11e90 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
11ea0 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
11eb0 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
11ec0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
11ed0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
11ee0 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
11ef0 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
11f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
11f10 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
11f20 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
11f30 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
11f40 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50    IntPtr handleP
11f50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
11f60 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
11f70 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e  lePtr == IntPtr.
11f80 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
11f90 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
11fa0 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
11fb0 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
11fc0 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
11fd0 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
11fe0 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f  nvalid handle po
11ff0 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20  inter.");....   
12000 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
12010 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12020 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 72  sqlite3_backup_r
12030 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64 6c 65 50  emaining(handleP
12040 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
12050 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
12060 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
12070 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
12080 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
12090 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
120a0 73 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  se associated.. 
120b0 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 65 20     /// with the 
120c0 73 70 65 63 69 66 69 65 64 20 62 61 63 6b 75 70  specified backup
120d0 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f   object...    //
120e0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
120f0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
12100 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62  e="backup">The b
12110 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20  ackup object to 
12120 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  check.</param>..
12130 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
12140 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65  >The total numbe
12150 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
12160 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
12170 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  e.</returns>..  
12180 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
12190 69 64 65 20 69 6e 74 20 50 61 67 65 43 6f 75 6e  ide int PageCoun
121a0 74 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  tBackup(..      
121b0 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62    SQLiteBackup b
121c0 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29  ackup..        )
121d0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
121e0 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e   if (backup == n
121f0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
12200 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
12210 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
12220 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a  n("backup");....
12230 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
12240 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c  ckupHandle handl
12250 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69  e = backup._sqli
12260 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20  te_backup;....  
12270 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
12280 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
12290 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
122a0 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
122b0 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
122c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
122d0 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
122e0 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
122f0 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
12300 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74   IntPtr handlePt
12310 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
12320 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
12330 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  ePtr == IntPtr.Z
12340 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
12350 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
12360 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
12370 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
12380 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
12390 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
123a0 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69  valid handle poi
123b0 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  nter.");....    
123c0 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
123d0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
123e0 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 70 61  qlite3_backup_pa
123f0 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c 65 50 74  gecount(handlePt
12400 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  r);..    }....  
12410 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
12420 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74 72 6f 79  .    /// Destroy
12430 73 20 74 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  s the backup obj
12440 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62 61 63  ect, rolling bac
12450 6b 20 61 6e 79 20 62 61 63 6b 75 70 20 74 68 61  k any backup tha
12460 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20 20 20  t may be in..   
12470 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d 0a 20   /// progess... 
12480 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
12490 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
124a0 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
124b0 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
124c0 74 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c 2f 70  t to destroy.</p
124d0 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
124e0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
124f0 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70 28 0d  d FinishBackup(.
12500 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
12510 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20  ackup backup..  
12520 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
12530 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b          if (back
12540 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  up == null)..   
12550 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
12560 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
12570 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70  xception("backup
12580 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
12590 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c  QLiteBackupHandl
125a0 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75  e handle = backu
125b0 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70  p._sqlite_backup
125c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
125d0 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (handle == null)
125e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
125f0 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
12600 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
12610 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
12620 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
12630 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
12640 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a  d handle.");....
12650 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
12660 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c  andlePtr = handl
12670 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
12680 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49   (handlePtr == I
12690 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
126a0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
126b0 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
126c0 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
126d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
126e0 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
126f0 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
12700 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d  dle pointer.");.
12710 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
12720 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
12730 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12740 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
12750 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12760 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69  _backup_finish_i
12770 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 50 74 72  nterop(handlePtr
12780 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
12790 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
127a0 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
127b0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
127c0 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68  e3_backup_finish
127d0 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65  (handlePtr);..#e
127e0 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 68 61  ndif..        ha
127f0 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65 41 73  ndle.SetHandleAs
12800 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a 23 69  Invalid();....#i
12810 66 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 0d 0a  f COUNT_HANDLE..
12820 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d          if ((n =
12830 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
12840 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d 3d 20 62  e.Ok) || (n == b
12850 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c  ackup._stepResul
12860 74 29 29 20 68 61 6e 64 6c 65 2e 57 61 73 52 65  t)) handle.WasRe
12870 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a 23 65 6e  leasedOk();..#en
12880 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  dif....        i
12890 66 20 28 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  f ((n != SQLiteE
128a0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20  rrorCode.Ok) && 
128b0 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e 5f 73 74  (n != backup._st
128c0 65 70 52 65 73 75 6c 74 29 29 0d 0a 20 20 20 20  epResult))..    
128d0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
128e0 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
128f0 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
12900 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
12910 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
12920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12970 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
12980 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
12990 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20  / Determines if 
129a0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
129b0 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e  library has been
129c0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72   initialized for
129d0 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75   the..    /// cu
129e0 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a  rrent process...
129f0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
12a00 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
12a10 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  urns>..    /// A
12a20 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74   boolean indicat
12a30 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
12a40 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ot the SQLite co
12a50 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
12a60 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69  een..    /// ini
12a70 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65  tialized for the
12a80 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
12a90 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
12aa0 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
12ab0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
12ac0 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  l IsInitialized(
12ad0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
12ae0 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 49    return StaticI
12af0 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 3b 0d  sInitialized();.
12b00 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
12b10 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
12b20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20   /// Determines 
12b30 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  if the SQLite co
12b40 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
12b50 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  een initialized 
12b60 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  for the..    ///
12b70 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
12b80 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
12b90 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
12ba0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
12bb0 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69  / A boolean indi
12bc0 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
12bd0 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65  r not the SQLite
12be0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
12bf0 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20  s been..    /// 
12c00 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
12c10 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
12c20 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
12c30 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
12c40 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f  ternal static bo
12c50 6f 6c 20 53 74 61 74 69 63 49 73 49 6e 69 74 69  ol StaticIsIniti
12c60 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d  alized()..    {.
12c70 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
12c80 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20       // BUGFIX: 
12c90 50 72 65 76 65 6e 74 20 72 61 63 65 73 20 77 69  Prevent races wi
12ca0 74 68 20 6f 74 68 65 72 20 74 68 72 65 61 64 73  th other threads
12cb0 20 66 6f 72 20 74 68 69 73 20 65 6e 74 69 72 65   for this entire
12cc0 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20 20 20   block, due..   
12cd0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
12ce0 74 6f 20 74 68 65 20 74 72 79 2f 66 69 6e 61 6c  to the try/final
12cf0 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e 20 20 53  ly semantics.  S
12d00 65 65 20 74 69 63 6b 65 74 20 5b 37 32 39 30 35  ee ticket [72905
12d10 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20 20 20  c9a77]...       
12d20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63   //..        loc
12d30 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20  k (syncRoot)..  
12d40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12d50 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
12d60 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 61       // NOTE: Sa
12d70 76 65 20 74 68 65 20 73 74 61 74 65 20 6f 66 20  ve the state of 
12d80 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c 61 73  the logging clas
12d90 73 20 61 6e 64 20 74 68 65 6e 20 72 65 73 74 6f  s and then resto
12da0 72 65 20 69 74 0d 0a 20 20 20 20 20 20 20 20 20  re it..         
12db0 20 20 20 2f 2f 20 20 20 20 20 20 20 61 66 74 65     //       afte
12dc0 72 20 77 65 20 61 72 65 20 64 6f 6e 65 20 74 6f  r we are done to
12dd0 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67 20 74   avoid logging t
12de0 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20 65 72  oo many false er
12df0 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  rors...         
12e00 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
12e10 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 45 6e 61     bool savedEna
12e20 62 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c 6f 67  bled = SQLiteLog
12e30 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20  .Enabled;..     
12e40 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
12e50 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c 73 65  .Enabled = false
12e60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12e70 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
12e80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12e90 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
12ea0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
12eb0 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20 5b 61  : This method [a
12ec0 62 5d 75 73 65 73 20 74 68 65 20 66 61 63 74 20  b]uses the fact 
12ed0 74 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c 6c  that SQLite will
12ee0 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 20   always..       
12ef0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
12f00 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
12f10 45 52 52 4f 52 20 66 6f 72 20 61 6e 79 20 75 6e  ERROR for any un
12f20 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72 61 74  known configurat
12f30 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20  ion option..    
12f40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
12f50 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20 74 68       *unless* th
12f60 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
12f70 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
12f80 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0d 0a  n initialized...
12f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fa0 2f 2f 20 20 20 20 20 20 20 49 6e 20 74 68 61 74  //       In that
12fb0 20 63 61 73 65 20 69 74 20 77 69 6c 6c 20 61 6c   case it will al
12fc0 77 61 79 73 20 72 65 74 75 72 6e 20 53 51 4c 49  ways return SQLI
12fd0 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20 20 20  TE_MISUSE...    
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
12ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13000 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
13010 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
13020 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
13030 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20  _config_none(.. 
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13050 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f     SQLiteConfigO
13060 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f  psEnum.SQLITE_CO
13070 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20  NFIG_NONE);.... 
13080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
13090 65 74 75 72 6e 20 28 72 63 20 3d 3d 20 53 51 4c  eturn (rc == SQL
130a0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4d 69 73  iteErrorCode.Mis
130b0 75 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  use);..         
130c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
130d0 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
130e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
130f0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
13100 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 73 61  Log.Enabled = sa
13110 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20  vedEnabled;..   
13120 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
13130 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
13140 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
13150 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65  >..    /// Helpe
13160 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65  r function to re
13170 74 72 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20  trieve a column 
13180 6f 66 20 64 61 74 61 20 66 72 6f 6d 20 61 6e 20  of data from an 
13190 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
131a0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
131b0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
131c0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74  param name="stmt
131d0 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  ">The statement 
131e0 62 65 69 6e 67 20 73 74 65 70 28 29 27 64 20 74  being step()'d t
131f0 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a  hrough</param>..
13200 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
13210 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68 65 20  ame="flags">The 
13220 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  flags associated
13230 20 77 69 74 68 20 74 68 65 20 63 6f 6e 6e 65 63   with the connec
13240 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  tion.</param>.. 
13250 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
13260 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68 65 20 63  me="index">The c
13270 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72  olumn index to r
13280 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d  etrieve</param>.
13290 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
132a0 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74  name="typ">The t
132b0 79 70 65 20 6f 66 20 64 61 74 61 20 63 6f 6e 74  ype of data cont
132c0 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c  ained in the col
132d0 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74 69  umn.  If Uniniti
132e0 61 6c 69 7a 65 64 2c 20 74 68 69 73 20 66 75 6e  alized, this fun
132f0 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69  ction will retri
13300 65 76 65 20 74 68 65 20 64 61 74 61 74 79 70 65  eve the datatype
13310 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70   information.</p
13320 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
13330 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20  returns>Returns 
13340 74 68 65 20 64 61 74 61 20 69 6e 20 74 68 65 20  the data in the 
13350 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e  column</returns>
13360 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
13370 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47  verride object G
13380 65 74 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74  etValue(SQLiteSt
13390 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
133a0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
133b0 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
133c0 6e 64 65 78 2c 20 53 51 4c 69 74 65 54 79 70 65  ndex, SQLiteType
133d0 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   typ)..    {..  
133e0 20 20 20 20 69 66 20 28 49 73 4e 75 6c 6c 28 73      if (IsNull(s
133f0 74 6d 74 2c 20 69 6e 64 65 78 29 29 20 72 65 74  tmt, index)) ret
13400 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65  urn DBNull.Value
13410 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66 66  ;..      TypeAff
13420 69 6e 69 74 79 20 61 66 66 20 3d 20 74 79 70 2e  inity aff = typ.
13430 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20  Affinity;..     
13440 20 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c 3b 0d   Type t = null;.
13450 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 74 79 70  ...      if (typ
13460 2e 54 79 70 65 20 21 3d 20 44 62 54 79 70 65 2e  .Type != DbType.
13470 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20 20 7b  Object)..      {
13480 0d 0a 20 20 20 20 20 20 20 20 74 20 3d 20 53 51  ..        t = SQ
13490 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69  LiteConvert.SQLi
134a0 74 65 54 79 70 65 54 6f 54 79 70 65 28 74 79 70  teTypeToType(typ
134b0 29 3b 0d 0a 20 20 20 20 20 20 20 20 61 66 66 20  );..        aff 
134c0 3d 20 54 79 70 65 54 6f 41 66 66 69 6e 69 74 79  = TypeToAffinity
134d0 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  (t);..      }...
134e0 0a 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67  .      if ((flag
134f0 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
13500 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c  tionFlags.GetAll
13510 41 73 54 65 78 74 29 20 3d 3d 20 53 51 4c 69 74  AsText) == SQLit
13520 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
13530 2e 47 65 74 41 6c 6c 41 73 54 65 78 74 29 0d 0a  .GetAllAsText)..
13540 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
13550 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69   GetText(stmt, i
13560 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
13570 73 77 69 74 63 68 20 28 61 66 66 29 0d 0a 20 20  switch (aff)..  
13580 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63      {..        c
13590 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
135a0 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20  .Blob:..        
135b0 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d    if (typ.Type =
135c0 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26  = DbType.Guid &&
135d0 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d   typ.Affinity ==
135e0 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65   TypeAffinity.Te
135f0 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt)..           
13600 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64   return new Guid
13610 28 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69  (GetText(stmt, i
13620 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndex));....     
13630 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e       int n = (in
13640 74 29 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c  t)GetBytes(stmt,
13650 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c   index, 0, null,
13660 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 20   0, 0);..       
13670 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 6e 65     byte[] b = ne
13680 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20  w byte[n];..    
13690 20 20 20 20 20 20 47 65 74 42 79 74 65 73 28 73        GetBytes(s
136a0 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62  tmt, index, 0, b
136b0 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20  , 0, n);....    
136c0 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79        if (typ.Ty
136d0 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69  pe == DbType.Gui
136e0 64 20 26 26 20 6e 20 3d 3d 20 31 36 29 0d 0a 20  d && n == 16).. 
136f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
13700 6e 20 6e 65 77 20 47 75 69 64 28 62 29 3b 0d 0a  n new Guid(b);..
13710 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
13720 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20 20 20 63  rn b;..        c
13730 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
13740 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20 20 20 20  .DateTime:..    
13750 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
13760 44 61 74 65 54 69 6d 65 28 73 74 6d 74 2c 20 69  DateTime(stmt, i
13770 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
13780 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
13790 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20  y.Double:..     
137a0 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75       if (t == nu
137b0 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74 44 6f  ll) return GetDo
137c0 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  uble(stmt, index
137d0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  );..          re
137e0 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61  turn Convert.Cha
137f0 6e 67 65 54 79 70 65 28 47 65 74 44 6f 75 62 6c  ngeType(GetDoubl
13800 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e(stmt, index), 
13810 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  t, null);..     
13820 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
13830 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20  nity.Int64:..   
13840 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
13850 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74  null) return Get
13860 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65  Int64(stmt, inde
13870 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
13880 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 53  f (t == typeof(S
13890 42 79 74 65 29 29 20 72 65 74 75 72 6e 20 47 65  Byte)) return Ge
138a0 74 53 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64  tSByte(stmt, ind
138b0 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
138c0 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
138d0 42 79 74 65 29 29 20 72 65 74 75 72 6e 20 47 65  Byte)) return Ge
138e0 74 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64 65  tByte(stmt, inde
138f0 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
13900 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49  f (t == typeof(I
13910 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20 47 65  nt16)) return Ge
13920 74 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e 64  tInt16(stmt, ind
13930 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
13940 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
13950 55 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20  UInt16)) return 
13960 47 65 74 55 49 6e 74 31 36 28 73 74 6d 74 2c 20  GetUInt16(stmt, 
13970 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
13980 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
13990 6f 66 28 49 6e 74 33 32 29 29 20 72 65 74 75 72  of(Int32)) retur
139a0 6e 20 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  n GetInt32(stmt,
139b0 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
139c0 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
139d0 65 6f 66 28 55 49 6e 74 33 32 29 29 20 72 65 74  eof(UInt32)) ret
139e0 75 72 6e 20 47 65 74 55 49 6e 74 33 32 28 73 74  urn GetUInt32(st
139f0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
13a00 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
13a10 74 79 70 65 6f 66 28 55 49 6e 74 36 34 29 29 20  typeof(UInt64)) 
13a20 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 36 34  return GetUInt64
13a30 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
13a40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
13a50 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54   Convert.ChangeT
13a60 79 70 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d  ype(GetInt64(stm
13a70 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75  t, index), t, nu
13a80 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 64 65  ll);..        de
13a90 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20  fault:..        
13aa0 20 20 72 65 74 75 72 6e 20 47 65 74 54 65 78 74    return GetText
13ab0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
13ac0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
13ad0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
13ae0 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 43  verride int GetC
13af0 75 72 73 6f 72 46 6f 72 54 61 62 6c 65 28 53 51  ursorForTable(SQ
13b00 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
13b10 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e 74 20  mt, int db, int 
13b20 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20 20 7b  rootPage)..    {
13b30 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
13b40 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 72 65  ANDARD..      re
13b50 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
13b60 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
13b70 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e  _table_cursor_in
13b80 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
13b90 74 65 5f 73 74 6d 74 2c 20 64 62 2c 20 72 6f 6f  te_stmt, db, roo
13ba0 74 50 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  tPage);..#else..
13bb0 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b        return -1;
13bc0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
13bd0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
13be0 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
13bf0 74 52 6f 77 49 64 46 6f 72 43 75 72 73 6f 72 28  tRowIdForCursor(
13c00 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
13c10 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f 72  stmt, int cursor
13c20 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
13c30 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
13c40 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 69 64        long rowid
13c50 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  ;..      SQLiteE
13c60 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e  rrorCode rc = Un
13c70 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
13c80 73 2e 73 71 6c 69 74 65 33 5f 63 75 72 73 6f 72  s.sqlite3_cursor
13c90 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28 73  _rowid_interop(s
13ca0 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
13cb0 2c 20 63 75 72 73 6f 72 2c 20 6f 75 74 20 72 6f  , cursor, out ro
13cc0 77 69 64 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  wid);..      if 
13cd0 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  (rc == SQLiteErr
13ce0 6f 72 43 6f 64 65 2e 4f 6b 29 20 72 65 74 75 72  orCode.Ok) retur
13cf0 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20 20 20 20  n rowid;....    
13d00 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6c    return 0;..#el
13d10 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
13d20 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20   0;..#endif..   
13d30 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
13d40 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
13d50 20 47 65 74 49 6e 64 65 78 43 6f 6c 75 6d 6e 45   GetIndexColumnE
13d60 78 74 65 6e 64 65 64 49 6e 66 6f 28 73 74 72 69  xtendedInfo(stri
13d70 6e 67 20 64 61 74 61 62 61 73 65 2c 20 73 74 72  ng database, str
13d80 69 6e 67 20 69 6e 64 65 78 2c 20 73 74 72 69 6e  ing index, strin
13d90 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 69 6e  g column, out in
13da0 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74 20  t sortMode, out 
13db0 69 6e 74 20 6f 6e 45 72 72 6f 72 2c 20 6f 75 74  int onError, out
13dc0 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 69 6f   string collatio
13dd0 6e 53 65 71 75 65 6e 63 65 29 0d 0a 20 20 20 20  nSequence)..    
13de0 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
13df0 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 49  TANDARD..      I
13e00 6e 74 50 74 72 20 63 6f 6c 6c 3b 0d 0a 20 20 20  ntPtr coll;..   
13e10 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65 6e 3b 0d     int colllen;.
13e20 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
13e30 6f 72 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20 20  orCode rc;....  
13e40 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e      rc = UnsafeN
13e50 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
13e60 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d  ite3_index_colum
13e70 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f  n_info_interop(_
13e80 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61  sql, ToUTF8(data
13e90 62 61 73 65 29 2c 20 54 6f 55 54 46 38 28 69 6e  base), ToUTF8(in
13ea0 64 65 78 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c  dex), ToUTF8(col
13eb0 75 6d 6e 29 2c 20 6f 75 74 20 73 6f 72 74 4d 6f  umn), out sortMo
13ec0 64 65 2c 20 6f 75 74 20 6f 6e 45 72 72 6f 72 2c  de, out onError,
13ed0 20 6f 75 74 20 63 6f 6c 6c 2c 20 6f 75 74 20 63   out coll, out c
13ee0 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20  olllen);..      
13ef0 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65  if (rc != SQLite
13f00 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
13f10 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
13f20 63 65 70 74 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c  ception(rc, null
13f30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c  );....      coll
13f40 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20  ationSequence = 
13f50 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c  UTF8ToString(col
13f60 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65  l, colllen);..#e
13f70 6c 73 65 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d  lse..      sortM
13f80 6f 64 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ode = 0;..      
13f90 6f 6e 45 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20  onError = 2;..  
13fa0 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71      collationSeq
13fb0 75 65 6e 63 65 20 3d 20 22 42 49 4e 41 52 59 22  uence = "BINARY"
13fc0 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
13fd0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
13fe0 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
13ff0 45 72 72 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f  ErrorCode FileCo
14000 6e 74 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62  ntrol(string zDb
14010 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e  Name, int op, In
14020 74 50 74 72 20 70 41 72 67 29 0d 0a 20 20 20 20  tPtr pArg)..    
14030 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
14040 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
14050 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65  ods.sqlite3_file
14060 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28  _control(_sql, (
14070 7a 44 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  zDbName != null)
14080 20 3f 20 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d   ? ToUTF8(zDbNam
14090 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70  e) : null, op, p
140a0 41 72 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  Arg);..    }..  
140b0 7d 0d 0a 7d 0d 0a                                }..}..