System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact d6cf2e001e3c66a2fb26a8dde5f5f03ef7f62e37:


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 39 2e 30  sion = "1.0.89.0
0900: 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  ";..#endif....  
0910: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0920: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 70 61  .    /// The opa
0930: 71 75 65 20 70 6f 69 6e 74 65 72 20 72 65 74 75  que pointer retu
0940: 72 6e 65 64 20 74 6f 20 75 73 20 62 79 20 74 68  rned to us by th
0950: 65 20 73 71 6c 69 74 65 20 70 72 6f 76 69 64 65  e sqlite provide
0960: 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  r..    /// </sum
0970: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0980: 63 74 65 64 20 69 6e 74 65 72 6e 61 6c 20 53 51  cted internal SQ
0990: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
09a0: 6e 64 6c 65 20 5f 73 71 6c 3b 0d 0a 20 20 20 20  ndle _sql;..    
09b0: 70 72 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67  protected string
09c0: 20 5f 66 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20   _fileName;..   
09d0: 20 70 72 6f 74 65 63 74 65 64 20 62 6f 6f 6c 20   protected bool 
09e0: 5f 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 70  _usePool;..    p
09f0: 72 6f 74 65 63 74 65 64 20 69 6e 74 20 5f 70 6f  rotected int _po
0a00: 6f 6c 56 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 23 69  olVersion;....#i
0a10: 66 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54  f (NET_35 || NET
0a20: 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 29 20 26  _40 || NET_45) &
0a30: 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  & !PLATFORM_COMP
0a40: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
0a50: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 5f    private bool _
0a60: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 3b 0d  buildingSchema;.
0a70: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
0a80: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0a90: 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72 2d 64    /// The user-d
0aa0: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
0ab0: 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e 20 74   registered on t
0ac0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  his connection..
0ad0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ae0: 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  y>..    protecte
0af0: 64 20 4c 69 73 74 3c 53 51 4c 69 74 65 46 75 6e  d List<SQLiteFun
0b00: 63 74 69 6f 6e 3e 20 5f 66 75 6e 63 74 69 6f 6e  ction> _function
0b10: 73 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f  s;....#if INTERO
0b20: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
0b30: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0b40: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
0b50: 6d 6f 64 75 6c 65 73 20 63 72 65 61 74 65 64 20  modules created 
0b60: 75 73 69 6e 67 20 74 68 69 73 20 63 6f 6e 6e 65  using this conne
0b70: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
0b80: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0b90: 70 72 6f 74 65 63 74 65 64 20 44 69 63 74 69 6f  protected Dictio
0ba0: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c  nary<string, SQL
0bb0: 69 74 65 4d 6f 64 75 6c 65 3e 20 5f 6d 6f 64 75  iteModule> _modu
0bc0: 6c 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  les;..#endif....
0bd0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c30: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
0c40: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0c50: 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 74 68 65  / Constructs the
0c60: 20 6f 62 6a 65 63 74 20 75 73 65 64 20 74 6f 20   object used to 
0c70: 69 6e 74 65 72 61 63 74 20 77 69 74 68 20 74 68  interact with th
0c80: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
0c90: 62 72 61 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 75  brary..    /// u
0ca0: 73 69 6e 67 20 74 68 65 20 55 54 46 2d 38 20 74  sing the UTF-8 t
0cb0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 0d 0a 20  ext encoding... 
0cc0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0cd0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0ce0: 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e 0d 0a 20  m name="fmt">.. 
0cf0: 20 20 20 2f 2f 2f 20 54 68 65 20 44 61 74 65 54     /// The DateT
0d00: 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20 62 65  ime format to be
0d10: 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6e 76 65   used when conve
0d20: 72 74 69 6e 67 20 73 74 72 69 6e 67 20 76 61 6c  rting string val
0d30: 75 65 73 20 74 6f 20 61 0d 0a 20 20 20 20 2f 2f  ues to a..    //
0d40: 2f 20 44 61 74 65 54 69 6d 65 20 61 6e 64 20 62  / DateTime and b
0d50: 69 6e 64 69 6e 67 20 44 61 74 65 54 69 6d 65 20  inding DateTime 
0d60: 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20 20  parameters...   
0d70: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
0d80: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0d90: 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20 20 20 20  me="kind">..    
0da0: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
0db0: 66 3d 22 44 61 74 65 54 69 6d 65 4b 69 6e 64 22  f="DateTimeKind"
0dc0: 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64 20 77   /> to be used w
0dd0: 68 65 6e 20 63 72 65 61 74 69 6e 67 20 44 61 74  hen creating Dat
0de0: 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76  eTime..    /// v
0df0: 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alues...    /// 
0e00: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0e10: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
0e20: 6d 74 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20 20  mtString">..    
0e30: 2f 2f 2f 20 54 68 65 20 66 6f 72 6d 61 74 20 73  /// The format s
0e40: 74 72 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64  tring to be used
0e50: 20 77 68 65 6e 20 70 61 72 73 69 6e 67 20 61 6e   when parsing an
0e60: 64 20 66 6f 72 6d 61 74 74 69 6e 67 20 44 61 74  d formatting Dat
0e70: 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76  eTime..    /// v
0e80: 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alues...    /// 
0e90: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0ea0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
0eb0: 62 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  b">..    /// The
0ec0: 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 74   native handle t
0ed0: 6f 20 62 65 20 61 73 73 6f 63 69 61 74 65 64 20  o be associated 
0ee0: 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73  with the databas
0ef0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
0f00: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
0f10: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
0f20: 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e  name="fileName">
0f30: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 75  ..    /// The fu
0f40: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69  lly qualified fi
0f50: 6c 65 20 6e 61 6d 65 20 61 73 73 6f 63 69 61 74  le name associat
0f60: 65 64 20 77 69 74 68 20 3c 70 61 72 61 6d 72 65  ed with <paramre
0f70: 66 20 6e 61 6d 65 3d 22 64 62 20 22 2f 3e 2e 0d  f name="db "/>..
0f80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
0f90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0fa0: 6d 20 6e 61 6d 65 3d 22 6f 77 6e 48 61 6e 64 6c  m name="ownHandl
0fb0: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  e">..    /// Non
0fc0: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 65 77  -zero if the new
0fd0: 6c 79 20 63 72 65 61 74 65 64 20 6f 62 6a 65 63  ly created objec
0fe0: 74 20 69 6e 73 74 61 6e 63 65 20 77 69 6c 6c 20  t instance will 
0ff0: 6e 65 65 64 20 74 6f 20 64 69 73 70 6f 73 65 0d  need to dispose.
1000: 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 3c 70 61 72  .    /// of <par
1010: 61 6d 72 65 66 20 6e 61 6d 65 3d 22 64 62 22 20  amref name="db" 
1020: 2f 3e 20 77 68 65 6e 20 69 74 20 69 73 20 6e 6f  /> when it is no
1030: 20 6c 6f 6e 67 65 72 20 6e 65 65 64 65 64 2e 0d   longer needed..
1040: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
1050: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
1060: 53 51 4c 69 74 65 33 28 0d 0a 20 20 20 20 20 20  SQLite3(..      
1070: 20 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d    SQLiteDateForm
1080: 61 74 73 20 66 6d 74 2c 0d 0a 20 20 20 20 20 20  ats fmt,..      
1090: 20 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 6b    DateTimeKind k
10a0: 69 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ind,..        st
10b0: 72 69 6e 67 20 66 6d 74 53 74 72 69 6e 67 2c 0d  ring fmtString,.
10c0: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
10d0: 64 62 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  db,..        str
10e0: 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  ing fileName,.. 
10f0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f 77 6e 48         bool ownH
1100: 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 29  andle..        )
1110: 0d 0a 20 20 20 20 20 20 3a 20 62 61 73 65 28 66  ..      : base(f
1120: 6d 74 2c 20 6b 69 6e 64 2c 20 66 6d 74 53 74 72  mt, kind, fmtStr
1130: 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ing)..    {..   
1140: 20 20 20 20 20 69 66 20 28 64 62 20 21 3d 20 49       if (db != I
1150: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
1160: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1170: 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53      _sql = new S
1180: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
1190: 61 6e 64 6c 65 28 64 62 2c 20 6f 77 6e 48 61 6e  andle(db, ownHan
11a0: 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dle);..         
11b0: 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 66     _fileName = f
11c0: 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
11d0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
11e0: 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67  nnection.OnChang
11f0: 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e  ed(null, new Con
1200: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73  nectionEventArgs
1210: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1220: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
1230: 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77  ionEventType.New
1240: 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20  CriticalHandle, 
1250: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20  null, null,..   
1260: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
1270: 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 66  l, null, _sql, f
1280: 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a  ileName, new obj
1290: 65 63 74 5b 5d 20 7b 20 66 6d 74 2c 20 6b 69 6e  ect[] { fmt, kin
12a0: 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
12b0: 20 20 20 20 66 6d 74 53 74 72 69 6e 67 2c 20 64      fmtString, d
12c0: 62 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 6f 77 6e  b, fileName, own
12d0: 48 61 6e 64 6c 65 20 7d 29 29 3b 0d 0a 20 20 20  Handle }));..   
12e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
12f0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1350: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
1360: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
1370: 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72  "Pattern" Member
1380: 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  s..    private b
1390: 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20  ool disposed;.. 
13a0: 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20     private void 
13b0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20  CheckDisposed() 
13c0: 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
13d0: 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e   {..#if THROW_ON
13e0: 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20  _DISPOSED..     
13f0: 20 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29     if (disposed)
1400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
1410: 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69  row new ObjectDi
1420: 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28  sposedException(
1430: 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2e  typeof(SQLite3).
1440: 4e 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  Name);..#endif..
1450: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
1460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
14c0: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76      protected ov
14d0: 65 72 72 69 64 65 20 76 6f 69 64 20 44 69 73 70  erride void Disp
14e0: 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69  ose(bool disposi
14f0: 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ng)..    {..    
1500: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
1510: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1520: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
1530: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1550: 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d  /if (disposing).
1560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1570: 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20   //{..          
1580: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f        //    ////
1590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15c0: 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f    //    // dispo
15d0: 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75  se managed resou
15e0: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
15f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1600: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1620: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
1630: 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d            //}...
1640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1650: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
1680: 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65           // rele
1690: 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65  ase unmanaged re
16a0: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
16b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
16d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49  ///////....#if I
16f0: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
1700: 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 20 20  ABLE..          
1710: 20 20 20 20 20 20 44 69 73 70 6f 73 65 4d 6f 64        DisposeMod
1720: 75 6c 65 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  ules();..#endif.
1730: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1740: 20 20 20 43 6c 6f 73 65 28 66 61 6c 73 65 29 3b     Close(false);
1750: 20 2f 2a 20 44 69 73 70 6f 73 69 6e 67 2c 20 63   /* Disposing, c
1760: 61 6e 6e 6f 74 20 74 68 72 6f 77 2e 20 2a 2f 0d  annot throw. */.
1770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1780: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1790: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
17a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17b0: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
17c0: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20  disposing);.... 
17d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
17e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
17f0: 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73  TE: Everything s
1800: 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64  hould be fully d
1810: 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73 20  isposed at this 
1820: 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  point...        
1830: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1840: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
1850: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1860: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
1870: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
1880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
18e0: 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52  .#if INTEROP_VIR
18f0: 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20  TUAL_TABLE..    
1900: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1910: 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
1920: 6f 64 20 61 74 74 65 6d 70 74 73 20 74 6f 20 64  od attempts to d
1930: 69 73 70 6f 73 65 20 6f 66 20 61 6c 6c 20 74 68  ispose of all th
1940: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
1950: 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 64 65  iteModule" /> de
1960: 72 69 76 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6f  rived..    /// o
1970: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 20  bject instances 
1980: 63 75 72 72 65 6e 74 6c 79 20 61 73 73 6f 63 69  currently associ
1990: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 61  ated with the na
19a0: 74 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f  tive database co
19b0: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
19c0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
19d0: 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20     private void 
19e0: 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 73 28 29  DisposeModules()
19f0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
1a00: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
1a10: 4e 4f 54 45 3a 20 49 66 20 61 6e 79 20 6d 6f 64  NOTE: If any mod
1a20: 75 6c 65 73 20 77 65 72 65 20 63 72 65 61 74 65  ules were create
1a30: 64 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 64 69  d, attempt to di
1a40: 73 70 6f 73 65 20 6f 66 0d 0a 20 20 20 20 20 20  spose of..      
1a50: 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 6d 20    //       them 
1a60: 6e 6f 77 2e 20 20 54 68 69 73 20 63 6f 64 65 20  now.  This code 
1a70: 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 61  is designed to a
1a80: 76 6f 69 64 20 74 68 72 6f 77 69 6e 67 0d 0a 20  void throwing.. 
1a90: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1aa0: 65 78 63 65 70 74 69 6f 6e 73 20 75 6e 6c 65 73  exceptions unles
1ab0: 73 20 74 68 65 20 44 69 73 70 6f 73 65 20 6d 65  s the Dispose me
1ac0: 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
1ad0: 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  le..        //  
1ae0: 20 20 20 20 20 69 74 73 65 6c 66 20 74 68 72 6f       itself thro
1af0: 77 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 2e  ws an exception.
1b00: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
1b10: 20 20 20 20 20 20 69 66 20 28 5f 6d 6f 64 75 6c        if (_modul
1b20: 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es != null)..   
1b30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b40: 20 20 20 20 66 6f 72 65 61 63 68 20 28 4b 65 79      foreach (Key
1b50: 56 61 6c 75 65 50 61 69 72 3c 73 74 72 69 6e 67  ValuePair<string
1b60: 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 20  , SQLiteModule> 
1b70: 70 61 69 72 20 69 6e 20 5f 6d 6f 64 75 6c 65 73  pair in _modules
1b80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ba0: 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d    SQLiteModule m
1bb0: 6f 64 75 6c 65 20 3d 20 70 61 69 72 2e 56 61 6c  odule = pair.Val
1bc0: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
1bd0: 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
1be0: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c00: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
1c20: 75 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a  ule.Dispose();..
1c30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f  .            _mo
1c50: 64 75 6c 65 73 2e 43 6c 65 61 72 28 29 3b 0d 0a  dules.Clear();..
1c60: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
1c70: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
1c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1ce0: 0a 0d 0a 20 20 20 20 2f 2f 20 49 74 20 69 73 6e  ...    // It isn
1cf0: 27 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20  't necessary to 
1d00: 63 6c 65 61 6e 75 70 20 61 6e 79 20 66 75 6e 63  cleanup any func
1d10: 74 69 6f 6e 73 20 77 65 27 76 65 20 72 65 67 69  tions we've regi
1d20: 73 74 65 72 65 64 2e 20 20 49 66 20 74 68 65 20  stered.  If the 
1d30: 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20  connection..    
1d40: 2f 2f 20 67 6f 65 73 20 74 6f 20 74 68 65 20 70  // goes to the p
1d50: 6f 6f 6c 20 61 6e 64 20 69 73 20 72 65 73 75 72  ool and is resur
1d60: 72 65 63 74 65 64 20 6c 61 74 65 72 2c 20 72 65  rected later, re
1d70: 2d 72 65 67 69 73 74 65 72 65 64 20 66 75 6e 63  -registered func
1d80: 74 69 6f 6e 73 20 77 69 6c 6c 20 6f 76 65 72 77  tions will overw
1d90: 72 69 74 65 20 74 68 65 0d 0a 20 20 20 20 2f 2f  rite the..    //
1da0: 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69   previous functi
1db0: 6f 6e 73 2e 20 20 54 68 65 20 53 51 4c 69 74 65  ons.  The SQLite
1dc0: 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69 65 48 61  FunctionCookieHa
1dd0: 6e 64 6c 65 20 77 69 6c 6c 20 74 61 6b 65 20 63  ndle will take c
1de0: 61 72 65 20 6f 66 20 66 72 65 65 69 6e 67 20 75  are of freeing u
1df0: 6e 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 2f 2f  nmanaged..    //
1e00: 20 72 65 73 6f 75 72 63 65 73 20 62 65 6c 6f 6e   resources belon
1e10: 67 69 6e 67 20 74 6f 20 74 68 65 20 70 72 65 76  ging to the prev
1e20: 69 6f 75 73 6c 79 2d 72 65 67 69 73 74 65 72 65  iously-registere
1e30: 64 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20  d functions...  
1e40: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
1e50: 69 64 65 20 76 6f 69 64 20 43 6c 6f 73 65 28 62  ide void Close(b
1e60: 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20  ool canThrow).. 
1e70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
1e80: 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql != null).. 
1e90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ea0: 20 20 69 66 20 28 21 5f 73 71 6c 2e 4f 77 6e 48    if (!_sql.OwnH
1eb0: 61 6e 64 6c 65 29 0d 0a 20 20 20 20 20 20 20 20  andle)..        
1ec0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1ed0: 20 20 20 5f 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d     _sql = null;.
1ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
1ef0: 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20  eturn;..        
1f00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f10: 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a   if (_usePool)..
1f20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f30: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
1f40: 51 4c 69 74 65 42 61 73 65 2e 52 65 73 65 74 43  QLiteBase.ResetC
1f50: 6f 6e 6e 65 63 74 69 6f 6e 28 5f 73 71 6c 2c 20  onnection(_sql, 
1f60: 5f 73 71 6c 2c 20 63 61 6e 54 68 72 6f 77 29 29  _sql, canThrow))
1f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f80: 7b 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56  {..#if INTEROP_V
1f90: 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20  IRTUAL_TABLE..  
1fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb0: 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 73 28 29  DisposeModules()
1fc0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
1fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1fe0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50  QLiteConnectionP
1ff0: 6f 6f 6c 2e 41 64 64 28 5f 66 69 6c 65 4e 61 6d  ool.Add(_fileNam
2000: 65 2c 20 5f 73 71 6c 2c 20 5f 70 6f 6f 6c 56 65  e, _sql, _poolVe
2010: 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 23 69 66 20 21  rsion);....#if !
2020: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
2030: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
2040: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
2050: 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
2060: 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72  eLine(String.For
2070: 6d 61 74 28 22 43 6c 6f 73 65 20 28 50 6f 6f 6c  mat("Close (Pool
2080: 29 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c  ) Success: {0}",
2090: 20 5f 73 71 6c 29 29 3b 0d 0a 23 65 6e 64 69 66   _sql));..#endif
20a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20b0: 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  }..#if !NET_COMP
20c0: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
20d0: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
20e0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
20f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2110: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
2120: 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ne(String.Format
2130: 28 22 43 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 46  ("Close (Pool) F
2140: 61 69 6c 75 72 65 3a 20 7b 30 7d 22 2c 20 5f 73  ailure: {0}", _s
2150: 71 6c 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ql));..         
2160: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
2170: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2180: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
2190: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21a0: 20 20 20 20 20 20 20 20 5f 73 71 6c 2e 44 69 73          _sql.Dis
21b0: 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  pose();..       
21c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
21d0: 5f 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  _sql = null;..  
21e0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
21f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2250: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
2260: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2270: 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 69 6e  / Attempts to in
2280: 74 65 72 72 75 70 74 20 74 68 65 20 71 75 65 72  terrupt the quer
2290: 79 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63  y currently exec
22a0: 75 74 69 6e 67 20 6f 6e 20 74 68 65 20 61 73 73  uting on the ass
22b0: 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f  ociated..    ///
22c0: 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73 65   native database
22d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
22e0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
22f0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
2300: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 61 6e  verride void Can
2310: 63 65 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  cel()..    {..  
2320: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
2330: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2340: 69 6e 74 65 72 72 75 70 74 28 5f 73 71 6c 29 3b  interrupt(_sql);
2350: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
2360: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2370: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
2380: 69 6f 6e 20 62 69 6e 64 73 20 61 20 75 73 65 72  ion binds a user
2390: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
23a0: 6e 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74  n to the connect
23b0: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
23c0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
23d0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
23e0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
23f0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
2400: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
2410: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
2420: 74 65 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  te"/> object ins
2430: 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67  tance containing
2440: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65  ..    /// the me
2450: 74 61 64 61 74 61 20 66 6f 72 20 74 68 65 20 66  tadata for the f
2460: 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f  unction to be bo
2470: 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  und...    /// </
2480: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
2490: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e  <param name="fun
24a0: 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f  ction">..    ///
24b0: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
24c0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22 2f  SQLiteFunction"/
24d0: 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
24e0: 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  e that implement
24f0: 73 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 66  s the..    /// f
2500: 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f  unction to be bo
2510: 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  und...    /// </
2520: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
2530: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61  <param name="fla
2540: 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  gs">..    /// Th
2550: 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74  e flags associat
2560: 65 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65  ed with the pare
2570: 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  nt connection ob
2580: 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
2590: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
25a0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
25b0: 6f 69 64 20 42 69 6e 64 46 75 6e 63 74 69 6f 6e  oid BindFunction
25c0: 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
25d0: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
25e0: 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  te functionAttri
25f0: 62 75 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 53  bute,..        S
2600: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75  QLiteFunction fu
2610: 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  nction,..       
2620: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
2630: 6e 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a 20 20  nFlags flags..  
2640: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
2650: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
2660: 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74  nction.BindFunct
2670: 69 6f 6e 28 74 68 69 73 2c 20 66 75 6e 63 74 69  ion(this, functi
2680: 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 66 75 6e  onAttribute, fun
2690: 63 74 69 6f 6e 2c 20 66 6c 61 67 73 29 3b 0d 0a  ction, flags);..
26a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 66  ..        if (_f
26b0: 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  unctions == null
26c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  )..            _
26d0: 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77 20  functions = new 
26e0: 4c 69 73 74 3c 53 51 4c 69 74 65 46 75 6e 63 74  List<SQLiteFunct
26f0: 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ion>();....     
2700: 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 2e 41 64     _functions.Ad
2710: 64 28 66 75 6e 63 74 69 6f 6e 29 3b 0d 0a 20 20  d(function);..  
2720: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
2730: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
2740: 69 6e 67 20 56 65 72 73 69 6f 6e 0d 0a 20 20 20  ing Version..   
2750: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
2760: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2770: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 33 2e 53  return SQLite3.S
2780: 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d 0a 20  QLiteVersion;.. 
2790: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
27a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
27b0: 65 72 72 69 64 65 20 69 6e 74 20 56 65 72 73 69  erride int Versi
27c0: 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d  onNumber..    {.
27d0: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
27e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
27f0: 75 72 6e 20 53 51 4c 69 74 65 33 2e 53 51 4c 69  urn SQLite3.SQLi
2800: 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b  teVersionNumber;
2810: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2820: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2830: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
2840: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a  efineConstants..
2850: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
2860: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
2870: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
2880: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
2890: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
28a0: 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  der();..        
28b0: 20 20 20 20 49 4c 69 73 74 3c 73 74 72 69 6e 67      IList<string
28c0: 3e 20 6c 69 73 74 20 3d 20 53 51 4c 69 74 65 44  > list = SQLiteD
28d0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 2e 4f  efineConstants.O
28e0: 70 74 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20  ptionList;....  
28f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 69            if (li
2900: 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st != null)..   
2910: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2920: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
2930: 61 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d  ach (string elem
2940: 65 6e 74 20 69 6e 20 6c 69 73 74 29 0d 0a 20 20  ent in list)..  
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2970: 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74       if (element
2980: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a0: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
29b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c0: 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c      if (result.L
29d0: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
2a00: 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  d(' ');....     
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a20: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 65 6c 65  esult.Append(ele
2a30: 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  ment);..        
2a40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2a50: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2a60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
2a70: 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29  esult.ToString()
2a80: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
2a90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
2aa0: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
2ab0: 67 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d  g SQLiteVersion.
2ac0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
2ad0: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2ae0: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
2af0: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
2b00: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
2b10: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29  te3_libversion()
2b20: 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  , -1);..      }.
2b30: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
2b40: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 69 6e  ternal static in
2b50: 74 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e  t SQLiteVersionN
2b60: 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  umber..    {..  
2b70: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
2b80: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2b90: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2ba0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62  hods.sqlite3_lib
2bb0: 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29  version_number()
2bc0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
2bd0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
2be0: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  l static string 
2bf0: 53 51 4c 69 74 65 53 6f 75 72 63 65 49 64 0d 0a  SQLiteSourceId..
2c00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
2c10: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
2c20: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
2c30: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
2c40: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2c50: 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d  e3_sourceid(), -
2c60: 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  1);..      }..  
2c70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
2c80: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
2c90: 67 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f 6e  g InteropVersion
2ca0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
2cb0: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
2cc0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
2cd0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
2ce0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
2cf0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
2d00: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2d10: 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 69 6e  e3_libversion_in
2d20: 74 65 72 6f 70 28 29 2c 20 2d 31 29 3b 0d 0a 23  terop(), -1);..#
2d30: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2d40: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
2d50: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
2d60: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
2d70: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
2d80: 73 74 72 69 6e 67 20 49 6e 74 65 72 6f 70 53 6f  string InteropSo
2d90: 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a 20  urceId..    {.. 
2da0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
2db0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
2dc0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
2dd0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2de0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
2df0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2e00: 2e 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69  .sqlite3_sourcei
2e10: 64 5f 69 6e 74 65 72 6f 70 28 29 2c 20 2d 31 29  d_interop(), -1)
2e20: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
2e30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
2e40: 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  l;..#endif..    
2e50: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
2e60: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
2e70: 72 72 69 64 65 20 62 6f 6f 6c 20 41 75 74 6f 43  rride bool AutoC
2e80: 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d 0a 20 20  ommit..    {..  
2e90: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
2ea0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2eb0: 20 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28 5f 73   IsAutocommit(_s
2ec0: 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ql, _sql);..    
2ed0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
2ee0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
2ef0: 69 64 65 20 6c 6f 6e 67 20 4c 61 73 74 49 6e 73  ide long LastIns
2f00: 65 72 74 52 6f 77 49 64 0d 0a 20 20 20 20 7b 0d  ertRowId..    {.
2f10: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
2f20: 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
2f30: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
2f40: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ORK..        ret
2f50: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
2f60: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2f70: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
2f80: 64 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 69 66 20  d(_sql);..#elif 
2f90: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
2fa0: 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 72  ..        long r
2fb0: 6f 77 49 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  owId = 0;..     
2fc0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
2fd0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c  ethods.sqlite3_l
2fe0: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
2ff0: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 72  _interop(_sql, r
3000: 65 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20  ef rowId);..    
3010: 20 20 20 20 72 65 74 75 72 6e 20 72 6f 77 49 64      return rowId
3020: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
3030: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
3040: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
3050: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
3060: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
3070: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
3080: 76 65 72 72 69 64 65 20 69 6e 74 20 43 68 61 6e  verride int Chan
3090: 67 65 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ges..    {..    
30a0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
30b0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
30c0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 72 65  DARD..        re
30d0: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
30e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
30f0: 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70  _changes_interop
3100: 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a  (_sql);..#else..
3110: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
3120: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
3130: 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  ds.sqlite3_chang
3140: 65 73 28 5f 73 71 6c 29 3b 0d 0a 23 65 6e 64 69  es(_sql);..#endi
3150: 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  f..      }..    
3160: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
3170: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
3180: 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20 20  MemoryUsed..    
3190: 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20  {..      get..  
31a0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
31b0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
31c0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 72  EWORK..        r
31d0: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
31e0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
31f0: 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 28 29 3b  3_memory_used();
3200: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
3210: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
3220: 20 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20 30    long bytes = 0
3230: 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  ;..        Unsaf
3240: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
3250: 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73  qlite3_memory_us
3260: 65 64 5f 69 6e 74 65 72 6f 70 28 72 65 66 20 62  ed_interop(ref b
3270: 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  ytes);..        
3280: 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23  return bytes;..#
3290: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
32a0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
32b0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
32c0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
32d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
32e0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
32f0: 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 48  ide long MemoryH
3300: 69 67 68 77 61 74 65 72 0d 0a 20 20 20 20 7b 0d  ighwater..    {.
3310: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
3320: 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
3330: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
3340: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ORK..        ret
3350: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
3360: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3370: 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72  memory_highwater
3380: 28 30 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  (0);..#elif !SQL
3390: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
33a0: 20 20 20 20 20 20 6c 6f 6e 67 20 62 79 74 65 73        long bytes
33b0: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 55   = 0;..        U
33c0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
33d0: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  ds.sqlite3_memor
33e0: 79 5f 68 69 67 68 77 61 74 65 72 5f 69 6e 74 65  y_highwater_inte
33f0: 72 6f 70 28 30 2c 20 72 65 66 20 62 79 74 65 73  rop(0, ref bytes
3400: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
3410: 72 6e 20 62 79 74 65 73 3b 0d 0a 23 65 6c 73 65  rn bytes;..#else
3420: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
3430: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
3440: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
3450: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d  #endif..      }.
3460: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
3470: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3480: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e   /// Returns non
3490: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 75 6e 64  -zero if the und
34a0: 65 72 6c 79 69 6e 67 20 6e 61 74 69 76 65 20 63  erlying native c
34b0: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
34c0: 20 69 73 20 6f 77 6e 65 64 0d 0a 20 20 20 20 2f   is owned..    /
34d0: 2f 2f 20 62 79 20 74 68 69 73 20 69 6e 73 74 61  // by this insta
34e0: 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  nce...    /// </
34f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
3500: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
3510: 62 6f 6f 6c 20 4f 77 6e 48 61 6e 64 6c 65 0d 0a  bool OwnHandle..
3520: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
3530: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
3540: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
3550: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
3560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
3570: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
3580: 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e  ception("no conn
3590: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76  ection handle av
35a0: 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 0d 0a 20 20  ailable");....  
35b0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
35c0: 20 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c 65 3b   _sql.OwnHandle;
35d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
35e0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
35f0: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
3600: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4d  teErrorCode SetM
3610: 65 6d 6f 72 79 53 74 61 74 75 73 28 62 6f 6f 6c  emoryStatus(bool
3620: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
3630: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
3640: 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74  taticSetMemorySt
3650: 61 74 75 73 28 76 61 6c 75 65 29 3b 0d 0a 20 20  atus(value);..  
3660: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
3670: 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74  nal static SQLit
3680: 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74 69  eErrorCode Stati
3690: 63 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73  cSetMemoryStatus
36a0: 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20  (bool value)..  
36b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
36c0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
36d0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
36e0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
36f0: 6e 66 69 67 5f 69 6e 74 28 0d 0a 20 20 20 20 20  nfig_int(..     
3700: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
3710: 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54  figOpsEnum.SQLIT
3720: 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54  E_CONFIG_MEMSTAT
3730: 55 53 2c 20 76 61 6c 75 65 20 3f 20 31 20 3a 20  US, value ? 1 : 
3740: 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  0);....        r
3750: 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d  eturn rc;..    }
3760: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
3770: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53  mary>..    /// S
3780: 68 75 74 64 6f 77 6e 20 74 68 65 20 53 51 4c 69  hutdown the SQLi
3790: 74 65 20 65 6e 67 69 6e 65 20 73 6f 20 74 68 61  te engine so tha
37a0: 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
37b0: 61 72 74 65 64 20 77 69 74 68 20 64 69 66 66 65  arted with diffe
37c0: 72 65 6e 74 20 63 6f 6e 66 69 67 20 6f 70 74 69  rent config opti
37d0: 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57 65  ons...    /// We
37e0: 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f 20   depend on auto 
37f0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 74  initialization t
3800: 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20 20  o recover...    
3810: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
3820: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
3830: 3e 52 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c  >Returns a resul
3840: 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e  t code</returns>
3850: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
3860: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
3870: 72 6f 72 43 6f 64 65 20 53 68 75 74 64 6f 77 6e  rorCode Shutdown
3880: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
3890: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
38a0: 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
38b0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
38c0: 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 3b 0d  te3_shutdown();.
38d0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
38e0: 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  rc;..    }....  
38f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
3900: 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69  .    /// Determi
3910: 6e 65 73 20 69 66 20 74 68 65 20 61 73 73 6f 63  nes if the assoc
3920: 69 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f 6e  iated native con
3930: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69  nection handle i
3940: 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  s open...    ///
3950: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
3960: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
3970: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
3980: 20 69 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   if the associat
3990: 65 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63  ed native connec
39a0: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f  tion handle is o
39b0: 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  pen...    /// </
39c0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
39d0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
39e0: 62 6f 6f 6c 20 49 73 4f 70 65 6e 28 29 0d 0a 20  bool IsOpen().. 
39f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
3a00: 74 75 72 6e 20 28 5f 73 71 6c 20 21 3d 20 6e 75  turn (_sql != nu
3a10: 6c 6c 29 20 26 26 20 21 5f 73 71 6c 2e 49 73 49  ll) && !_sql.IsI
3a20: 6e 76 61 6c 69 64 20 26 26 20 21 5f 73 71 6c 2e  nvalid && !_sql.
3a30: 49 73 43 6c 6f 73 65 64 3b 0d 0a 20 20 20 20 7d  IsClosed;..    }
3a40: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
3a50: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4f   override void O
3a60: 70 65 6e 28 73 74 72 69 6e 67 20 73 74 72 46 69  pen(string strFi
3a70: 6c 65 6e 61 6d 65 2c 20 53 51 4c 69 74 65 43 6f  lename, SQLiteCo
3a80: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f  nnectionFlags co
3a90: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53  nnectionFlags, S
3aa0: 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e  QLiteOpenFlagsEn
3ab0: 75 6d 20 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e  um openFlags, in
3ac0: 74 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62  t maxPoolSize, b
3ad0: 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29 0d 0a 20 20  ool usePool)..  
3ae0: 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20    {..      //.. 
3af0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
3b00: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
3b10: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72  nnection is curr
3b20: 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 61 74 74 65  ently open, atte
3b30: 6d 70 74 20 74 6f 0d 0a 20 20 20 20 20 20 2f 2f  mpt to..      //
3b40: 20 20 20 20 20 20 20 63 6c 6f 73 65 20 69 74 20         close it 
3b50: 6e 6f 77 2e 20 20 54 68 69 73 20 6d 75 73 74 20  now.  This must 
3b60: 62 65 20 64 6f 6e 65 20 62 65 63 61 75 73 65 20  be done because 
3b70: 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72  the file name or
3b80: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
3b90: 20 6f 74 68 65 72 20 70 61 72 61 6d 65 74 65 72   other parameter
3ba0: 73 20 74 68 61 74 20 6d 61 79 20 69 6d 70 61 63  s that may impac
3bb0: 74 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  t the underlying
3bc0: 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20   database..     
3bd0: 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 6e 65 63   //       connec
3be0: 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63 68  tion may have ch
3bf0: 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f  anged...      //
3c00: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c  ..      if (_sql
3c10: 20 21 3d 20 6e 75 6c 6c 29 20 43 6c 6f 73 65 28   != null) Close(
3c20: 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  true);....      
3c30: 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54  //..      // NOT
3c40: 45 3a 20 49 66 20 74 68 65 20 63 6f 6e 6e 65 63  E: If the connec
3c50: 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 63 6c 6f  tion was not clo
3c60: 73 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c 79  sed successfully
3c70: 2c 20 74 68 72 6f 77 20 61 6e 0d 0a 20 20 20 20  , throw an..    
3c80: 20 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70    //       excep
3c90: 74 69 6f 6e 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  tion now...     
3ca0: 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f   //..      if (_
3cb0: 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql != null)..  
3cc0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
3cd0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
3ce0: 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  n("connection ha
3cf0: 6e 64 6c 65 20 69 73 20 73 74 69 6c 6c 20 61 63  ndle is still ac
3d00: 74 69 76 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tive");....     
3d10: 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 75 73 65 50   _usePool = useP
3d20: 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 5f 66 69 6c  ool;..      _fil
3d30: 65 4e 61 6d 65 20 3d 20 73 74 72 46 69 6c 65 6e  eName = strFilen
3d40: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ame;....      if
3d50: 20 28 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20   (usePool)..    
3d60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 73 71    {..        _sq
3d70: 6c 20 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  l = SQLiteConnec
3d80: 74 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28  tionPool.Remove(
3d90: 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61 78  strFilename, max
3da0: 50 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f 70  PoolSize, out _p
3db0: 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a  oolVersion);....
3dc0: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
3dd0: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
3de0: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
3df0: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
3e00: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
3e10: 4f 70 65 6e 20 28 50 6f 6f 6c 29 3a 20 7b 30 7d  Open (Pool): {0}
3e20: 22 2c 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c  ", (_sql != null
3e30: 29 20 3f 20 5f 73 71 6c 2e 54 6f 53 74 72 69 6e  ) ? _sql.ToStrin
3e40: 67 28 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29  g() : "<null>"))
3e50: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
3e60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28   }....      if (
3e70: 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
3e80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3e90: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
3ea0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
3eb0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
3ec0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
3ed0: 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20  inally /* NOTE: 
3ee0: 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70  Thread.Abort() p
3ef0: 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20  rotection. */.. 
3f00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3f10: 20 20 20 20 49 6e 74 50 74 72 20 64 62 3b 0d 0a      IntPtr db;..
3f20: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
3f30: 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a  ErrorCode n;....
3f40: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
3f50: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
3f60: 69 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46  if ((connectionF
3f70: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
3f80: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45  nectionFlags.NoE
3f90: 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e  xtensionFunction
3fa0: 73 29 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) != SQLiteConn
3fb0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78  ectionFlags.NoEx
3fc0: 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73  tensionFunctions
3fd0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
3fe0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
3ff0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4000: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ods.sqlite3_open
4010: 5f 69 6e 74 65 72 6f 70 28 54 6f 55 54 46 38 28  _interop(ToUTF8(
4020: 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 6f 70  strFilename), op
4030: 65 6e 46 6c 61 67 73 2c 20 6f 75 74 20 64 62 29  enFlags, out db)
4040: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
4050: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
4060: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
4070: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4080: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
4090: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
40a0: 5f 6f 70 65 6e 5f 76 32 28 54 6f 55 54 46 38 28  _open_v2(ToUTF8(
40b0: 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 6f 75  strFilename), ou
40c0: 74 20 64 62 2c 20 6f 70 65 6e 46 6c 61 67 73 2c  t db, openFlags,
40d0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
40e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23            }....#
40f0: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
4100: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
4110: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
4120: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
4130: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
4140: 22 4f 70 65 6e 3a 20 7b 30 7d 22 2c 20 64 62 29  "Open: {0}", db)
4150: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
4160: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
4170: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
4180: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
4190: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
41a0: 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
41b0: 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53      _sql = new S
41c0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
41d0: 61 6e 64 6c 65 28 64 62 2c 20 74 72 75 65 29 3b  andle(db, true);
41e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
41f0: 20 20 20 20 20 6c 6f 63 6b 20 28 5f 73 71 6c 29       lock (_sql)
4200: 20 7b 20 2f 2a 20 48 41 43 4b 3a 20 46 6f 72 63   { /* HACK: Forc
4210: 65 20 74 68 65 20 53 79 6e 63 42 6c 6f 63 6b 20  e the SyncBlock 
4220: 74 6f 20 62 65 20 22 63 72 65 61 74 65 64 22 20  to be "created" 
4230: 6e 6f 77 2e 20 2a 2f 20 7d 0d 0a 0d 0a 20 20 20  now. */ }....   
4240: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
4250: 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28  ction.OnChanged(
4260: 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63  null, new Connec
4270: 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a  tionEventArgs(..
4280: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
4290: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  teConnectionEven
42a0: 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61  tType.NewCritica
42b0: 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e  lHandle, null, n
42c0: 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ull,..          
42d0: 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73    null, null, _s
42e0: 71 6c 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c  ql, strFilename,
42f0: 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 20   new object[] { 
4300: 73 74 72 46 69 6c 65 6e 61 6d 65 2c 0d 0a 20 20  strFilename,..  
4310: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
4320: 74 69 6f 6e 46 6c 61 67 73 2c 20 6f 70 65 6e 46  tionFlags, openF
4330: 6c 61 67 73 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a  lags, maxPoolSiz
4340: 65 2c 20 75 73 65 50 6f 6f 6c 20 7d 29 29 3b 0d  e, usePool }));.
4350: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
4360: 20 20 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74 69    // Bind functi
4370: 6f 6e 73 20 74 6f 20 74 68 69 73 20 63 6f 6e 6e  ons to this conn
4380: 65 63 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79 20  ection.  If any 
4390: 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f  previous functio
43a0: 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e  ns of the same n
43b0: 61 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77 65  ame..      // we
43c0: 72 65 20 61 6c 72 65 61 64 79 20 62 6f 75 6e 64  re already bound
43d0: 2c 20 74 68 65 6e 20 74 68 65 20 6e 65 77 20 62  , then the new b
43e0: 69 6e 64 69 6e 67 73 20 72 65 70 6c 61 63 65 20  indings replace 
43f0: 74 68 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20 20  the old...      
4400: 69 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46  if ((connectionF
4410: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
4420: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 42  nectionFlags.NoB
4430: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d  indFunctions) !=
4440: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
4450: 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75 6e  nFlags.NoBindFun
4460: 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 7b  ctions)..      {
4470: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
4480: 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75  _functions == nu
4490: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
44a0: 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20     _functions = 
44b0: 6e 65 77 20 4c 69 73 74 3c 53 51 4c 69 74 65 46  new List<SQLiteF
44c0: 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20  unction>();.... 
44d0: 20 20 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69           _functi
44e0: 6f 6e 73 2e 41 64 64 52 61 6e 67 65 28 6e 65 77  ons.AddRange(new
44f0: 20 4c 69 73 74 3c 53 51 4c 69 74 65 46 75 6e 63   List<SQLiteFunc
4500: 74 69 6f 6e 3e 28 53 51 4c 69 74 65 46 75 6e 63  tion>(SQLiteFunc
4510: 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f  tion.BindFunctio
4520: 6e 73 28 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74  ns(this, connect
4530: 69 6f 6e 46 6c 61 67 73 29 29 29 3b 0d 0a 20 20  ionFlags)));..  
4540: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 53      }....      S
4550: 65 74 54 69 6d 65 6f 75 74 28 30 29 3b 0d 0a 20  etTimeout(0);.. 
4560: 20 20 20 20 20 47 43 2e 4b 65 65 70 41 6c 69 76       GC.KeepAliv
4570: 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d  e(_sql);..    }.
4580: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
4590: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c  override void Cl
45a0: 65 61 72 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b  earPool()..    {
45b0: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f  ..      SQLiteCo
45c0: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c 65  nnectionPool.Cle
45d0: 61 72 50 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d 65  arPool(_fileName
45e0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
45f0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
4600: 64 65 20 69 6e 74 20 43 6f 75 6e 74 50 6f 6f 6c  de int CountPool
4610: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
4620: 20 20 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74     Dictionary<st
4630: 72 69 6e 67 2c 20 69 6e 74 3e 20 63 6f 75 6e 74  ring, int> count
4640: 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  s = null;..     
4650: 20 20 20 69 6e 74 20 6f 70 65 6e 43 6f 75 6e 74     int openCount
4660: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 69   = 0;..        i
4670: 6e 74 20 63 6c 6f 73 65 43 6f 75 6e 74 20 3d 20  nt closeCount = 
4680: 30 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  0;..        int 
4690: 74 6f 74 61 6c 43 6f 75 6e 74 20 3d 20 30 3b 0d  totalCount = 0;.
46a0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
46b0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e  eConnectionPool.
46c0: 47 65 74 43 6f 75 6e 74 73 28 5f 66 69 6c 65 4e  GetCounts(_fileN
46d0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
46e0: 20 20 72 65 66 20 63 6f 75 6e 74 73 2c 20 72 65    ref counts, re
46f0: 66 20 6f 70 65 6e 43 6f 75 6e 74 2c 20 72 65 66  f openCount, ref
4700: 20 63 6c 6f 73 65 43 6f 75 6e 74 2c 0d 0a 20 20   closeCount,..  
4710: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 74 6f            ref to
4720: 74 61 6c 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  talCount);....  
4730: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 6f 74        return tot
4740: 61 6c 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 7d 0d  alCount;..    }.
4750: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
4760: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
4770: 74 54 69 6d 65 6f 75 74 28 69 6e 74 20 6e 54 69  tTimeout(int nTi
4780: 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20 7b 0d  meoutMS)..    {.
4790: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 64 62  .      IntPtr db
47a0: 20 3d 20 5f 73 71 6c 3b 0d 0a 20 20 20 20 20 20   = _sql;..      
47b0: 69 66 20 28 64 62 20 3d 3d 20 49 6e 74 50 74 72  if (db == IntPtr
47c0: 2e 5a 65 72 6f 29 20 74 68 72 6f 77 20 6e 65 77  .Zero) throw new
47d0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
47e0: 28 22 6e 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ("no connection 
47f0: 68 61 6e 64 6c 65 20 61 76 61 69 6c 61 62 6c 65  handle available
4800: 22 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74  ");..      SQLit
4810: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
4820: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4830: 64 73 2e 73 71 6c 69 74 65 33 5f 62 75 73 79 5f  ds.sqlite3_busy_
4840: 74 69 6d 65 6f 75 74 28 64 62 2c 20 6e 54 69 6d  timeout(db, nTim
4850: 65 6f 75 74 4d 53 29 3b 0d 0a 20 20 20 20 20 20  eoutMS);..      
4860: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
4870: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
4880: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
4890: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
48a0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
48b0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
48c0: 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
48d0: 53 74 65 70 28 53 51 4c 69 74 65 53 74 61 74 65  Step(SQLiteState
48e0: 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20  ment stmt)..    
48f0: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
4900: 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20  rrorCode n;..   
4910: 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20     Random rnd = 
4920: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e  null;..      uin
4930: 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28 75  t starttick = (u
4940: 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e  int)Environment.
4950: 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  TickCount;..    
4960: 20 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d    uint timeout =
4970: 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f   (uint)(stmt._co
4980: 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69  mmand._commandTi
4990: 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 3b 0d 0a  meout * 1000);..
49a0: 0d 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28 74  ..      while (t
49b0: 72 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  rue)..      {.. 
49c0: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
49d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
49e0: 71 6c 69 74 65 33 5f 73 74 65 70 28 73 74 6d 74  qlite3_step(stmt
49f0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
4a00: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
4a10: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
4a20: 6f 64 65 2e 52 6f 77 29 20 72 65 74 75 72 6e 20  ode.Row) return 
4a30: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 69  true;..        i
4a40: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
4a50: 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 20 72 65  rorCode.Done) re
4a60: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
4a70: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
4a80: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
4a90: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  Ok)..        {..
4aa0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
4ab0: 45 72 72 6f 72 43 6f 64 65 20 72 3b 0d 0a 0d 0a  ErrorCode r;....
4ac0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 41 6e 20            // An 
4ad0: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 2c 20  error occurred, 
4ae0: 61 74 74 65 6d 70 74 20 74 6f 20 72 65 73 65 74  attempt to reset
4af0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 2e 20   the statement. 
4b00: 20 49 66 20 74 68 65 20 72 65 73 65 74 20 77 6f   If the reset wo
4b10: 72 6b 65 64 20 62 65 63 61 75 73 65 20 74 68 65  rked because the
4b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 73  ..          // s
4b30: 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
4b40: 64 2c 20 72 65 2d 74 72 79 20 74 68 65 20 73 74  d, re-try the st
4b50: 65 70 20 61 67 61 69 6e 2e 20 20 49 66 20 69 74  ep again.  If it
4b60: 20 65 72 72 6f 72 65 64 20 6f 75 72 20 62 65 63   errored our bec
4b70: 61 75 73 65 20 74 68 65 20 64 61 74 61 62 61 73  ause the databas
4b80: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  e..          // 
4b90: 69 73 20 6c 6f 63 6b 65 64 2c 20 74 68 65 6e 20  is locked, then 
4ba0: 6b 65 65 70 20 72 65 74 72 79 69 6e 67 20 75 6e  keep retrying un
4bb0: 74 69 6c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  til the command 
4bc0: 74 69 6d 65 6f 75 74 20 6f 63 63 75 72 73 2e 0d  timeout occurs..
4bd0: 0a 20 20 20 20 20 20 20 20 20 20 72 20 3d 20 52  .          r = R
4be0: 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20  eset(stmt);.... 
4bf0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 20 3d           if (r =
4c00: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
4c10: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
4c20: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
4c30: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
4c40: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
4c50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c  ....          el
4c60: 73 65 20 69 66 20 28 28 72 20 3d 3d 20 53 51 4c  se if ((r == SQL
4c70: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63  iteErrorCode.Loc
4c80: 6b 65 64 20 7c 7c 20 72 20 3d 3d 20 53 51 4c 69  ked || r == SQLi
4c90: 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79  teErrorCode.Busy
4ca0: 29 20 26 26 20 73 74 6d 74 2e 5f 63 6f 6d 6d 61  ) && stmt._comma
4cb0: 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nd != null)..   
4cc0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4cd0: 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74 72        // Keep tr
4ce0: 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ying..          
4cf0: 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c    if (rnd == nul
4d00: 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d 65  l) // First time
4d10: 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65 72   we've encounter
4d20: 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20  ed the lock..   
4d30: 20 20 20 20 20 20 20 20 20 20 20 72 6e 64 20 3d             rnd =
4d40: 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a   new Random();..
4d50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4d60: 20 49 66 20 77 65 27 76 65 20 65 78 63 65 65 64   If we've exceed
4d70: 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73  ed the command's
4d80: 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20 75   timeout, give u
4d90: 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20 65  p and throw an e
4da0: 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
4db0: 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76 69    if ((uint)Envi
4dc0: 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e  ronment.TickCoun
4dd0: 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e 20  t - starttick > 
4de0: 74 69 6d 65 6f 75 74 29 0d 0a 20 20 20 20 20 20  timeout)..      
4df0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4e00: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
4e10: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
4e20: 28 72 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (r, GetLastError
4e30: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
4e40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
4e50: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
4e60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4e70: 20 20 20 20 2f 2f 20 4f 74 68 65 72 77 69 73 65      // Otherwise
4e80: 20 73 6c 65 65 70 20 66 6f 72 20 61 20 72 61 6e   sleep for a ran
4e90: 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69  dom amount of ti
4ea0: 6d 65 20 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a  me up to 150ms..
4eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
4ec0: 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54  stem.Threading.T
4ed0: 68 72 65 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e  hread.Sleep(rnd.
4ee0: 4e 65 78 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a  Next(1, 150));..
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4f00: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4f10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
4f20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
4f30: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
4f40: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52  QLiteErrorCode R
4f50: 65 73 65 74 28 53 51 4c 69 74 65 53 74 61 74 65  eset(SQLiteState
4f60: 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20  ment stmt)..    
4f70: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
4f80: 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23  rrorCode n;....#
4f90: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
4fa0: 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  ARD..      n = U
4fb0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4fc0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74  ds.sqlite3_reset
4fd0: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
4fe0: 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65  qlite_stmt);..#e
4ff0: 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  lse..      n = U
5000: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
5010: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74  ds.sqlite3_reset
5020: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
5030: 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  mt);..#endif....
5040: 20 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20        // If the 
5050: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 64 2c 20  schema changed, 
5060: 74 72 79 20 61 6e 64 20 72 65 2d 70 72 65 70 61  try and re-prepa
5070: 72 65 20 69 74 0d 0a 20 20 20 20 20 20 69 66 20  re it..      if 
5080: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
5090: 72 43 6f 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20  rCode.Schema).. 
50a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
50b0: 2f 2f 20 52 65 63 72 65 61 74 65 20 61 20 64 75  // Recreate a du
50c0: 6d 6d 79 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20  mmy statement.. 
50d0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74         string st
50e0: 72 3b 0d 0a 20 20 20 20 20 20 20 20 75 73 69 6e  r;..        usin
50f0: 67 20 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  g (SQLiteStateme
5100: 6e 74 20 74 6d 70 20 3d 20 50 72 65 70 61 72 65  nt tmp = Prepare
5110: 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73 71 6c  (null, stmt._sql
5120: 53 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c 6c 2c  Statement, null,
5130: 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f   (uint)(stmt._co
5140: 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69  mmand._commandTi
5150: 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 2c 20 6f  meout * 1000), o
5160: 75 74 20 73 74 72 29 29 0d 0a 20 20 20 20 20 20  ut str))..      
5170: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
5180: 2f 20 46 69 6e 61 6c 69 7a 65 20 74 68 65 20 65  / Finalize the e
5190: 78 69 73 74 69 6e 67 20 73 74 61 74 65 6d 65 6e  xisting statemen
51a0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d  t..          stm
51b0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2e 44  t._sqlite_stmt.D
51c0: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
51d0: 20 20 20 20 20 2f 2f 20 52 65 61 73 73 69 67 6e       // Reassign
51e0: 20 61 20 6e 65 77 20 73 74 61 74 65 6d 65 6e 74   a new statement
51f0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
5200: 6f 6c 64 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  old statement an
5210: 64 20 63 6c 65 61 72 20 74 68 65 20 74 65 6d 70  d clear the temp
5220: 6f 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20 20 20  orary one..     
5230: 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74       stmt._sqlit
5240: 65 5f 73 74 6d 74 20 3d 20 74 6d 70 2e 5f 73 71  e_stmt = tmp._sq
5250: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20  lite_stmt;..    
5260: 20 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c 69 74        tmp._sqlit
5270: 65 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a  e_stmt = null;..
5280: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52  ..          // R
5290: 65 61 70 70 6c 79 20 70 61 72 61 6d 65 74 65 72  eapply parameter
52a0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d  s..          stm
52b0: 74 2e 42 69 6e 64 50 61 72 61 6d 65 74 65 72 73  t.BindParameters
52c0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ();..        }..
52d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
52e0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 55  QLiteErrorCode.U
52f0: 6e 6b 6e 6f 77 6e 3b 20 2f 2f 20 52 65 73 65 74  nknown; // Reset
5300: 20 77 61 73 20 4f 4b 2c 20 77 69 74 68 20 73 63   was OK, with sc
5310: 68 65 6d 61 20 63 68 61 6e 67 65 0d 0a 20 20 20  hema change..   
5320: 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65     }..      else
5330: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
5340: 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64  ErrorCode.Locked
5350: 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45   || n == SQLiteE
5360: 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a  rrorCode.Busy)..
5370: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
5380: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
5390: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
53a0: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
53b0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
53c0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
53d0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
53e0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e  ..      return n
53f0: 3b 20 2f 2f 20 57 65 20 72 65 73 65 74 20 4f 4b  ; // We reset OK
5400: 2c 20 6e 6f 20 73 63 68 65 6d 61 20 63 68 61 6e  , no schema chan
5410: 67 65 73 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ges..    }....  
5420: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
5430: 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 4c 61  ide string GetLa
5440: 73 74 45 72 72 6f 72 28 29 0d 0a 20 20 20 20 7b  stError()..    {
5450: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ..      return S
5460: 51 4c 69 74 65 42 61 73 65 2e 47 65 74 4c 61 73  QLiteBase.GetLas
5470: 74 45 72 72 6f 72 28 5f 73 71 6c 2c 20 5f 73 71  tError(_sql, _sq
5480: 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
5490: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
54a0: 69 64 65 20 53 51 4c 69 74 65 53 74 61 74 65 6d  ide SQLiteStatem
54b0: 65 6e 74 20 50 72 65 70 61 72 65 28 53 51 4c 69  ent Prepare(SQLi
54c0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e  teConnection cnn
54d0: 2c 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c 2c  , string strSql,
54e0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
54f0: 20 70 72 65 76 69 6f 75 73 2c 20 75 69 6e 74 20   previous, uint 
5500: 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20 73  timeoutMS, out s
5510: 74 72 69 6e 67 20 73 74 72 52 65 6d 61 69 6e 29  tring strRemain)
5520: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
5530: 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
5540: 6c 4f 72 45 6d 70 74 79 28 73 74 72 53 71 6c 29  lOrEmpty(strSql)
5550: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
5560: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5570: 2f 2f 20 4e 4f 54 45 3a 20 53 51 4c 69 74 65 20  // NOTE: SQLite 
5580: 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
5590: 20 74 68 65 20 63 6f 6e 63 65 70 74 20 6f 66 20   the concept of 
55a0: 73 65 70 61 72 61 74 65 20 73 63 68 65 6d 61 73  separate schemas
55b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
55c0: 20 20 20 69 6e 20 6f 6e 65 20 64 61 74 61 62 61     in one databa
55d0: 73 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72  se; therefore, r
55e0: 65 6d 6f 76 65 20 74 68 65 20 62 61 73 65 20 73  emove the base s
55f0: 63 68 65 6d 61 20 6e 61 6d 65 0d 0a 20 20 20 20  chema name..    
5600: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 73 65      //       use
5610: 64 20 74 6f 20 73 6d 6f 6f 74 68 20 69 6e 74 65  d to smooth inte
5620: 67 72 61 74 69 6f 6e 20 77 69 74 68 20 74 68 65  gration with the
5630: 20 62 61 73 65 20 2e 4e 45 54 20 46 72 61 6d 65   base .NET Frame
5640: 77 6f 72 6b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  work..        //
5650: 20 20 20 20 20 20 20 64 61 74 61 20 63 6c 61 73         data clas
5660: 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ses...        //
5670: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
5680: 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20   baseSchemaName 
5690: 3d 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20  = (cnn != null) 
56a0: 3f 20 63 6e 6e 2e 5f 62 61 73 65 53 63 68 65 6d  ? cnn._baseSchem
56b0: 61 4e 61 6d 65 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d  aName : null;...
56c0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74  .        if (!St
56d0: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
56e0: 74 79 28 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  ty(baseSchemaNam
56f0: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  e))..        {..
5700: 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c            strSql
5710: 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63   = strSql.Replac
5720: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
5730: 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
5740: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
5750: 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  riantCulture,.. 
5760: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5b 7b               "[{
5770: 30 7d 5d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d  0}].", baseSchem
5780: 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45  aName), String.E
5790: 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mpty);....      
57a0: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
57b0: 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20  Sql.Replace(..  
57c0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
57d0: 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72  ng.Format(Cultur
57e0: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
57f0: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
5800: 20 20 20 20 20 20 20 22 7b 30 7d 2e 22 2c 20 62         "{0}.", b
5810: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20  aseSchemaName), 
5820: 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
5830: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5840: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69   }....      SQLi
5850: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
5860: 73 20 66 6c 61 67 73 20 3d 0d 0a 20 20 20 20 20  s flags =..     
5870: 20 20 20 20 20 28 63 6e 6e 20 21 3d 20 6e 75 6c       (cnn != nul
5880: 6c 29 20 3f 20 63 6e 6e 2e 46 6c 61 67 73 20 3a  l) ? cnn.Flags :
5890: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
58a0: 6e 46 6c 61 67 73 2e 44 65 66 61 75 6c 74 3b 0d  nFlags.Default;.
58b0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 28 66 6c  ...      if ((fl
58c0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
58d0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50  ectionFlags.LogP
58e0: 72 65 70 61 72 65 29 20 3d 3d 20 53 51 4c 69 74  repare) == SQLit
58f0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5900: 2e 4c 6f 67 50 72 65 70 61 72 65 29 0d 0a 20 20  .LogPrepare)..  
5910: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5920: 20 69 66 20 28 28 73 74 72 53 71 6c 20 3d 3d 20   if ((strSql == 
5930: 6e 75 6c 6c 29 20 7c 7c 20 28 73 74 72 53 71 6c  null) || (strSql
5940: 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 20 7c 7c  .Length == 0) ||
5950: 20 28 73 74 72 53 71 6c 2e 54 72 69 6d 28 29 2e   (strSql.Trim().
5960: 4c 65 6e 67 74 68 20 3d 3d 20 30 29 29 0d 0a 20  Length == 0)).. 
5970: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
5980: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
5990: 65 28 22 50 72 65 70 61 72 69 6e 67 20 7b 3c 6e  e("Preparing {<n
59a0: 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a  othing>}...");..
59b0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
59c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
59d0: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
59e0: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
59f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5a00: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
5a10: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
5a20: 20 22 50 72 65 70 61 72 69 6e 67 20 7b 7b 7b 30   "Preparing {{{0
5a30: 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72 53 71 6c 29  }}}...", strSql)
5a40: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  );..      }.... 
5a50: 20 20 20 20 20 49 6e 74 50 74 72 20 73 74 6d 74       IntPtr stmt
5a60: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
5a70: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74  .      IntPtr pt
5a80: 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
5a90: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
5aa0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  = 0;..      SQLi
5ab0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
5ac0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
5ad0: 53 63 68 65 6d 61 3b 0d 0a 20 20 20 20 20 20 69  Schema;..      i
5ae0: 6e 74 20 72 65 74 72 69 65 73 20 3d 20 30 3b 0d  nt retries = 0;.
5af0: 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20  .      byte[] b 
5b00: 3d 20 54 6f 55 54 46 38 28 73 74 72 53 71 6c 29  = ToUTF8(strSql)
5b10: 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ;..      string 
5b20: 74 79 70 65 64 65 66 73 20 3d 20 6e 75 6c 6c 3b  typedefs = null;
5b30: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53 74  ..      SQLiteSt
5b40: 61 74 65 6d 65 6e 74 20 63 6d 64 20 3d 20 6e 75  atement cmd = nu
5b50: 6c 6c 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f  ll;..      Rando
5b60: 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  m rnd = null;.. 
5b70: 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74 74       uint startt
5b80: 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69  ick = (uint)Envi
5b90: 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e  ronment.TickCoun
5ba0: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 47 43 48 61  t;....      GCHa
5bb0: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 47 43  ndle handle = GC
5bc0: 48 61 6e 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20  Handle.Alloc(b, 
5bd0: 47 43 48 61 6e 64 6c 65 54 79 70 65 2e 50 69 6e  GCHandleType.Pin
5be0: 6e 65 64 29 3b 0d 0a 20 20 20 20 20 20 49 6e 74  ned);..      Int
5bf0: 50 74 72 20 70 73 71 6c 20 3d 20 68 61 6e 64 6c  Ptr psql = handl
5c00: 65 2e 41 64 64 72 4f 66 50 69 6e 6e 65 64 4f 62  e.AddrOfPinnedOb
5c10: 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 53  ject();..      S
5c20: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
5c30: 6e 64 6c 65 20 73 74 61 74 65 6d 65 6e 74 48 61  ndle statementHa
5c40: 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  ndle = null;..  
5c50: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 7b      try..      {
5c60: 0d 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20  ..        while 
5c70: 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
5c80: 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 20 7c 7c  orCode.Schema ||
5c90: 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   n == SQLiteErro
5ca0: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
5cb0: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
5cc0: 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20 72 65  Code.Busy) && re
5cd0: 74 72 69 65 73 20 3c 20 33 29 0d 0a 20 20 20 20  tries < 3)..    
5ce0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5cf0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
5d00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
5d10: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
5d20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5d30: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a        finally /*
5d40: 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62   NOTE: Thread.Ab
5d50: 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e  ort() protection
5d60: 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  . */..          
5d70: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
5d80: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
5d90: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
5da0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5db0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74  ite3_prepare_int
5dc0: 65 72 6f 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c  erop(_sql, psql,
5dd0: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f   b.Length - 1, o
5de0: 75 74 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72  ut stmt, out ptr
5df0: 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c  , out len);..#el
5e00: 73 65 0d 0a 23 69 66 20 55 53 45 5f 50 52 45 50  se..#if USE_PREP
5e10: 41 52 45 5f 56 32 0d 0a 20 20 20 20 20 20 20 20  ARE_V2..        
5e20: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
5e30: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
5e40: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 5f  te3_prepare_v2(_
5e50: 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e  sql, psql, b.Len
5e60: 67 74 68 20 2d 20 31 2c 20 6f 75 74 20 73 74 6d  gth - 1, out stm
5e70: 74 2c 20 6f 75 74 20 70 74 72 29 3b 0d 0a 23 65  t, out ptr);..#e
5e80: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
5e90: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
5ea0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
5eb0: 5f 70 72 65 70 61 72 65 28 5f 73 71 6c 2c 20 70  _prepare(_sql, p
5ec0: 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  sql, b.Length - 
5ed0: 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75 74  1, out stmt, out
5ee0: 20 70 74 72 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a   ptr);..#endif..
5ef0: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20              len 
5f00: 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  = -1;..#endif...
5f10: 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
5f20: 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 53 54  T_20 && TRACE_ST
5f30: 41 54 45 4d 45 4e 54 0d 0a 20 20 20 20 20 20 20  ATEMENT..       
5f40: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
5f50: 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Line(String.Form
5f60: 61 74 28 22 50 72 65 70 61 72 65 20 28 7b 30 7d  at("Prepare ({0}
5f70: 29 3a 20 7b 31 7d 22 2c 20 6e 2c 20 73 74 6d 74  ): {1}", n, stmt
5f80: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  ));..#endif.... 
5f90: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
5fa0: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
5fb0: 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 73 74 6d  Code.Ok) && (stm
5fc0: 74 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  t != IntPtr.Zero
5fd0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
5fe0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5ff0: 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61   if (statementHa
6000: 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 73 74  ndle != null) st
6010: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2e 44 69  atementHandle.Di
6020: 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  spose();..      
6030: 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
6040: 74 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51  tHandle = new SQ
6050: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
6060: 64 6c 65 28 5f 73 71 6c 2c 20 73 74 6d 74 29 3b  dle(_sql, stmt);
6070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6080: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
6090: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
60a0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d  atementHandle !=
60b0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
60c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
60d0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
60e0: 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c  n.OnChanged(null
60f0: 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e  , new Connection
6100: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
6110: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
6120: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
6130: 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48  ype.NewCriticalH
6140: 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c  andle, null, nul
6150: 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
6160: 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 73 74    null, null, st
6170: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73  atementHandle, s
6180: 74 72 53 71 6c 2c 20 6e 65 77 20 6f 62 6a 65 63  trSql, new objec
6190: 74 5b 5d 20 7b 20 63 6e 6e 2c 0d 0a 20 20 20 20  t[] { cnn,..    
61a0: 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c            strSql
61b0: 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65  , previous, time
61c0: 6f 75 74 4d 53 20 7d 29 29 3b 0d 0a 20 20 20 20  outMS }));..    
61d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
61e0: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
61f0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63  LiteErrorCode.Sc
6200: 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 20 20 20  hema)..         
6210: 20 20 20 72 65 74 72 69 65 73 2b 2b 3b 0d 0a 20     retries++;.. 
6220: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
6230: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
6240: 6f 72 43 6f 64 65 2e 45 72 72 6f 72 29 0d 0a 20  orCode.Error).. 
6250: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6260: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
6270: 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c 61  ng.Compare(GetLa
6280: 73 74 45 72 72 6f 72 28 29 2c 20 22 6e 65 61 72  stError(), "near
6290: 20 5c 22 54 59 50 45 53 5c 22 3a 20 73 79 6e 74   \"TYPES\": synt
62a0: 61 78 20 65 72 72 6f 72 22 2c 20 53 74 72 69 6e  ax error", Strin
62b0: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
62c0: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
62d0: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
62e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
62f0: 20 20 20 69 6e 74 20 70 6f 73 20 3d 20 73 74 72     int pos = str
6300: 53 71 6c 2e 49 6e 64 65 78 4f 66 28 27 3b 27 29  Sql.IndexOf(';')
6310: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6320: 20 69 66 20 28 70 6f 73 20 3d 3d 20 2d 31 29 20   if (pos == -1) 
6330: 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 4c 65 6e  pos = strSql.Len
6340: 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20  gth - 1;....    
6350: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 64 65            typede
6360: 66 73 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73  fs = strSql.Subs
6370: 74 72 69 6e 67 28 30 2c 20 70 6f 73 20 2b 20 31  tring(0, pos + 1
6380: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6390: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71    strSql = strSq
63a0: 6c 2e 53 75 62 73 74 72 69 6e 67 28 70 6f 73 20  l.Substring(pos 
63b0: 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  + 1);....       
63c0: 20 20 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e         strRemain
63d0: 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20 20 20 20 20   = "";....      
63e0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 63          while (c
63f0: 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74  md == null && st
6400: 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29  rSql.Length > 0)
6410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6420: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6430: 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65     cmd = Prepare
6440: 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72  (cnn, strSql, pr
6450: 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d  evious, timeoutM
6460: 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61 69 6e  S, out strRemain
6470: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6480: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
6490: 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20  Remain;..       
64a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
64b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6d            if (cm
64c0: 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  d != null)..    
64d0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e              cmd.
64e0: 53 65 74 54 79 70 65 73 28 74 79 70 65 64 65 66  SetTypes(typedef
64f0: 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  s);....         
6500: 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b       return cmd;
6510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6520: 0a 23 69 66 20 28 4e 45 54 5f 33 35 20 7c 7c 20  .#if (NET_35 || 
6530: 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35  NET_40 || NET_45
6540: 29 20 26 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43  ) && !PLATFORM_C
6550: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
6560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
6570: 65 20 69 66 20 28 5f 62 75 69 6c 64 69 6e 67 53  e if (_buildingS
6580: 63 68 65 6d 61 20 3d 3d 20 66 61 6c 73 65 20 26  chema == false &
6590: 26 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65  & String.Compare
65a0: 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c  (GetLastError(),
65b0: 20 30 2c 20 22 6e 6f 20 73 75 63 68 20 74 61 62   0, "no such tab
65c0: 6c 65 3a 20 54 45 4d 50 2e 53 43 48 45 4d 41 22  le: TEMP.SCHEMA"
65d0: 2c 20 30 2c 20 32 36 2c 20 53 74 72 69 6e 67 43  , 0, 26, StringC
65e0: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
65f0: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20  lIgnoreCase) == 
6600: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
6610: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6620: 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b   strRemain = "";
6630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6640: 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20  _buildingSchema 
6650: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
6660: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
6670: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6680: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 53 51               ISQ
6690: 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73  LiteSchemaExtens
66a0: 69 6f 6e 73 20 65 78 74 20 3d 20 28 28 49 53 65  ions ext = ((ISe
66b0: 72 76 69 63 65 50 72 6f 76 69 64 65 72 29 53 51  rviceProvider)SQ
66c0: 4c 69 74 65 46 61 63 74 6f 72 79 2e 49 6e 73 74  LiteFactory.Inst
66d0: 61 6e 63 65 29 2e 47 65 74 53 65 72 76 69 63 65  ance).GetService
66e0: 28 74 79 70 65 6f 66 28 49 53 51 4c 69 74 65 53  (typeof(ISQLiteS
66f0: 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 29  chemaExtensions)
6700: 29 20 61 73 20 49 53 51 4c 69 74 65 53 63 68 65  ) as ISQLiteSche
6710: 6d 61 45 78 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d  maExtensions;...
6720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6730: 20 69 66 20 28 65 78 74 20 21 3d 20 6e 75 6c 6c   if (ext != null
6740: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6750: 20 20 20 20 20 65 78 74 2e 42 75 69 6c 64 54 65       ext.BuildTe
6760: 6d 70 53 63 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a  mpSchema(cnn);..
6770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6780: 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20    while (cmd == 
6790: 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c  null && strSql.L
67a0: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
67b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
67c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67d0: 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63   cmd = Prepare(c
67e0: 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76  nn, strSql, prev
67f0: 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c  ious, timeoutMS,
6800: 20 6f 75 74 20 73 74 72 52 65 6d 61 69 6e 29 3b   out strRemain);
6810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6820: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
6830: 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20  Remain;..       
6840: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
6850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6860: 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20  turn cmd;..     
6870: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6880: 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
6890: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
68a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
68b0: 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68      _buildingSch
68c0: 65 6d 61 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  ema = false;..  
68d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
68e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
68f0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
6900: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  }..          els
6910: 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
6920: 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65  eErrorCode.Locke
6930: 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65  d || n == SQLite
6940: 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20  ErrorCode.Busy) 
6950: 2f 2f 20 4c 6f 63 6b 65 64 20 2d 2d 20 64 65 6c  // Locked -- del
6960: 61 79 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ay a small amoun
6970: 74 20 62 65 66 6f 72 65 20 72 65 74 72 79 69 6e  t before retryin
6980: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  g..          {..
6990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b              // K
69a0: 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20  eep trying..    
69b0: 20 20 20 20 20 20 20 20 69 66 20 28 72 6e 64 20          if (rnd 
69c0: 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73  == null) // Firs
69d0: 74 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63  t time we've enc
69e0: 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63  ountered the loc
69f0: 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  k..             
6a00: 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f   rnd = new Rando
6a10: 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  m();....        
6a20: 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20      // If we've 
6a30: 65 78 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d  exceeded the com
6a40: 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20  mand's timeout, 
6a50: 67 69 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f  give up and thro
6a60: 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20  w an error..    
6a70: 20 20 20 20 20 20 20 20 69 66 20 28 28 75 69 6e          if ((uin
6a80: 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69  t)Environment.Ti
6a90: 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74  ckCount - startt
6aa0: 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 4d 53 29  ick > timeoutMS)
6ab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
6ac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
6ad0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
6ae0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
6af0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
6b00: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6b10: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
6b20: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6b30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f              // O
6b40: 74 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66  therwise sleep f
6b50: 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75  or a random amou
6b60: 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f  nt of time up to
6b70: 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20   150ms..        
6b80: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72        System.Thr
6b90: 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c  eading.Thread.Sl
6ba0: 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20  eep(rnd.Next(1, 
6bb0: 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  150));..        
6bc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6bd0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
6be0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
6bf0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
6c00: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
6c10: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
6c20: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
6c30: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  ));....        s
6c40: 74 72 52 65 6d 61 69 6e 20 3d 20 55 54 46 38 54  trRemain = UTF8T
6c50: 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e  oString(ptr, len
6c60: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
6c70: 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c   (statementHandl
6c80: 65 20 21 3d 20 6e 75 6c 6c 29 20 63 6d 64 20 3d  e != null) cmd =
6c90: 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74 65   new SQLiteState
6ca0: 6d 65 6e 74 28 74 68 69 73 2c 20 66 6c 61 67 73  ment(this, flags
6cb0: 2c 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  , statementHandl
6cc0: 65 2c 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72  e, strSql.Substr
6cd0: 69 6e 67 28 30 2c 20 73 74 72 53 71 6c 2e 4c 65  ing(0, strSql.Le
6ce0: 6e 67 74 68 20 2d 20 73 74 72 52 65 6d 61 69 6e  ngth - strRemain
6cf0: 2e 4c 65 6e 67 74 68 29 2c 20 70 72 65 76 69 6f  .Length), previo
6d00: 75 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  us);....        
6d10: 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20  return cmd;..   
6d20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 66 69 6e 61     }..      fina
6d30: 6c 6c 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  lly..      {..  
6d40: 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 46 72 65        handle.Fre
6d50: 65 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  e();..      }.. 
6d60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74     }....    prot
6d70: 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69  ected static voi
6d80: 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65  d LogBind(SQLite
6d90: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
6da0: 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65  handle, int inde
6db0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
6dc0: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
6dd0: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
6de0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
6df0: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
6e00: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
6e10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c  .            Cul
6e20: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
6e30: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
6e40: 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73        "Binding s
6e50: 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72  tatement {0} par
6e60: 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 4e 55  amter #{1} as NU
6e70: 4c 4c 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  LL...",..       
6e80: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
6e90: 72 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20  r, index));..   
6ea0: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63   }....    protec
6eb0: 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20  ted static void 
6ec0: 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74  LogBind(SQLiteSt
6ed0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
6ee0: 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c  ndle, int index,
6ef0: 20 56 61 6c 75 65 54 79 70 65 20 76 61 6c 75 65   ValueType value
6f00: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
6f10: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
6f20: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
6f30: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
6f40: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
6f50: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
6f60: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
6f70: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
6f80: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
6f90: 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74   as type {2} wit
6fa0: 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e  h value {{{3}}}.
6fb0: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
6fc0: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
6fd0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 2e 47 65 74  index, value.Get
6fe0: 54 79 70 65 28 29 2c 20 76 61 6c 75 65 29 29 3b  Type(), value));
6ff0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
7000: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
7010: 72 69 6e 67 20 46 6f 72 6d 61 74 44 61 74 65 54  ring FormatDateT
7020: 69 6d 65 28 44 61 74 65 54 69 6d 65 20 76 61 6c  ime(DateTime val
7030: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
7040: 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
7050: 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  r result = new S
7060: 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d  tringBuilder();.
7070: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c  ...        resul
7080: 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54  t.Append(value.T
7090: 6f 53 74 72 69 6e 67 28 22 79 79 79 79 2d 4d 4d  oString("yyyy-MM
70a0: 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46 46 46  -ddTHH:mm:ss.FFF
70b0: 46 46 46 46 4b 22 29 29 3b 0d 0a 20 20 20 20 20  FFFFK"));..     
70c0: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
70d0: 28 27 20 27 29 3b 0d 0a 20 20 20 20 20 20 20 20  (' ');..        
70e0: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61  result.Append(va
70f0: 6c 75 65 2e 4b 69 6e 64 29 3b 0d 0a 20 20 20 20  lue.Kind);..    
7100: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
7110: 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20 20 20  d(' ');..       
7120: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76   result.Append(v
7130: 61 6c 75 65 2e 54 69 63 6b 73 29 3b 0d 0a 0d 0a  alue.Ticks);....
7140: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
7150: 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29  esult.ToString()
7160: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
7170: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
7180: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
7190: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
71a0: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
71b0: 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20  index, DateTime 
71c0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
71d0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
71e0: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
71f0: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
7200: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
7210: 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  sage(String.Form
7220: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
7230: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
7240: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
7250: 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32   #{1} as type {2
7260: 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b  } with value {{{
7270: 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  3}}}...",..     
7280: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74         handleInt
7290: 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65  Ptr, index, type
72a0: 6f 66 28 44 61 74 65 54 69 6d 65 29 2c 20 46 6f  of(DateTime), Fo
72b0: 72 6d 61 74 44 61 74 65 54 69 6d 65 28 76 61 6c  rmatDateTime(val
72c0: 75 65 29 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ue)));..    }...
72d0: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
72e0: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
72f0: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
7300: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
7310: 20 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69   int index, stri
7320: 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
7330: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
7340: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
7350: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
7360: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
7370: 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46  Message(String.F
7380: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
7390: 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61      "Binding sta
73a0: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
73b0: 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65  ter #{1} as type
73c0: 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20   {2} with value 
73d0: 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20  {{{3}}}...",..  
73e0: 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65            handle
73f0: 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74  IntPtr, index, t
7400: 79 70 65 6f 66 28 53 74 72 69 6e 67 29 2c 20 28  ypeof(String), (
7410: 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f  value != null) ?
7420: 20 76 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c 3e   value : "<null>
7430: 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  "));..    }.... 
7440: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
7450: 63 20 73 74 72 69 6e 67 20 54 6f 48 65 78 61 64  c string ToHexad
7460: 65 63 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a 20  ecimalString(.. 
7470: 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 61 72         byte[] ar
7480: 72 61 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ray..        )..
7490: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
74a0: 66 20 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c  f (array == null
74b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
74c0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
74d0: 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69         StringBui
74e0: 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65  lder result = ne
74f0: 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28  w StringBuilder(
7500: 61 72 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20 32  array.Length * 2
7510: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e  );....        in
7520: 74 20 6c 65 6e 67 74 68 20 3d 20 61 72 72 61 79  t length = array
7530: 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  .Length;....    
7540: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64      for (int ind
7550: 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20  ex = 0; index < 
7560: 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29  length; index++)
7570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
7580: 73 75 6c 74 2e 41 70 70 65 6e 64 28 61 72 72 61  sult.Append(arra
7590: 79 5b 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69 6e  y[index].ToStrin
75a0: 67 28 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20 20  g("x2"));....   
75b0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
75c0: 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  lt.ToString();..
75d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f      }....    pro
75e0: 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f  tected static vo
75f0: 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74  id LogBind(SQLit
7600: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
7610: 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64   handle, int ind
7620: 65 78 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65  ex, byte[] value
7630: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7640: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
7650: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
7660: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
7670: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
7680: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
7690: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
76a0: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
76b0: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
76c0: 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74   as type {2} wit
76d0: 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e  h value {{{3}}}.
76e0: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
76f0: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
7700: 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 42 79  index, typeof(By
7710: 74 65 5b 5d 29 2c 20 28 76 61 6c 75 65 20 21 3d  te[]), (value !=
7720: 20 6e 75 6c 6c 29 20 3f 20 54 6f 48 65 78 61 64   null) ? ToHexad
7730: 65 63 69 6d 61 6c 53 74 72 69 6e 67 28 76 61 6c  ecimalString(val
7740: 75 65 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29  ue) : "<null>"))
7750: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
7760: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
7770: 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 6f 75 62  e void Bind_Doub
7780: 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  le(SQLiteStateme
7790: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
77a0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
77b0: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
77c0: 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a   double value)..
77d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
77e0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
77f0: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
7800: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
7810: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
7820: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
7830: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
7840: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
7850: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7860: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
7870: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7880: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
7890: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
78a0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23  ..        }....#
78b0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
78c0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
78d0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
78e0: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
78f0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7900: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
7910: 6c 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  le(handle, index
7920: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66  , value);..#elif
7930: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
7940: 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  D..        SQLit
7950: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
7960: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
7970: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
7980: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68  double_interop(h
7990: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
79a0: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  f value);..#else
79b0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
79c0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
79d0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
79e0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
79f0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
7a00: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
7a10: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
7a20: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
7a30: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
7a40: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
7a50: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
7a60: 42 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69 74  Bind_Int32(SQLit
7a70: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
7a80: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7a90: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
7aa0: 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 76 61 6c  t index, int val
7ab0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
7ac0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
7ad0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
7ae0: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
7af0: 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  stmt;....       
7b00: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
7b10: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7b20: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
7b30: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7b40: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
7b50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7b60: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
7b70: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
7b80: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
7b90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
7ba0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
7bb0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7bc0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
7bd0: 5f 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64  _int(handle, ind
7be0: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
7bf0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
7c00: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
7c10: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
7c20: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
7c30: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
7c40: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
7c50: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
7c60: 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 33 32  void Bind_UInt32
7c70: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
7c80: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
7c90: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
7ca0: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75  gs, int index, u
7cb0: 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  int value)..    
7cc0: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
7cd0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
7ce0: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
7cf0: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
7d00: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
7d10: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
7d20: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
7d30: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
7d40: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
7d50: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
7d60: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
7d70: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
7d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
7d90: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
7da0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
7db0: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
7dc0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
7dd0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d  eErrorCode n;...
7de0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
7df0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
7e00: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64  ectionFlags.Bind
7e10: 55 49 6e 74 33 32 41 73 49 6e 74 36 34 29 20 3d  UInt32AsInt64) =
7e20: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7e30: 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74  onFlags.BindUInt
7e40: 33 32 41 73 49 6e 74 36 34 29 0d 0a 20 20 20 20  32AsInt64)..    
7e50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7e60: 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 32 20 3d     long value2 =
7e70: 20 76 61 6c 75 65 3b 0d 0a 0d 0a 23 69 66 20 21   value;....#if !
7e80: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
7e90: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
7ea0: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
7eb0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7ec0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
7ed0: 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  4(handle, index,
7ee0: 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 69 66   value2);..#elif
7ef0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
7f00: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  D..            n
7f10: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7f20: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
7f30: 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ind_int64_intero
7f40: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
7f50: 20 72 65 66 20 76 61 6c 75 65 32 29 3b 0d 0a 23   ref value2);..#
7f60: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
7f70: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
7f80: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
7f90: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
7fa0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7fb0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
7fc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7fd0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
7fe0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7ff0: 62 69 6e 64 5f 75 69 6e 74 28 68 61 6e 64 6c 65  bind_uint(handle
8000: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
8010: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
8020: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
8030: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
8040: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
8050: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
8060: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
8070: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
8080: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
8090: 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74 36 34 28  void Bind_Int64(
80a0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
80b0: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
80c0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
80d0: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 6c 6f  s, int index, lo
80e0: 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
80f0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
8100: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
8110: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
8120: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23  qlite_stmt;....#
8130: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
8140: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
8150: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
8160: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
8170: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
8180: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
8190: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
81a0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
81b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
81c0: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
81d0: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
81e0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
81f0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
8200: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
8210: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
8220: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e  3_bind_int64(han
8230: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
8240: 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
8250: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
8260: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
8270: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
8280: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8290: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f  ite3_bind_int64_
82a0: 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20  interop(handle, 
82b0: 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65  index, ref value
82c0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
82d0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
82e0: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
82f0: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
8300: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
8310: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
8320: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
8330: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
8340: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
8350: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
8360: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
8370: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49  ide void Bind_UI
8380: 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65  nt64(SQLiteState
8390: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
83a0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
83b0: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
83c0: 78 2c 20 75 6c 6f 6e 67 20 76 61 6c 75 65 29 0d  x, ulong value).
83d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
83e0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
83f0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
8400: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8410: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
8420: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
8430: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
8440: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
8450: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
8460: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
8470: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8480: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
8490: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
84a0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
84b0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
84c0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
84d0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
84e0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
84f0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8500: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e  sqlite3_bind_uin
8510: 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  t64(handle, inde
8520: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69  x, value);..#eli
8530: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
8540: 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  RD..        SQLi
8550: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
8560: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8570: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
8580: 5f 75 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  _uint64_interop(
8590: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
85a0: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
85b0: 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  e..        throw
85c0: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
85d0: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
85e0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
85f0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
8600: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
8610: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
8620: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
8630: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
8640: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
8650: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
8660: 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c 69 74   Bind_Text(SQLit
8670: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
8680: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8690: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
86a0: 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20  t index, string 
86b0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
86c0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
86d0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
86e0: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
86f0: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
8700: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
8710: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
8720: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
8730: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8740: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
8750: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
8760: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
8770: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
8780: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
8790: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
87a0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
87b0: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
87c0: 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20         byte[] b 
87d0: 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b  = ToUTF8(value);
87e0: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
87f0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
8800: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
8810: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
8820: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
8830: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
8840: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
8850: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
8860: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8870: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
8880: 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20  , index, b);..  
8890: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
88a0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
88b0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
88c0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
88d0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
88e0: 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64  text(handle, ind
88f0: 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20  ex, b, b.Length 
8900: 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31  - 1, (IntPtr)(-1
8910: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ));..        if 
8920: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
8930: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
8940: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
8950: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
8960: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
8970: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
8980: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
8990: 64 5f 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74  d_DateTime(SQLit
89a0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
89b0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
89c0: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
89d0: 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d  t index, DateTim
89e0: 65 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  e dt)..    {..  
89f0: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
8a00: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
8a10: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
8a20: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21  e_stmt;....#if !
8a30: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
8a40: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
8a50: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
8a60: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8a70: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
8a80: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
8a90: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
8aa0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
8ab0: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
8ac0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
8ad0: 64 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  dt);..        }.
8ae0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
8af0: 20 20 20 73 77 69 74 63 68 20 28 5f 64 61 74 65     switch (_date
8b00: 74 69 6d 65 46 6f 72 6d 61 74 29 0d 0a 20 20 20  timeFormat)..   
8b10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8b20: 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44      case SQLiteD
8b30: 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73  ateFormats.Ticks
8b40: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
8b50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8b60: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76            long v
8b70: 61 6c 75 65 20 3d 20 64 74 2e 54 69 63 6b 73 3b  alue = dt.Ticks;
8b80: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
8b90: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
8ba0: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
8bb0: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
8bc0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
8bd0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
8be0: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
8bf0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
8c00: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20  Bind)..         
8c10: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c30: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
8c40: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
8c50: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
8c60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c80: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
8c90: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
8ca0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8cb0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61  e3_bind_int64(ha
8cc0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
8cd0: 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
8ce0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d00: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
8d10: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
8d20: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
8d30: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74  3_bind_int64_int
8d40: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
8d50: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
8d60: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
8d70: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
8d80: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
8d90: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
8da0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
8db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8dc0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
8dd0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
8de0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
8df0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
8e00: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
8e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
8e20: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
8e30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8e40: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
8e50: 44 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69  DateFormats.Juli
8e60: 61 6e 44 61 79 3a 0d 0a 20 20 20 20 20 20 20 20  anDay:..        
8e70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
8e90: 6f 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 54 6f  ouble value = To
8ea0: 4a 75 6c 69 61 6e 44 61 79 28 64 74 29 3b 0d 0a  JulianDay(dt);..
8eb0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
8ec0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
8ed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8ee0: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
8ef0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
8f00: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
8f10: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
8f20: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
8f30: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nd)..           
8f40: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f60: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
8f70: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
8f80: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8f90: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fb0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8fc0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
8fd0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8fe0: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e  _bind_double(han
8ff0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
9000: 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
9010: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
9020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9030: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9040: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
9050: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9060: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74  _bind_double_int
9070: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
9080: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
9090: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
90b0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
90c0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
90d0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
90e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
90f0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
9100: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
9110: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
9120: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
9130: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
9140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
9150: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
9160: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9170: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
9180: 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78  DateFormats.Unix
9190: 45 70 6f 63 68 3a 0d 0a 20 20 20 20 20 20 20 20  Epoch:..        
91a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
91c0: 6f 6e 67 20 76 61 6c 75 65 20 3d 20 43 6f 6e 76  ong value = Conv
91d0: 65 72 74 2e 54 6f 49 6e 74 36 34 28 64 74 2e 53  ert.ToInt64(dt.S
91e0: 75 62 74 72 61 63 74 28 55 6e 69 78 45 70 6f 63  ubtract(UnixEpoc
91f0: 68 29 2e 54 6f 74 61 6c 53 65 63 6f 6e 64 73 29  h).TotalSeconds)
9200: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
9210: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
9220: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
9230: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c           if ((fl
9240: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
9250: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
9260: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
9270: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
9280: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
9290: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92b0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
92c0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
92d0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
92e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
92f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9300: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
9310: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
9320: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9330: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68  te3_bind_int64(h
9340: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
9350: 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
9360: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
9370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9380: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
9390: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
93a0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
93b0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e  e3_bind_int64_in
93c0: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
93d0: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
93e0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
93f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
9400: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
9410: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
9420: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9440: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
9450: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
9460: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
9470: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
9480: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
9490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
94a0: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  reak;..         
94b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
94c0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a        default:..
94d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
94f0: 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20         byte[] b 
9500: 3d 20 54 6f 55 54 46 38 28 64 74 29 3b 0d 0a 0d  = ToUTF8(dt);...
9510: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
9520: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
9530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9540: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
9550: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
9560: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
9570: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
9580: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
9590: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
95a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
95b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95c0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
95d0: 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20  e, index, b);.. 
95e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95f0: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
9600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9610: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
9620: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
9630: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9640: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61  te3_bind_text(ha
9650: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20  ndle, index, b, 
9660: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49  b.Length - 1, (I
9670: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
9680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9690: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
96a0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
96b0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
96c0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
96d0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
96e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96f0: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
9700: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
9710: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
9720: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
9730: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
9740: 5f 42 6c 6f 62 28 53 51 4c 69 74 65 53 74 61 74  _Blob(SQLiteStat
9750: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
9760: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
9770: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
9780: 65 78 2c 20 62 79 74 65 5b 5d 20 62 6c 6f 62 44  ex, byte[] blobD
9790: 61 74 61 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ata)..    {..   
97a0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
97b0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
97c0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
97d0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
97e0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
97f0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
9800: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
9810: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
9820: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
9830: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
9840: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
9850: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9860: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
9870: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
9880: 6c 6f 62 44 61 74 61 29 3b 0d 0a 20 20 20 20 20  lobData);..     
9890: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
98a0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
98b0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
98c0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
98d0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
98e0: 62 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  b(handle, index,
98f0: 20 62 6c 6f 62 44 61 74 61 2c 20 62 6c 6f 62 44   blobData, blobD
9900: 61 74 61 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74  ata.Length, (Int
9910: 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20  Ptr)(-1));..    
9920: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
9930: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
9940: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
9950: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
9960: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
9970: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
9980: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
9990: 6f 69 64 20 42 69 6e 64 5f 4e 75 6c 6c 28 53 51  oid Bind_Null(SQ
99a0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
99b0: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
99c0: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
99d0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
99e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
99f0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
9a00: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
9a10: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
9a20: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
9a30: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
9a40: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
9a50: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
9a60: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
9a70: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
9a80: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
9a90: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
9aa0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
9ab0: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
9ac0: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
9ad0: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
9ae0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
9af0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
9b00: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
9b10: 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 68  ite3_bind_null(h
9b20: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a  andle, index);..
9b30: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
9b40: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9b50: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
9b60: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
9b70: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
9b80: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
9b90: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
9ba0: 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61  de int Bind_Para
9bb0: 6d 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61  mCount(SQLiteSta
9bc0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
9bd0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
9be0: 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b  gs flags)..    {
9bf0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
9c00: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
9c10: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
9c20: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20  qlite_stmt;..   
9c30: 20 20 20 20 20 69 6e 74 20 76 61 6c 75 65 20 3d       int value =
9c40: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
9c50: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
9c60: 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e  d_parameter_coun
9c70: 74 28 68 61 6e 64 6c 65 29 3b 0d 0a 0d 0a 20 20  t(handle);....  
9c80: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
9c90: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
9ca0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
9cb0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
9cc0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
9cd0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
9ce0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
9cf0: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
9d00: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
9d10: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
9d20: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
9d30: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
9d50: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
9d60: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
9d70: 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61 74             "Stat
9d80: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
9d90: 65 72 20 63 6f 75 6e 74 20 69 73 20 7b 31 7d 2e  er count is {1}.
9da0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
9db0: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
9dc0: 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  , value));..    
9dd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9de0: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
9df0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
9e00: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
9e10: 74 72 69 6e 67 20 42 69 6e 64 5f 50 61 72 61 6d  tring Bind_Param
9e20: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
9e30: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
9e40: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
9e50: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
9e60: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
9e70: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
9e80: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
9e90: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
9ea0: 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 73 74  tmt;..        st
9eb0: 72 69 6e 67 20 6e 61 6d 65 3b 0d 0a 0d 0a 23 69  ring name;....#i
9ec0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
9ed0: 52 44 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  RD..        int 
9ee0: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 6e 61  len;..        na
9ef0: 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  me = UTF8ToStrin
9f00: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
9f10: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
9f20: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
9f30: 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  e_interop(handle
9f40: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e  , index, out len
9f50: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
9f60: 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20  .        name = 
9f70: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
9f80: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9f90: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
9fa0: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 68 61 6e  rameter_name(han
9fb0: 64 6c 65 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  dle, index), -1)
9fc0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
9fd0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
9fe0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
9ff0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
a000: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
a010: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
a020: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
a030: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
a040: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
a050: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
a060: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
a070: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72  g.LogMessage(Str
a080: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
a090: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
a0a0: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
a0b0: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
a0c0: 20 20 20 20 20 20 20 20 20 20 22 53 74 61 74 65            "State
a0d0: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
a0e0: 72 20 23 7b 31 7d 20 6e 61 6d 65 20 69 73 20 7b  r #{1} name is {
a0f0: 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20 20  {{2}}}.",..     
a100: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
a110: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
a120: 6e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20 20  name));..       
a130: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
a140: 74 75 72 6e 20 6e 61 6d 65 3b 0d 0a 20 20 20 20  turn name;..    
a150: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
a160: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42  l override int B
a170: 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78 28 53  ind_ParamIndex(S
a180: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
a190: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
a1a0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
a1b0: 2c 20 73 74 72 69 6e 67 20 70 61 72 61 6d 4e 61  , string paramNa
a1c0: 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  me)..    {..    
a1d0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
a1e0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
a1f0: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
a200: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69  stmt;..        i
a210: 6e 74 20 69 6e 64 65 78 20 3d 20 55 6e 73 61 66  nt index = Unsaf
a220: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a230: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
a240: 6d 65 74 65 72 5f 69 6e 64 65 78 28 68 61 6e 64  meter_index(hand
a250: 6c 65 2c 20 54 6f 55 54 46 38 28 70 61 72 61 6d  le, ToUTF8(param
a260: 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name));....     
a270: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
a280: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
a290: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
a2a0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
a2b0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
a2c0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
a2d0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
a2e0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
a2f0: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
a300: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
a310: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
a320: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
a330: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
a340: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
a350: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
a360: 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65          "Stateme
a370: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
a380: 69 6e 64 65 78 20 6f 66 20 6e 61 6d 65 20 7b 7b  index of name {{
a390: 7b 31 7d 7d 7d 20 69 73 20 23 7b 32 7d 2e 22 2c  {1}}} is #{2}.",
a3a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a3b0: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
a3c0: 70 61 72 61 6d 4e 61 6d 65 2c 20 69 6e 64 65 78  paramName, index
a3d0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
a3e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
a3f0: 20 69 6e 64 65 78 3b 0d 0a 20 20 20 20 7d 0d 0a   index;..    }..
a400: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
a410: 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75  verride int Colu
a420: 6d 6e 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74  mnCount(SQLiteSt
a430: 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20  atement stmt).. 
a440: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
a450: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
a460: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
a470: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73 74 6d 74  olumn_count(stmt
a480: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
a490: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
a4a0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
a4b0: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d  string ColumnNam
a4c0: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
a4d0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
a4e0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
a4f0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
a500: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
a510: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20  .      IntPtr p 
a520: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
a530: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
a540: 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  lumn_name_intero
a550: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
a560: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
a570: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
a580: 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55      IntPtr p = U
a590: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
a5a0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
a5b0: 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c  n_name(stmt._sql
a5c0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
a5d0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
a5e0: 20 69 66 20 28 70 20 3d 3d 20 49 6e 74 50 74 72   if (p == IntPtr
a5f0: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
a600: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
a610: 45 78 63 65 70 74 69 6f 6e 28 53 51 4c 69 74 65  Exception(SQLite
a620: 45 72 72 6f 72 43 6f 64 65 2e 4e 6f 4d 65 6d 2c  ErrorCode.NoMem,
a630: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
a640: 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ;..#if !SQLITE_S
a650: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 72  TANDARD..      r
a660: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
a670: 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  ng(p, len);..#el
a680: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
a690: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c   UTF8ToString(p,
a6a0: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   -1);..#endif.. 
a6b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
a6c0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54 79  rnal override Ty
a6d0: 70 65 41 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d  peAffinity Colum
a6e0: 6e 41 66 66 69 6e 69 74 79 28 53 51 4c 69 74 65  nAffinity(SQLite
a6f0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
a700: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
a710: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
a720: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a730: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
a740: 6d 6e 5f 74 79 70 65 28 73 74 6d 74 2e 5f 73 71  mn_type(stmt._sq
a750: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
a760: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
a770: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a780: 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
a790: 54 79 70 65 28 53 51 4c 69 74 65 53 74 61 74 65  Type(SQLiteState
a7a0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
a7b0: 6e 64 65 78 2c 20 6f 75 74 20 54 79 70 65 41 66  ndex, out TypeAf
a7c0: 66 69 6e 69 74 79 20 6e 41 66 66 69 6e 69 74 79  finity nAffinity
a7d0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
a7e0: 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66 20 21 53  int len;..#if !S
a7f0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
a800: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d        IntPtr p =
a810: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
a820: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
a830: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f 69 6e 74  umn_decltype_int
a840: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
a850: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
a860: 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ut len);..#else.
a870: 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b  .      len = -1;
a880: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
a890: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
a8a0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
a8b0: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73  olumn_decltype(s
a8c0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
a8d0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69  , index);..#endi
a8e0: 66 0d 0a 20 20 20 20 20 20 6e 41 66 66 69 6e 69  f..      nAffini
a8f0: 74 79 20 3d 20 43 6f 6c 75 6d 6e 41 66 66 69 6e  ty = ColumnAffin
a900: 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ity(stmt, index)
a910: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70  ;....      if (p
a920: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
a930: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
a940: 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20  ring(p, len);.. 
a950: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
a960: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69   {..        stri
a970: 6e 67 5b 5d 20 61 72 20 3d 20 73 74 6d 74 2e 54  ng[] ar = stmt.T
a980: 79 70 65 44 65 66 69 6e 69 74 69 6f 6e 73 3b 0d  ypeDefinitions;.
a990: 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72 20  .        if (ar 
a9a0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
a9b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69    {..          i
a9c0: 66 20 28 69 6e 64 65 78 20 3c 20 61 72 2e 4c 65  f (index < ar.Le
a9d0: 6e 67 74 68 20 26 26 20 61 72 5b 69 6e 64 65 78  ngth && ar[index
a9e0: 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  ] != null)..    
a9f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61          return a
aa00: 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20  r[index];..     
aa10: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65     }..        re
aa20: 74 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74  turn String.Empt
aa30: 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  y;....        //
aa40: 73 77 69 74 63 68 20 28 6e 41 66 66 69 6e 69 74  switch (nAffinit
aa50: 79 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7b 0d  y)..        //{.
aa60: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73  .        //  cas
aa70: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49  e TypeAffinity.I
aa80: 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 2f  nt64:..        /
aa90: 2f 20 20 20 20 72 65 74 75 72 6e 20 22 42 49 47  /    return "BIG
aaa0: 49 4e 54 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f  INT";..        /
aab0: 2f 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69  /  case TypeAffi
aac0: 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20  nity.Double:..  
aad0: 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75        //    retu
aae0: 72 6e 20 22 44 4f 55 42 4c 45 22 3b 0d 0a 20 20  rn "DOUBLE";..  
aaf0: 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54        //  case T
ab00: 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62  ypeAffinity.Blob
ab10: 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  :..        //   
ab20: 20 72 65 74 75 72 6e 20 22 42 4c 4f 42 22 3b 0d   return "BLOB";.
ab30: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 64 65 66  .        //  def
ab40: 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 2f  ault:..        /
ab50: 2f 20 20 20 20 72 65 74 75 72 6e 20 22 54 45 58  /    return "TEX
ab60: 54 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7d  T";..        //}
ab70: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
ab80: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
ab90: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f   override int Co
aba0: 6c 75 6d 6e 49 6e 64 65 78 28 53 51 4c 69 74 65  lumnIndex(SQLite
abb0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
abc0: 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d  string columnNam
abd0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
abe0: 20 69 6e 74 20 78 20 3d 20 43 6f 6c 75 6d 6e 43   int x = ColumnC
abf0: 6f 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20  ount(stmt);.... 
ac00: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20       for (int n 
ac10: 3d 20 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29  = 0; n < x; n++)
ac20: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
ac30: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f     if (String.Co
ac40: 6d 70 61 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65  mpare(columnName
ac50: 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d  , ColumnName(stm
ac60: 74 2c 20 6e 29 2c 20 53 74 72 69 6e 67 43 6f 6d  t, n), StringCom
ac70: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
ac80: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
ac90: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
aca0: 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  rn n;..      }..
acb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b        return -1;
acc0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
acd0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
ace0: 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72   string ColumnOr
acf0: 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51 4c 69 74  iginalName(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 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
ad30: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
ad40: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
ad50: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
ad60: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
ad70: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
ad80: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
ad90: 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  me_interop(stmt.
ada0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
adb0: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  dex, out len), l
adc0: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
add0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
ade0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
adf0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
ae00: 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
ae10: 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69  _name(stmt._sqli
ae20: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
ae30: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   -1);..#endif.. 
ae40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
ae50: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
ae60: 72 69 6e 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62  ring ColumnDatab
ae70: 61 73 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  aseName(SQLiteSt
ae80: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
ae90: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
aea0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
aeb0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
aec0: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74   len;..      ret
aed0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
aee0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
aef0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
af00: 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
af10: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
af20: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
af30: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
af40: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
af50: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
af60: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
af70: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
af80: 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
af90: 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c  e_name(stmt._sql
afa0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
afb0: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
afc0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
afd0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
afe0: 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c  tring ColumnTabl
aff0: 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eName(SQLiteStat
b000: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
b010: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
b020: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
b030: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
b040: 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  en;..      retur
b050: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
b060: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b070: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
b080: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74  n_table_name_int
b090: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
b0a0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
b0b0: 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ut len), len);..
b0c0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
b0d0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
b0e0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
b0f0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
b100: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73  umn_table_name(s
b110: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
b120: 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a  , index), -1);..
b130: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
b140: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b150: 65 72 72 69 64 65 20 76 6f 69 64 20 43 6f 6c 75  erride void Colu
b160: 6d 6e 4d 65 74 61 44 61 74 61 28 73 74 72 69 6e  mnMetaData(strin
b170: 67 20 64 61 74 61 42 61 73 65 2c 20 73 74 72 69  g dataBase, stri
b180: 6e 67 20 74 61 62 6c 65 2c 20 73 74 72 69 6e 67  ng table, string
b190: 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 73 74 72   column, out str
b1a0: 69 6e 67 20 64 61 74 61 54 79 70 65 2c 20 6f 75  ing dataType, ou
b1b0: 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65  t string collate
b1c0: 53 65 71 75 65 6e 63 65 2c 20 6f 75 74 20 62 6f  Sequence, out bo
b1d0: 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20  ol notNull, out 
b1e0: 62 6f 6f 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c  bool primaryKey,
b1f0: 20 6f 75 74 20 62 6f 6f 6c 20 61 75 74 6f 49 6e   out bool autoIn
b200: 63 72 65 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d  crement)..    {.
b210: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 64 61  .      IntPtr da
b220: 74 61 54 79 70 65 50 74 72 3b 0d 0a 20 20 20 20  taTypePtr;..    
b230: 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 53 65 71    IntPtr collSeq
b240: 50 74 72 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  Ptr;..      int 
b250: 6e 6e 6f 74 4e 75 6c 6c 3b 0d 0a 20 20 20 20 20  nnotNull;..     
b260: 20 69 6e 74 20 6e 70 72 69 6d 61 72 79 4b 65 79   int nprimaryKey
b270: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 61 75  ;..      int nau
b280: 74 6f 49 6e 63 3b 0d 0a 20 20 20 20 20 20 53 51  toInc;..      SQ
b290: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b  LiteErrorCode n;
b2a0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 64 74 4c 65  ..      int dtLe
b2b0: 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 73  n;..      int cs
b2c0: 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  Len;....#if !SQL
b2d0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
b2e0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
b2f0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b300: 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
b310: 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74 65 72 6f  _metadata_intero
b320: 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64  p(_sql, ToUTF8(d
b330: 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38  ataBase), ToUTF8
b340: 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28  (table), ToUTF8(
b350: 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 64 61 74  column), out dat
b360: 61 54 79 70 65 50 74 72 2c 20 6f 75 74 20 63 6f  aTypePtr, out co
b370: 6c 6c 53 65 71 50 74 72 2c 20 6f 75 74 20 6e 6e  llSeqPtr, out nn
b380: 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e 70 72 69  otNull, out npri
b390: 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20 6e 61 75  maryKey, out nau
b3a0: 74 6f 49 6e 63 2c 20 6f 75 74 20 64 74 4c 65 6e  toInc, out dtLen
b3b0: 2c 20 6f 75 74 20 63 73 4c 65 6e 29 3b 0d 0a 23  , out csLen);..#
b3c0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 64 74 4c 65  else..      dtLe
b3d0: 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 63  n = -1;..      c
b3e0: 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20  sLen = -1;....  
b3f0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
b400: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b410: 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
b420: 5f 6d 65 74 61 64 61 74 61 28 5f 73 71 6c 2c 20  _metadata(_sql, 
b430: 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65 29  ToUTF8(dataBase)
b440: 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c  , ToUTF8(table),
b450: 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c   ToUTF8(column),
b460: 20 6f 75 74 20 64 61 74 61 54 79 70 65 50 74 72   out dataTypePtr
b470: 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71 50 74 72  , out collSeqPtr
b480: 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20  , out nnotNull, 
b490: 6f 75 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c  out nprimaryKey,
b4a0: 20 6f 75 74 20 6e 61 75 74 6f 49 6e 63 29 3b 0d   out nautoInc);.
b4b0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69  .#endif..      i
b4c0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
b4d0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
b4e0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
b4f0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
b500: 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
b510: 20 20 20 64 61 74 61 54 79 70 65 20 3d 20 55 54     dataType = UT
b520: 46 38 54 6f 53 74 72 69 6e 67 28 64 61 74 61 54  F8ToString(dataT
b530: 79 70 65 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d  ypePtr, dtLen);.
b540: 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 65 53 65  .      collateSe
b550: 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53  quence = UTF8ToS
b560: 74 72 69 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72  tring(collSeqPtr
b570: 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20  , csLen);....   
b580: 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e     notNull = (nn
b590: 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20  otNull == 1);.. 
b5a0: 20 20 20 20 20 70 72 69 6d 61 72 79 4b 65 79 20       primaryKey 
b5b0: 3d 20 28 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d  = (nprimaryKey =
b5c0: 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 61 75 74  = 1);..      aut
b5d0: 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61  oIncrement = (na
b5e0: 75 74 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20  utoInc == 1);.. 
b5f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
b600: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f  rnal override do
b610: 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 53  uble GetDouble(S
b620: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
b630: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
b640: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f  .    {..      do
b650: 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66  uble value;..#if
b660: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
b670: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
b680: 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66     value = Unsaf
b690: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b6a0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
b6b0: 75 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  uble(stmt._sqlit
b6c0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
b6d0: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
b6e0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55  TANDARD..      U
b6f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b700: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
b710: 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  n_double_interop
b720: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
b730: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 76  mt, index, out v
b740: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
b750: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
b760: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
b770: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
b780: 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  f..      return 
b790: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  value;..    }...
b7a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b7b0: 65 72 72 69 64 65 20 73 62 79 74 65 20 47 65 74  erride sbyte Get
b7c0: 53 42 79 74 65 28 53 51 4c 69 74 65 53 74 61 74  SByte(SQLiteStat
b7d0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
b7e0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
b7f0: 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68       return unch
b800: 65 63 6b 65 64 28 28 73 62 79 74 65 29 28 47 65  ecked((sbyte)(Ge
b810: 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64  tInt32(stmt, ind
b820: 65 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56 61  ex) & byte.MaxVa
b830: 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  lue));..    }...
b840: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b850: 65 72 72 69 64 65 20 62 79 74 65 20 47 65 74 42  erride byte GetB
b860: 79 74 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  yte(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 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
b890: 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63     return unchec
b8a0: 6b 65 64 28 28 62 79 74 65 29 28 47 65 74 49 6e  ked((byte)(GetIn
b8b0: 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
b8c0: 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65   & byte.MaxValue
b8d0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
b8e0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
b8f0: 69 64 65 20 73 68 6f 72 74 20 47 65 74 49 6e 74  ide short GetInt
b900: 31 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  16(SQLiteStateme
b910: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
b920: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
b930: 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
b940: 65 64 28 28 73 68 6f 72 74 29 28 47 65 74 49 6e  ed((short)(GetIn
b950: 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
b960: 20 26 20 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c   & ushort.MaxVal
b970: 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
b980: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
b990: 72 72 69 64 65 20 75 73 68 6f 72 74 20 47 65 74  rride ushort Get
b9a0: 55 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61  UInt16(SQLiteSta
b9b0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
b9c0: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
b9d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63        return unc
b9e0: 68 65 63 6b 65 64 28 28 75 73 68 6f 72 74 29 28  hecked((ushort)(
b9f0: 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69  GetInt32(stmt, i
ba00: 6e 64 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d  ndex) & ushort.M
ba10: 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  axValue));..    
ba20: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
ba30: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47  l override int G
ba40: 65 74 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74  etInt32(SQLiteSt
ba50: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
ba60: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
ba70: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
ba80: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
ba90: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
baa0: 5f 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  _int(stmt._sqlit
bab0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
bac0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
bad0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
bae0: 75 69 6e 74 20 47 65 74 55 49 6e 74 33 32 28 53  uint GetUInt32(S
baf0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
bb00: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
bb10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
bb20: 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28  turn unchecked((
bb30: 75 69 6e 74 29 47 65 74 49 6e 74 33 32 28 73 74  uint)GetInt32(st
bb40: 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20  mt, index));..  
bb50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
bb60: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
bb70: 67 20 47 65 74 49 6e 74 36 34 28 53 51 4c 69 74  g GetInt64(SQLit
bb80: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
bb90: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
bba0: 20 7b 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 76   {..      long v
bbb0: 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54  alue;..#if !PLAT
bbc0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
bbd0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c  EWORK..      val
bbe0: 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ue = UnsafeNativ
bbf0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
bc00: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 74  _column_int64(st
bc10: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
bc20: 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20   index);..#elif 
bc30: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
bc40: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
bc50: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
bc60: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34  te3_column_int64
bc70: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
bc80: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
bc90: 78 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a  x, out value);..
bca0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
bcb0: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
bcc0: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
bcd0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
bce0: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
bcf0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
bd00: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75  ernal override u
bd10: 6c 6f 6e 67 20 47 65 74 55 49 6e 74 36 34 28 53  long GetUInt64(S
bd20: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
bd30: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
bd40: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
bd50: 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28  turn unchecked((
bd60: 75 6c 6f 6e 67 29 47 65 74 49 6e 74 36 34 28 73  ulong)GetInt64(s
bd70: 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20  tmt, index));.. 
bd80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
bd90: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
bda0: 72 69 6e 67 20 47 65 74 54 65 78 74 28 53 51 4c  ring GetText(SQL
bdb0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
bdc0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
bdd0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
bde0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
bdf0: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
be00: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
be10: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
be20: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
be30: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e  3_column_text_in
be40: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
be50: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
be60: 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  out len), len);.
be70: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
be80: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
be90: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
bea0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
beb0: 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f  lumn_text(stmt._
bec0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
bed0: 65 78 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e  ex),..        Un
bee0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
bef0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
bf00: 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c  _bytes(stmt._sql
bf10: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
bf20: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
bf30: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
bf40: 6c 20 6f 76 65 72 72 69 64 65 20 44 61 74 65 54  l override DateT
bf50: 69 6d 65 20 47 65 74 44 61 74 65 54 69 6d 65 28  ime GetDateTime(
bf60: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
bf70: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
bf80: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
bf90: 66 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d  f (_datetimeForm
bfa0: 61 74 20 3d 3d 20 53 51 4c 69 74 65 44 61 74 65  at == SQLiteDate
bfb0: 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73 29 0d 0a  Formats.Ticks)..
bfc0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54          return T
bfd0: 6f 44 61 74 65 54 69 6d 65 28 47 65 74 49 6e 74  oDateTime(GetInt
bfe0: 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  64(stmt, index),
bff0: 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b   _datetimeKind);
c000: 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20  ..      else if 
c010: 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74  (_datetimeFormat
c020: 20 3d 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f   == SQLiteDateFo
c030: 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79 29  rmats.JulianDay)
c040: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
c050: 20 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74 44   ToDateTime(GetD
c060: 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65  ouble(stmt, inde
c070: 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e  x), _datetimeKin
c080: 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20  d);..      else 
c090: 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72  if (_datetimeFor
c0a0: 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44 61 74  mat == SQLiteDat
c0b0: 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f  eFormats.UnixEpo
c0c0: 63 68 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ch)..        ret
c0d0: 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 47  urn ToDateTime(G
c0e0: 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
c0f0: 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b  dex), _datetimeK
c100: 69 6e 64 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  ind);....#if !SQ
c110: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
c120: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20       int len;.. 
c130: 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61       return ToDa
c140: 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74  teTime(UnsafeNat
c150: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
c160: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69  e3_column_text_i
c170: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
c180: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
c190: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
c1a0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
c1b0: 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65  eturn ToDateTime
c1c0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
c1d0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
c1e0: 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73  umn_text(stmt._s
c1f0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
c200: 78 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73  x),..        Uns
c210: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c220: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
c230: 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69  bytes(stmt._sqli
c240: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  te_stmt, index))
c250: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
c260: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
c270: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
c280: 65 74 42 79 74 65 73 28 53 51 4c 69 74 65 53 74  etBytes(SQLiteSt
c290: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
c2a0: 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61  t index, int nDa
c2b0: 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d  taOffset, byte[]
c2c0: 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61   bDest, int nSta
c2d0: 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29  rt, int nLength)
c2e0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
c2f0: 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65  nt nlen = Unsafe
c300: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c310: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
c320: 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  es(stmt._sqlite_
c330: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d  stmt, index);...
c340: 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20  .      // If no 
c350: 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66  destination buff
c360: 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73  er, return the s
c370: 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20  ize needed...   
c380: 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20     if (bDest == 
c390: 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65  null) return nle
c3a0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20  n;....      int 
c3b0: 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74  nCopied = nLengt
c3c0: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  h;....      if (
c3d0: 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74  nCopied + nStart
c3e0: 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29   > bDest.Length)
c3f0: 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74   nCopied = bDest
c400: 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74  .Length - nStart
c410: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ;..      if (nCo
c420: 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73  pied + nDataOffs
c430: 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69  et > nlen) nCopi
c440: 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74  ed = nlen - nDat
c450: 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20  aOffset;....    
c460: 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20    if (nCopied > 
c470: 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  0)..      {..   
c480: 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20       IntPtr ptr 
c490: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
c4a0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
c4b0: 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74 6d 74 2e 5f  lumn_blob(stmt._
c4c0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
c4d0: 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ex);....        
c4e0: 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e  Marshal.Copy((In
c4f0: 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e 74 36  tPtr)(ptr.ToInt6
c500: 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66 73 65  4() + nDataOffse
c510: 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72  t), bDest, nStar
c520: 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20  t, nCopied);..  
c530: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73      }..      els
c540: 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  e..      {..    
c550: 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b      nCopied = 0;
c560: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
c570: 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65     return nCopie
c580: 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  d;..    }....   
c590: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c5a0: 64 65 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73  de long GetChars
c5b0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
c5c0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
c5d0: 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65  , int nDataOffse
c5e0: 74 2c 20 63 68 61 72 5b 5d 20 62 44 65 73 74 2c  t, char[] bDest,
c5f0: 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74   int nStart, int
c600: 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b   nLength)..    {
c610: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e  ..      int nlen
c620: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f  ;..      int nCo
c630: 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d  pied = nLength;.
c640: 0a 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ...      string 
c650: 73 74 72 20 3d 20 47 65 74 54 65 78 74 28 73 74  str = GetText(st
c660: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
c670: 20 20 20 6e 6c 65 6e 20 3d 20 73 74 72 2e 4c 65     nlen = str.Le
c680: 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ngth;....      i
c690: 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c  f (bDest == null
c6a0: 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a  ) return nlen;..
c6b0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
c6c0: 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62  ied + nStart > b
c6d0: 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f  Dest.Length) nCo
c6e0: 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e  pied = bDest.Len
c6f0: 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20  gth - nStart;.. 
c700: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
c710: 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e   + nDataOffset >
c720: 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d   nlen) nCopied =
c730: 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66   nlen - nDataOff
c740: 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  set;....      if
c750: 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a   (nCopied > 0)..
c760: 20 20 20 20 20 20 20 20 73 74 72 2e 43 6f 70 79          str.Copy
c770: 54 6f 28 6e 44 61 74 61 4f 66 66 73 65 74 2c 20  To(nDataOffset, 
c780: 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e  bDest, nStart, n
c790: 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20  Copied);..      
c7a0: 65 6c 73 65 20 6e 43 6f 70 69 65 64 20 3d 20 30  else nCopied = 0
c7b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
c7c0: 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20  n nCopied;..    
c7d0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
c7e0: 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
c7f0: 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61  IsNull(SQLiteSta
c800: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
c810: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
c820: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 43 6f        return (Co
c830: 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d  lumnAffinity(stm
c840: 74 2c 20 69 6e 64 65 78 29 20 3d 3d 20 54 79 70  t, index) == Typ
c850: 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b  eAffinity.Null);
c860: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
c870: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
c880: 20 69 6e 74 20 41 67 67 72 65 67 61 74 65 43 6f   int AggregateCo
c890: 75 6e 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  unt(IntPtr conte
c8a0: 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  xt)..    {..    
c8b0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
c8c0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
c8d0: 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63  ite3_aggregate_c
c8e0: 6f 75 6e 74 28 63 6f 6e 74 65 78 74 29 3b 0d 0a  ount(context);..
c8f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
c900: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
c910: 6f 69 64 20 43 72 65 61 74 65 46 75 6e 63 74 69  oid CreateFuncti
c920: 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 46 75 6e  on(string strFun
c930: 63 74 69 6f 6e 2c 20 69 6e 74 20 6e 41 72 67 73  ction, int nArgs
c940: 2c 20 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53  , bool needCollS
c950: 65 71 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61  eq, SQLiteCallba
c960: 63 6b 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43  ck func, SQLiteC
c970: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 73 74 65 70  allback funcstep
c980: 2c 20 53 51 4c 69 74 65 46 69 6e 61 6c 43 61 6c  , SQLiteFinalCal
c990: 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e 61 6c 29  lback funcfinal)
c9a0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
c9b0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
c9c0: 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
c9d0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
c9e0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
c9f0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ca00: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
ca10: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54  _interop(_sql, T
ca20: 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f  oUTF8(strFunctio
ca30: 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e  n), nArgs, 4, In
ca40: 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c  tPtr.Zero, func,
ca50: 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66   funcstep, funcf
ca60: 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53  inal, (needCollS
ca70: 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20  eq == true) ? 1 
ca80: 3a 20 30 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  : 0);..      if 
ca90: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
caa0: 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e  rCode.Ok) n = Un
cab0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
cac0: 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
cad0: 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f  _function_intero
cae0: 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  p(_sql, ToUTF8(s
caf0: 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72  trFunction), nAr
cb00: 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65  gs, 1, IntPtr.Ze
cb10: 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74  ro, func, funcst
cb20: 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28  ep, funcfinal, (
cb30: 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74  needCollSeq == t
cb40: 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a  rue) ? 1 : 0);..
cb50: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d  #else..      n =
cb60: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
cb70: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
cb80: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71  ate_function(_sq
cb90: 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
cba0: 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34  ction), nArgs, 4
cbb0: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
cbc0: 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
cbd0: 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20  uncfinal);..    
cbe0: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
cbf0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e  eErrorCode.Ok) n
cc00: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
cc10: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
cc20: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f  reate_function(_
cc30: 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46  sql, ToUTF8(strF
cc40: 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c  unction), nArgs,
cc50: 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   1, IntPtr.Zero,
cc60: 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c   func, funcstep,
cc70: 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23 65   funcfinal);..#e
cc80: 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28  ndif..      if (
cc90: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
cca0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
ccb0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
ccc0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
ccd0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
cce0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
ccf0: 65 72 72 69 64 65 20 76 6f 69 64 20 43 72 65 61  erride void Crea
cd00: 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69  teCollation(stri
cd10: 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c  ng strCollation,
cd20: 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e   SQLiteCollation
cd30: 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c   func, SQLiteCol
cd40: 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36 29 0d 0a  lation func16)..
cd50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
cd60: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
cd70: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
cd80: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
cd90: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73  ate_collation(_s
cda0: 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f  ql, ToUTF8(strCo
cdb0: 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c 20 49 6e 74  llation), 2, Int
cdc0: 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 31 36  Ptr.Zero, func16
cdd0: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
cde0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
cdf0: 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66  de.Ok) n = Unsaf
ce00: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
ce10: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
ce20: 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f  llation(_sql, To
ce30: 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f  UTF8(strCollatio
ce40: 6e 29 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65  n), 1, IntPtr.Ze
ce50: 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20  ro, func);..    
ce60: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
ce70: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
ce80: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
ce90: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
cea0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
ceb0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
cec0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
ced0: 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43   ContextCollateC
cee0: 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e  ompare(Collation
cef0: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63  EncodingEnum enc
cf00: 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  , IntPtr context
cf10: 2c 20 73 74 72 69 6e 67 20 73 31 2c 20 73 74 72  , string s1, str
cf20: 69 6e 67 20 73 32 29 0d 0a 20 20 20 20 7b 0d 0a  ing s2)..    {..
cf30: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
cf40: 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65  DARD..      byte
cf50: 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79  [] b1;..      by
cf60: 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20  te[] b2;..      
cf70: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
cf80: 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d  ding converter =
cf90: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
cfa0: 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20  switch (enc)..  
cfb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63      {..        c
cfc0: 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
cfd0: 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d  odingEnum.UTF8:.
cfe0: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
cff0: 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
d000: 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38  xt.Encoding.UTF8
d010: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
d020: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
d030: 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
d040: 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a  ingEnum.UTF16LE:
d050: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
d060: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
d070: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69  ext.Encoding.Uni
d080: 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
d090: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
d0a0: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
d0b0: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31  ncodingEnum.UTF1
d0c0: 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  6BE:..          
d0d0: 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
d0e0: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
d0f0: 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64  .BigEndianUnicod
d100: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  e;..          br
d110: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  eak;..      }...
d120: 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76  .      b1 = conv
d130: 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 73  erter.GetBytes(s
d140: 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20  1);..      b2 = 
d150: 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  converter.GetByt
d160: 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20 20 20 20  es(s2);....     
d170: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
d180: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d190: 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c  te3_context_coll
d1a0: 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  compare_interop(
d1b0: 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e  context, b1, b1.
d1c0: 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c  Length, b2, b2.L
d1d0: 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ength);..#else..
d1e0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
d1f0: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
d200: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
d210: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
d220: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
d230: 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f  de int ContextCo
d240: 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c  llateCompare(Col
d250: 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
d260: 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63  um enc, IntPtr c
d270: 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b 5d 20 63  ontext, char[] c
d280: 31 2c 20 63 68 61 72 5b 5d 20 63 32 29 0d 0a 20  1, char[] c2).. 
d290: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
d2a0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
d2b0: 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20    byte[] b1;..  
d2c0: 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a      byte[] b2;..
d2d0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78        System.Tex
d2e0: 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65  t.Encoding conve
d2f0: 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rter = null;....
d300: 20 20 20 20 20 20 73 77 69 74 63 68 20 28 65 6e        switch (en
d310: 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  c)..      {..   
d320: 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
d330: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
d340: 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20  UTF8:..         
d350: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
d360: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
d370: 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20  g.UTF8;..       
d380: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
d390: 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
d3a0: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
d3b0: 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16LE:..        
d3c0: 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
d3d0: 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
d3e0: 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20  ng.Unicode;..   
d3f0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
d400: 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
d410: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
d420: 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20  m.UTF16BE:..    
d430: 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
d440: 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
d450: 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e  coding.BigEndian
d460: 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
d470: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
d480: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20    }....      b1 
d490: 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
d4a0: 79 74 65 73 28 63 31 29 3b 0d 0a 20 20 20 20 20  ytes(c1);..     
d4b0: 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e   b2 = converter.
d4c0: 47 65 74 42 79 74 65 73 28 63 32 29 3b 0d 0a 0d  GetBytes(c2);...
d4d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
d4e0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d4f0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  s.sqlite3_contex
d500: 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e  t_collcompare_in
d510: 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62  terop(context, b
d520: 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32  1, b1.Length, b2
d530: 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23  , b2.Length);..#
d540: 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
d550: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
d560: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
d570: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
d580: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
d590: 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c 61 74 69  override Collati
d5a0: 6f 6e 53 65 71 75 65 6e 63 65 20 47 65 74 43 6f  onSequence GetCo
d5b0: 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28  llationSequence(
d5c0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66  SQLiteFunction f
d5d0: 75 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  unc, IntPtr cont
d5e0: 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  ext)..    {..#if
d5f0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
d600: 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c 61 74 69  D..      Collati
d610: 6f 6e 53 65 71 75 65 6e 63 65 20 73 65 71 20 3d  onSequence seq =
d620: 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f 6e 53 65   new CollationSe
d630: 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20 20 20 20  quence();..     
d640: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
d650: 20 69 6e 74 20 74 79 70 65 3b 0d 0a 20 20 20 20   int type;..    
d660: 20 20 69 6e 74 20 65 6e 63 3b 0d 0a 20 20 20 20    int enc;..    
d670: 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73    IntPtr p = Uns
d680: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d690: 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  .sqlite3_context
d6a0: 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74 65 72 6f 70  _collseq_interop
d6b0: 28 63 6f 6e 74 65 78 74 2c 20 6f 75 74 20 74 79  (context, out ty
d6c0: 70 65 2c 20 6f 75 74 20 65 6e 63 2c 20 6f 75 74  pe, out enc, out
d6d0: 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   len);....      
d6e0: 69 66 20 28 70 20 21 3d 20 6e 75 6c 6c 29 20 73  if (p != null) s
d6f0: 65 71 2e 4e 61 6d 65 20 3d 20 55 54 46 38 54 6f  eq.Name = UTF8To
d700: 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d  String(p, len);.
d710: 0a 20 20 20 20 20 20 73 65 71 2e 54 79 70 65 20  .      seq.Type 
d720: 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65  = (CollationType
d730: 45 6e 75 6d 29 74 79 70 65 3b 0d 0a 20 20 20 20  Enum)type;..    
d740: 20 20 73 65 71 2e 5f 66 75 6e 63 20 3d 20 66 75    seq._func = fu
d750: 6e 63 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 45  nc;..      seq.E
d760: 6e 63 6f 64 69 6e 67 20 3d 20 28 43 6f 6c 6c 61  ncoding = (Colla
d770: 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
d780: 29 65 6e 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  )enc;....      r
d790: 65 74 75 72 6e 20 73 65 71 3b 0d 0a 23 65 6c 73  eturn seq;..#els
d7a0: 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
d7b0: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
d7c0: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
d7d0: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
d7e0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d7f0: 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61  rride long GetPa
d800: 72 61 6d 56 61 6c 75 65 42 79 74 65 73 28 49 6e  ramValueBytes(In
d810: 74 50 74 72 20 70 2c 20 69 6e 74 20 6e 44 61 74  tPtr p, int nDat
d820: 61 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20  aOffset, byte[] 
d830: 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72  bDest, int nStar
d840: 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d  t, int nLength).
d850: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
d860: 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e  t nlen = UnsafeN
d870: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d880: 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73  ite3_value_bytes
d890: 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  (p);....      //
d8a0: 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74 69   If no destinati
d8b0: 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75 72  on buffer, retur
d8c0: 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64 65  n the size neede
d8d0: 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44  d...      if (bD
d8e0: 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74  est == null) ret
d8f0: 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20  urn nlen;....   
d900: 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d     int nCopied =
d910: 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20   nLength;....   
d920: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
d930: 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e   nStart > bDest.
d940: 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20  Length) nCopied 
d950: 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d  = bDest.Length -
d960: 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20   nStart;..      
d970: 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44  if (nCopied + nD
d980: 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e  ataOffset > nlen
d990: 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e  ) nCopied = nlen
d9a0: 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d   - nDataOffset;.
d9b0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
d9c0: 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20  pied > 0)..     
d9d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
d9e0: 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e  tr ptr = UnsafeN
d9f0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
da00: 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28  ite3_value_blob(
da10: 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d  p);....        M
da20: 61 72 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74  arshal.Copy((Int
da30: 50 74 72 29 28 70 74 72 2e 54 6f 49 6e 74 36 34  Ptr)(ptr.ToInt64
da40: 28 29 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74  () + nDataOffset
da50: 29 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74  ), bDest, nStart
da60: 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20  , nCopied);..   
da70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65     }..      else
da80: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
da90: 20 20 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d     nCopied = 0;.
daa0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
dab0: 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64    return nCopied
dac0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
dad0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
dae0: 65 20 64 6f 75 62 6c 65 20 47 65 74 50 61 72 61  e double GetPara
daf0: 6d 56 61 6c 75 65 44 6f 75 62 6c 65 28 49 6e 74  mValueDouble(Int
db00: 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
db10: 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61  .      double va
db20: 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46  lue;..#if !PLATF
db30: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
db40: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75  WORK..      valu
db50: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
db60: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
db70: 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 70 74 72  value_double(ptr
db80: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
db90: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
dba0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
dbb0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
dbc0: 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  lue_double_inter
dbd0: 6f 70 28 70 74 72 2c 20 6f 75 74 20 76 61 6c 75  op(ptr, out valu
dbe0: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
dbf0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
dc00: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
dc10: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
dc20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
dc30: 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ue;..    }....  
dc40: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
dc50: 69 64 65 20 69 6e 74 20 47 65 74 50 61 72 61 6d  ide int GetParam
dc60: 56 61 6c 75 65 49 6e 74 33 32 28 49 6e 74 50 74  ValueInt32(IntPt
dc70: 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20  r ptr)..    {.. 
dc80: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
dc90: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
dca0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
dcb0: 74 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a  t(ptr);..    }..
dcc0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
dcd0: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
dce0: 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 36 34 28  ParamValueInt64(
dcf0: 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20  IntPtr ptr)..   
dd00: 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 36 34 20   {..      Int64 
dd10: 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41  value;..#if !PLA
dd20: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
dd30: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61  MEWORK..      va
dd40: 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  lue = UnsafeNati
dd50: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
dd60: 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 74  3_value_int64(pt
dd70: 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  r);..#elif !SQLI
dd80: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
dd90: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
dda0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
ddb0: 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72  alue_int64_inter
ddc0: 6f 70 28 70 74 72 2c 20 6f 75 74 20 76 61 6c 75  op(ptr, out valu
ddd0: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
dde0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
ddf0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
de00: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
de10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
de20: 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ue;..    }....  
de30: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
de40: 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 50 61  ide string GetPa
de50: 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49 6e 74  ramValueText(Int
de60: 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
de70: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
de80: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
de90: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74   len;..      ret
dea0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
deb0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
dec0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
ded0: 75 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28  ue_text_interop(
dee0: 70 74 72 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  ptr, out len), l
def0: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
df00: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
df10: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
df20: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
df30: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 74  e3_value_text(pt
df40: 72 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73  r),..        Uns
df50: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
df60: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  .sqlite3_value_b
df70: 79 74 65 73 28 70 74 72 29 29 3b 0d 0a 23 65 6e  ytes(ptr));..#en
df80: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
df90: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
dfa0: 69 64 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ide TypeAffinity
dfb0: 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 79   GetParamValueTy
dfc0: 70 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a  pe(IntPtr ptr)..
dfd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
dfe0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
dff0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
e000: 76 61 6c 75 65 5f 74 79 70 65 28 70 74 72 29 3b  value_type(ptr);
e010: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
e020: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
e030: 20 76 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f 62   void ReturnBlob
e040: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
e050: 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a   byte[] value)..
e060: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
e070: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
e080: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
e090: 62 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20 76 61  blob(context, va
e0a0: 6c 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74  lue, value.Lengt
e0b0: 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  h, (IntPtr)(-1))
e0c0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
e0d0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
e0e0: 65 20 76 6f 69 64 20 52 65 74 75 72 6e 44 6f 75  e void ReturnDou
e0f0: 62 6c 65 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ble(IntPtr conte
e100: 78 74 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65  xt, double value
e110: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50  )..    {..#if !P
e120: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
e130: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
e140: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
e150: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
e160: 6c 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78  lt_double(contex
e170: 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69  t, value);..#eli
e180: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
e190: 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RD..      Unsafe
e1a0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e1b0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
e1c0: 62 6c 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  ble_interop(cont
e1d0: 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  ext, ref value);
e1e0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
e1f0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
e200: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
e210: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
e220: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
e230: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
e240: 20 52 65 74 75 72 6e 45 72 72 6f 72 28 49 6e 74   ReturnError(Int
e250: 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72  Ptr context, str
e260: 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ing value)..    
e270: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
e280: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
e290: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
e2a0: 72 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46  r(context, ToUTF
e2b0: 38 28 76 61 6c 75 65 29 2c 20 76 61 6c 75 65 2e  8(value), value.
e2c0: 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d  Length);..    }.
e2d0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
e2e0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
e2f0: 74 75 72 6e 49 6e 74 33 32 28 49 6e 74 50 74 72  turnInt32(IntPtr
e300: 20 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 76 61   context, int va
e310: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
e320: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
e330: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
e340: 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78  esult_int(contex
e350: 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  t, value);..    
e360: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
e370: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
e380: 52 65 74 75 72 6e 49 6e 74 36 34 28 49 6e 74 50  ReturnInt64(IntP
e390: 74 72 20 63 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67  tr context, long
e3a0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
e3b0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
e3c0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
e3d0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
e3e0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
e3f0: 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 63  3_result_int64(c
e400: 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d  ontext, value);.
e410: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
e420: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55  TANDARD..      U
e430: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
e440: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
e450: 74 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  t_int64_interop(
e460: 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c  context, ref val
e470: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
e480: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
e490: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
e4a0: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
e4b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
e4c0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
e4d0: 76 6f 69 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28  void ReturnNull(
e4e0: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
e4f0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
e500: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e510: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
e520: 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d  _null(context);.
e530: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
e540: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
e550: 76 6f 69 64 20 52 65 74 75 72 6e 54 65 78 74 28  void ReturnText(
e560: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
e570: 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20  string value).. 
e580: 20 20 20 7b 0d 0a 20 20 20 20 20 20 62 79 74 65     {..      byte
e590: 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61  [] b = ToUTF8(va
e5a0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 55 6e 73  lue);..      Uns
e5b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
e5c0: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
e5d0: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 54 6f  text(context, To
e5e0: 55 54 46 38 28 76 61 6c 75 65 29 2c 20 62 2e 4c  UTF8(value), b.L
e5f0: 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50  ength - 1, (IntP
e600: 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d  tr)(-1));..    }
e610: 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f  ....#if INTEROP_
e620: 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20  VIRTUAL_TABLE.. 
e630: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
e640: 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20  ..    /// Calls 
e650: 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74  the native SQLit
e660: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69  e core library i
e670: 6e 20 6f 72 64 65 72 20 74 6f 20 63 72 65 61 74  n order to creat
e680: 65 20 61 20 64 69 73 70 6f 73 61 62 6c 65 0d 0a  e a disposable..
e690: 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20 63      /// module c
e6a0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 69 6d  ontaining the im
e6b0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
e6c0: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
e6d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
e6e0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
e6f0: 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c  aram name="modul
e700: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
e710: 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 74   module object t
e720: 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63  o be used when c
e730: 72 65 61 74 69 6e 67 20 74 68 65 20 6e 61 74 69  reating the nati
e740: 76 65 20 64 69 73 70 6f 73 61 62 6c 65 20 6d 6f  ve disposable mo
e750: 64 75 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  dule...    /// <
e760: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
e770: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c   <param name="fl
e780: 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ags">..    /// T
e790: 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65  he flags for the
e7a0: 20 61 73 73 6f 63 69 61 74 65 64 20 3c 73 65 65   associated <see
e7b0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e   cref="SQLiteCon
e7c0: 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65  nection" /> obje
e7d0: 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
e7e0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
e7f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
e800: 72 72 69 64 65 20 76 6f 69 64 20 43 72 65 61 74  rride void Creat
e810: 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d 6f  eModule(SQLiteMo
e820: 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51 4c  dule module, SQL
e830: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
e840: 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b  gs flags)..    {
e850: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f  ..        if (mo
e860: 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
e870: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
e880: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
e890: 6c 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75  lException("modu
e8a0: 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  le");....       
e8b0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
e8c0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
e8d0: 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 29  ags.NoLogModule)
e8e0: 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   != SQLiteConnec
e8f0: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d  tionFlags.NoLogM
e900: 6f 64 75 6c 65 29 0d 0a 20 20 20 20 20 20 20 20  odule)..        
e910: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d  {..            m
e920: 6f 64 75 6c 65 2e 4c 6f 67 45 72 72 6f 72 73 20  odule.LogErrors 
e930: 3d 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  = ((flags & SQLi
e940: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
e950: 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 72 72 6f 72  s.LogModuleError
e960: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
e970: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f  ctionFlags.LogMo
e980: 64 75 6c 65 45 72 72 6f 72 29 3b 0d 0a 20 20 20  duleError);..   
e990: 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
e9a0: 4c 6f 67 45 78 63 65 70 74 69 6f 6e 73 20 3d 20  LogExceptions = 
e9b0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
e9c0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
e9d0: 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70 74 69  LogModuleExcepti
e9e0: 6f 6e 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  on) == SQLiteCon
e9f0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
ea00: 4d 6f 64 75 6c 65 45 78 63 65 70 74 69 6f 6e 29  ModuleException)
ea10: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
ea20: 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c          if (_sql
ea30: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
ea40: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
ea50: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
ea60: 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73  ("connection has
ea70: 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
ea80: 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  le");....       
ea90: 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f   SetLoadExtensio
eaa0: 6e 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  n(true);..      
eab0: 20 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28    LoadExtension(
eac0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
ead0: 6f 64 73 2e 53 51 4c 49 54 45 5f 44 4c 4c 2c 20  ods.SQLITE_DLL, 
eae0: 22 73 71 6c 69 74 65 33 5f 76 74 73 68 69 6d 5f  "sqlite3_vtshim_
eaf0: 69 6e 69 74 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  init");....     
eb00: 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 2e 43 72     if (module.Cr
eb10: 65 61 74 65 44 69 73 70 6f 73 61 62 6c 65 4d 6f  eateDisposableMo
eb20: 64 75 6c 65 28 5f 73 71 6c 29 29 0d 0a 20 20 20  dule(_sql))..   
eb30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
eb40: 20 20 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65 73      if (_modules
eb50: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
eb60: 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75             _modu
eb70: 6c 65 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f  les = new Dictio
eb80: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c  nary<string, SQL
eb90: 69 74 65 4d 6f 64 75 6c 65 3e 28 29 3b 0d 0a 0d  iteModule>();...
eba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f  .            _mo
ebb0: 64 75 6c 65 73 2e 41 64 64 28 6d 6f 64 75 6c 65  dules.Add(module
ebc0: 2e 4e 61 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b 0d  .Name, module);.
ebd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
ebe0: 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20  f (_usePool)..  
ebf0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ec00: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 75 73               _us
ec10: 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a  ePool = false;..
ec20: 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
ec30: 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
ec40: 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
ec50: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
ec60: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
ec70: 67 2e 46 6f 72 6d 61 74 28 22 43 72 65 61 74 65  g.Format("Create
ec80: 4d 6f 64 75 6c 65 20 28 50 6f 6f 6c 29 20 44 69  Module (Pool) Di
ec90: 73 61 62 6c 65 64 3a 20 7b 30 7d 22 2c 20 5f 73  sabled: {0}", _s
eca0: 71 6c 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ql));..#endif.. 
ecb0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
ecc0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ecd0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b   else..        {
ece0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
ecf0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
ed00: 63 65 70 74 69 6f 6e 28 47 65 74 4c 61 73 74 45  ception(GetLastE
ed10: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
ed20: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
ed30: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
ed40: 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74  .    /// Calls t
ed50: 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65  he native SQLite
ed60: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e   core library in
ed70: 20 6f 72 64 65 72 20 74 6f 20 63 6c 65 61 6e 75   order to cleanu
ed80: 70 20 74 68 65 20 72 65 73 6f 75 72 63 65 73 0d  p the resources.
ed90: 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61  .    /// associa
eda0: 74 65 64 20 77 69 74 68 20 61 20 6d 6f 64 75 6c  ted with a modul
edb0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
edc0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
edd0: 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
ede0: 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  le...    /// </s
edf0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
ee00: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f   <param name="mo
ee10: 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  dule">..    /// 
ee20: 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63  The module objec
ee30: 74 20 70 72 65 76 69 6f 75 73 6c 79 20 70 61 73  t previously pas
ee40: 73 65 64 20 74 6f 20 74 68 65 20 3c 73 65 65 20  sed to the <see 
ee50: 63 72 65 66 3d 22 43 72 65 61 74 65 4d 6f 64 75  cref="CreateModu
ee60: 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20  le" />..    /// 
ee70: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f  method...    ///
ee80: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
ee90: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
eea0: 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f  flags">..    ///
eeb0: 20 54 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74   The flags for t
eec0: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 3c 73  he associated <s
eed0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
eee0: 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62  onnection" /> ob
eef0: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
ef00: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
ef10: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ef20: 76 65 72 72 69 64 65 20 76 6f 69 64 20 44 69 73  verride void Dis
ef30: 70 6f 73 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74  poseModule(SQLit
ef40: 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 20  eModule module, 
ef50: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
ef60: 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20  Flags flags)..  
ef70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
ef80: 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (module == null)
ef90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
efa0: 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
efb0: 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 6d  NullException("m
efc0: 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  odule");....    
efd0: 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f      module.Dispo
efe0: 73 65 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65  se();..    }..#e
eff0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ndif....    inte
f000: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 49 6e  rnal override In
f010: 74 50 74 72 20 41 67 67 72 65 67 61 74 65 43 6f  tPtr AggregateCo
f020: 6e 74 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e  ntext(IntPtr con
f030: 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  text)..    {..  
f040: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
f050: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
f060: 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65  qlite3_aggregate
f070: 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74  _context(context
f080: 2c 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  , 1);..    }....
f090: 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54  #if INTEROP_VIRT
f0a0: 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f  UAL_TABLE..    /
f0b0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
f0c0: 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20    /// Calls the 
f0d0: 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f  native SQLite co
f0e0: 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72  re library in or
f0f0: 64 65 72 20 74 6f 20 64 65 63 6c 61 72 65 20 61  der to declare a
f100: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
f110: 20 20 20 20 2f 2f 2f 20 69 6e 20 72 65 73 70 6f      /// in respo
f120: 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e  nse to a call in
f130: 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  to the <see cref
f140: 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
f150: 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f  odule.xCreate" /
f160: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73  >..    /// or <s
f170: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
f180: 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
f190: 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72 74 75 61  nnect" /> virtua
f1a0: 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e  l table methods.
f1b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
f1c0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
f1d0: 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c  aram name="modul
f1e0: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
f1f0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d   virtual table m
f200: 6f 64 75 6c 65 20 74 68 61 74 20 69 73 20 74 6f  odule that is to
f210: 20 62 65 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   be responsible 
f220: 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  for the virtual 
f230: 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 62  table..    /// b
f240: 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a  eing declared...
f250: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
f260: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
f270: 20 6e 61 6d 65 3d 22 73 74 72 53 71 6c 22 3e 0d   name="strSql">.
f280: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 74 72  .    /// The str
f290: 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
f2a0: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
f2b0: 20 64 65 73 63 72 69 62 69 6e 67 20 74 68 65 20   describing the 
f2c0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74 6f  virtual table to
f2d0: 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20 64 65 63  ..    /// be dec
f2e0: 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lared...    /// 
f2f0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
f300: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65  / <param name="e
f310: 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  rror">..    /// 
f320: 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68  Upon success, th
f330: 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  e contents of th
f340: 69 73 20 70 61 72 61 6d 65 74 65 72 20 61 72 65  is parameter are
f350: 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 55 70 6f   undefined.  Upo
f360: 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20 20  n failure,..    
f370: 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20 63 6f  /// it should co
f380: 6e 74 61 69 6e 20 61 6e 20 61 70 70 72 6f 70 72  ntain an appropr
f390: 69 61 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61  iate error messa
f3a0: 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ge...    /// </p
f3b0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
f3c0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
f3d0: 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
f3e0: 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
f3f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
f400: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
f410: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
f420: 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65 63 6c  teErrorCode Decl
f430: 61 72 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28  areVirtualTable(
f440: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
f450: 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a  Module module,..
f460: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
f470: 74 72 53 71 6c 2c 0d 0a 20 20 20 20 20 20 20 20  trSql,..        
f480: 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
f490: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
f4a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
f4b0: 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
f4c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f4d0: 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 63        error = "c
f4e0: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e  onnection has an
f4f0: 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22   invalid handle"
f500: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
f510: 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
f520: 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20  rCode.Error;..  
f530: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f540: 20 20 20 49 6e 74 50 74 72 20 70 53 71 6c 20 3d     IntPtr pSql =
f550: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
f560: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
f570: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f580: 20 20 20 20 20 70 53 71 6c 20 3d 20 53 51 4c 69       pSql = SQLi
f590: 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74  teString.Utf8Int
f5a0: 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 73 74  PtrFromString(st
f5b0: 72 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rSql);....      
f5c0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
f5d0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
f5e0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f5f0: 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
f600: 61 62 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab(..           
f610: 20 20 20 20 20 5f 73 71 6c 2c 20 70 53 71 6c 29       _sql, pSql)
f620: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f630: 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74   if ((n == SQLit
f640: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26  eErrorCode.Ok) &
f650: 26 20 28 6d 6f 64 75 6c 65 20 21 3d 20 6e 75 6c  & (module != nul
f660: 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
f670: 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 65 63 6c       module.Decl
f680: 61 72 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a  ared = true;....
f690: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
f6a0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
f6b0: 43 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d  Code.Ok) error =
f6c0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3b   GetLastError();
f6d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f6e0: 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20  return n;..     
f6f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
f700: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b  nally..        {
f710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
f720: 20 28 70 53 71 6c 20 21 3d 20 49 6e 74 50 74 72   (pSql != IntPtr
f730: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
f740: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f750: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d         SQLiteMem
f760: 6f 72 79 2e 46 72 65 65 28 70 53 71 6c 29 3b 0d  ory.Free(pSql);.
f770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f780: 20 70 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a   pSql = IntPtr.Z
f790: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
f7a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
f7b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
f7c0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
f7d0: 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61  /// Calls the na
f7e0: 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65  tive SQLite core
f7f0: 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65   library in orde
f800: 72 20 74 6f 20 64 65 63 6c 61 72 65 20 61 20 76  r to declare a v
f810: 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
f820: 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 69    /// function i
f830: 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20  n response to a 
f840: 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73  call into the <s
f850: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
f860: 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72  NativeModule.xCr
f870: 65 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f  eate" />..    //
f880: 2f 20 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22  / or <see cref="
f890: 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
f8a0: 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e  ule.xConnect" />
f8b0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d   virtual table m
f8c0: 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f  ethods...    ///
f8d0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
f8e0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
f8f0: 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20  ="module">..    
f900: 2f 2f 2f 20 54 68 65 20 76 69 72 74 75 61 6c 20  /// The virtual 
f910: 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61  table module tha
f920: 74 20 69 73 20 74 6f 20 62 65 20 72 65 73 70 6f  t is to be respo
f930: 6e 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 76  nsible for the v
f940: 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
f950: 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 62    /// function b
f960: 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a  eing declared...
f970: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
f980: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
f990: 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e 74 43   name="argumentC
f9a0: 6f 75 6e 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  ount">..    /// 
f9b0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  The number of ar
f9c0: 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 66  guments to the f
f9d0: 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65  unction being de
f9e0: 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  clared...    ///
f9f0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
fa00: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
fa10: 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  name">..    /// 
fa20: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
fa30: 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64  function being d
fa40: 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f  eclared...    //
fa50: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
fa60: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
fa70: 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f  "error">..    //
fa80: 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20  / Upon success, 
fa90: 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
faa0: 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 61  this parameter a
fab0: 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 55  re undefined.  U
fac0: 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20  pon failure,..  
fad0: 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20    /// it should 
fae0: 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70 72 6f  contain an appro
faf0: 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d 65 73  priate error mes
fb00: 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sage...    /// <
fb10: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
fb20: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
fb30: 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
fb40: 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
fb50: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  e...    /// </re
fb60: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
fb70: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
fb80: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65  LiteErrorCode De
fb90: 63 6c 61 72 65 56 69 72 74 75 61 6c 46 75 6e 63  clareVirtualFunc
fba0: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53  tion(..        S
fbb0: 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
fbc0: 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  le,..        int
fbd0: 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d   argumentCount,.
fbe0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
fbf0: 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 72  name,..        r
fc00: 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
fc10: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
fc20: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  {..        if (_
fc30: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
fc40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
fc50: 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 63 6f       error = "co
fc60: 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
fc70: 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 3b  invalid handle";
fc80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
fc90: 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
fca0: 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
fcb0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
fcc0: 20 20 49 6e 74 50 74 72 20 70 4e 61 6d 65 20 3d    IntPtr pName =
fcd0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
fce0: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
fcf0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
fd00: 20 20 20 20 20 70 4e 61 6d 65 20 3d 20 53 51 4c       pName = SQL
fd10: 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e  iteString.Utf8In
fd20: 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 6e  tPtrFromString(n
fd30: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
fd40: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
fd50: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
fd60: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
fd70: 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66 75  ite3_overload_fu
fd80: 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  nction(..       
fd90: 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70           _sql, p
fda0: 4e 61 6d 65 2c 20 61 72 67 75 6d 65 6e 74 43 6f  Name, argumentCo
fdb0: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
fdc0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
fdd0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
fde0: 29 20 65 72 72 6f 72 20 3d 20 47 65 74 4c 61 73  ) error = GetLas
fdf0: 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20  tError();....   
fe00: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
fe10: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n;..        }.. 
fe20: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
fe30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
fe40: 20 20 20 20 20 20 20 69 66 20 28 70 4e 61 6d 65         if (pName
fe50: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
fe60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
fe70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fe80: 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72   SQLiteMemory.Fr
fe90: 65 65 28 70 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  ee(pName);..    
fea0: 20 20 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d              pNam
feb0: 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  e = IntPtr.Zero;
fec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
fed0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
fee0: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
fef0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
ff00: 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20      /// Enables 
ff10: 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65  or disabled exte
ff20: 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e 67 20 62 79  nsion loading by
ff30: 20 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 2f 2f   SQLite...    //
ff40: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
ff50: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
ff60: 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20  e="bOnOff">..   
ff70: 20 2f 2f 2f 20 54 72 75 65 20 74 6f 20 65 6e 61   /// True to ena
ff80: 62 6c 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65  ble loading of e
ff90: 78 74 65 6e 73 69 6f 6e 73 2c 20 66 61 6c 73 65  xtensions, false
ffa0: 20 74 6f 20 64 69 73 61 62 6c 65 2e 0d 0a 20 20   to disable...  
ffb0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
ffc0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
ffd0: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 4c 6f  rride void SetLo
ffe0: 61 64 45 78 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c  adExtension(bool
fff0: 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d   bOnOff)..    {.
10000 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
10010 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
10020 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10030 2e 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f  .sqlite3_enable_
10040 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d  load_extension(.
10050 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71  .            _sq
10060 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20  l, (bOnOff ? -1 
10070 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  : 0));....      
10080 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
10090 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
100a0 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
100b0 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
100c0 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
100d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
100e0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
100f0 2f 20 4c 6f 61 64 73 20 61 20 53 51 4c 69 74 65  / Loads a SQLite
10100 20 65 78 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61   extension libra
10110 72 79 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65  ry from the name
10120 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f  d file...    ///
10130 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
10140 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
10150 3d 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20  ="fileName">..  
10160 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f    /// The name o
10170 66 20 74 68 65 20 64 79 6e 61 6d 69 63 20 6c 69  f the dynamic li
10180 6e 6b 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20  nk library file 
10190 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65  containing the e
101a0 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f  xtension...    /
101b0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
101c0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
101d0 3d 22 70 72 6f 63 4e 61 6d 65 22 3e 0d 0a 20 20  ="procName">..  
101e0 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f    /// The name o
101f0 66 20 74 68 65 20 65 78 70 6f 72 74 65 64 20 66  f the exported f
10200 75 6e 63 74 69 6f 6e 20 75 73 65 64 20 74 6f 20  unction used to 
10210 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 65  initialize the e
10220 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f  xtension...    /
10230 2f 2f 20 49 66 20 6e 75 6c 6c 2c 20 74 68 65 20  // If null, the 
10240 64 65 66 61 75 6c 74 20 22 73 71 6c 69 74 65 33  default "sqlite3
10250 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 22  _extension_init"
10260 20 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a   will be used...
10270 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
10280 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10290 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 61  verride void Loa
102a0 64 45 78 74 65 6e 73 69 6f 6e 28 73 74 72 69 6e  dExtension(strin
102b0 67 20 66 69 6c 65 4e 61 6d 65 2c 20 73 74 72 69  g fileName, stri
102c0 6e 67 20 70 72 6f 63 4e 61 6d 65 29 0d 0a 20 20  ng procName)..  
102d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
102e0 28 66 69 6c 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c  (fileName == nul
102f0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
10300 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
10310 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
10320 22 66 69 6c 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a  "fileName");....
10330 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
10340 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a  Error = IntPtr.Z
10350 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
10360 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
10370 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
10380 5b 5d 20 75 74 66 38 46 69 6c 65 4e 61 6d 65 20  [] utf8FileName 
10390 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55  = UTF8Encoding.U
103a0 54 46 38 2e 47 65 74 42 79 74 65 73 28 66 69 6c  TF8.GetBytes(fil
103b0 65 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a  eName + '\0');..
103c0 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
103d0 5b 5d 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20  [] utf8ProcName 
103e0 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
103f0 20 20 20 20 20 20 20 69 66 20 28 70 72 6f 63 4e         if (procN
10400 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame != null)..  
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 74                ut
10420 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20 55 54 46  f8ProcName = UTF
10430 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47  8Encoding.UTF8.G
10440 65 74 42 79 74 65 73 28 70 72 6f 63 4e 61 6d 65  etBytes(procName
10450 20 2b 20 27 5c 30 27 29 3b 0d 0a 0d 0a 20 20 20   + '\0');....   
10460 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
10470 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
10480 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10490 2e 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78  .sqlite3_load_ex
104a0 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  tension(..      
104b0 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20            _sql, 
104c0 75 74 66 38 46 69 6c 65 4e 61 6d 65 2c 20 75 74  utf8FileName, ut
104d0 66 38 50 72 6f 63 4e 61 6d 65 2c 20 72 65 66 20  f8ProcName, ref 
104e0 70 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  pError);....    
104f0 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
10500 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
10510 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
10520 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
10530 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
10540 6e 2c 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  n, UTF8ToString(
10550 70 45 72 72 6f 72 2c 20 2d 31 29 29 3b 0d 0a 20  pError, -1));.. 
10560 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10570 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
10580 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10590 20 20 69 66 20 28 70 45 72 72 6f 72 20 21 3d 20    if (pError != 
105a0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
105b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
105c0 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73               Uns
105d0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
105e0 2e 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 45  .sqlite3_free(pE
105f0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
10600 20 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d          pError =
10610 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
10620 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
10630 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
10640 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65  ..    /// Enable
10650 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78  s or disabled ex
10660 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f  tended result co
10670 64 65 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  des returned by 
10680 53 51 4c 69 74 65 0d 0a 20 20 20 20 69 6e 74 65  SQLite..    inte
10690 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
106a0 69 64 20 53 65 74 45 78 74 65 6e 64 65 64 52 65  id SetExtendedRe
106b0 73 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62  sultCodes(bool b
106c0 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20  OnOff)..    {.. 
106d0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
106e0 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
106f0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10700 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65  ite3_extended_re
10710 73 75 6c 74 5f 63 6f 64 65 73 28 0d 0a 20 20 20  sult_codes(..   
10720 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f         _sql, (bO
10730 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b  nOff ? -1 : 0));
10740 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  ....      if (n 
10750 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
10760 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
10770 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
10780 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
10790 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  ());..    }..   
107a0 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61   /// Gets the la
107b0 73 74 20 53 51 4c 69 74 65 20 65 72 72 6f 72 20  st SQLite error 
107c0 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e  code..    intern
107d0 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
107e0 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73 75  teErrorCode Resu
107f0 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d  ltCode()..    {.
10800 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
10810 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10820 73 2e 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  s.sqlite3_errcod
10830 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d  e(_sql);..    }.
10840 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68  .    /// Gets th
10850 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65 78  e last SQLite ex
10860 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64  tended error cod
10870 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  e..    internal 
10880 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
10890 72 72 6f 72 43 6f 64 65 20 45 78 74 65 6e 64 65  rrorCode Extende
108a0 64 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20  dResultCode().. 
108b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
108c0 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
108d0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
108e0 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28  xtended_errcode(
108f0 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  _sql);..    }...
10900 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c  .    /// Add a l
10910 6f 67 20 6d 65 73 73 61 67 65 20 76 69 61 20 74  og message via t
10920 68 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65  he SQLite sqlite
10930 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e  3_log interface.
10940 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10950 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 67  verride void Log
10960 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65 45 72  Message(SQLiteEr
10970 72 6f 72 43 6f 64 65 20 69 45 72 72 43 6f 64 65  rorCode iErrCode
10980 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67  , string zMessag
10990 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
109a0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
109b0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 67  hods.sqlite3_log
109c0 28 69 45 72 72 43 6f 64 65 2c 20 54 6f 55 54 46  (iErrCode, ToUTF
109d0 38 28 7a 4d 65 73 73 61 67 65 29 29 3b 0d 0a 20  8(zMessage));.. 
109e0 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45     }....#if INTE
109f0 52 4f 50 5f 43 4f 44 45 43 0d 0a 20 20 20 20 69  ROP_CODEC..    i
10a00 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
10a10 20 76 6f 69 64 20 53 65 74 50 61 73 73 77 6f 72   void SetPasswor
10a20 64 28 62 79 74 65 5b 5d 20 70 61 73 73 77 6f 72  d(byte[] passwor
10a30 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a  dBytes)..    {..
10a40 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
10a50 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
10a60 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10a70 6c 69 74 65 33 5f 6b 65 79 28 5f 73 71 6c 2c 20  lite3_key(_sql, 
10a80 70 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20 70  passwordBytes, p
10a90 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e  asswordBytes.Len
10aa0 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  gth);..      if 
10ab0 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
10ac0 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
10ad0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
10ae0 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
10af0 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
10b00 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10b10 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 68 61  verride void Cha
10b20 6e 67 65 50 61 73 73 77 6f 72 64 28 62 79 74 65  ngePassword(byte
10b30 5b 5d 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79  [] newPasswordBy
10b40 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tes)..    {..   
10b50 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
10b60 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
10b70 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10b80 65 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c 20 6e  e3_rekey(_sql, n
10b90 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2c  ewPasswordBytes,
10ba0 20 28 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74   (newPasswordByt
10bb0 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30 20  es == null) ? 0 
10bc0 3a 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74  : newPasswordByt
10bd0 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20  es.Length);..   
10be0 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
10bf0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
10c00 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
10c10 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
10c20 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
10c30 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
10c40 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10c50 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 41 75  rride void SetAu
10c60 74 68 6f 72 69 7a 65 72 48 6f 6f 6b 28 53 51 4c  thorizerHook(SQL
10c70 69 74 65 41 75 74 68 6f 72 69 7a 65 72 43 61 6c  iteAuthorizerCal
10c80 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20  lback func)..   
10c90 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
10ca0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10cb0 6c 69 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72  lite3_set_author
10cc0 69 7a 65 72 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  izer(_sql, func,
10cd0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
10ce0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
10cf0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
10d00 6f 69 64 20 53 65 74 55 70 64 61 74 65 48 6f 6f  oid SetUpdateHoo
10d10 6b 28 53 51 4c 69 74 65 55 70 64 61 74 65 43 61  k(SQLiteUpdateCa
10d20 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
10d30 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
10d40 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
10d50 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f  qlite3_update_ho
10d60 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49  ok(_sql, func, I
10d70 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
10d80 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
10d90 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
10da0 64 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28  d SetCommitHook(
10db0 53 51 4c 69 74 65 43 6f 6d 6d 69 74 43 61 6c 6c  SQLiteCommitCall
10dc0 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
10dd0 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
10de0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10df0 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b  ite3_commit_hook
10e00 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
10e10 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
10e20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
10e30 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
10e40 53 65 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b  SetTraceCallback
10e50 28 53 51 4c 69 74 65 54 72 61 63 65 43 61 6c 6c  (SQLiteTraceCall
10e60 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
10e70 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
10e80 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10e90 69 74 65 33 5f 74 72 61 63 65 28 5f 73 71 6c 2c  ite3_trace(_sql,
10ea0 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
10eb0 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
10ec0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
10ed0 72 69 64 65 20 76 6f 69 64 20 53 65 74 52 6f 6c  ride void SetRol
10ee0 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65  lbackHook(SQLite
10ef0 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
10f00 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
10f10 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
10f20 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10f30 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f  _rollback_hook(_
10f40 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
10f50 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
10f60 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
10f70 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c  ary>..    /// Al
10f80 6c 6f 77 73 20 74 68 65 20 73 65 74 74 69 6e 67  lows the setting
10f90 20 6f 66 20 61 20 6c 6f 67 67 69 6e 67 20 63 61   of a logging ca
10fa0 6c 6c 62 61 63 6b 20 69 6e 76 6f 6b 65 64 20 62  llback invoked b
10fb0 79 20 53 51 4c 69 74 65 20 77 68 65 6e 20 61 0d  y SQLite when a.
10fc0 0a 20 20 20 20 2f 2f 2f 20 6c 6f 67 20 65 76 65  .    /// log eve
10fd0 6e 74 20 6f 63 63 75 72 73 2e 20 20 4f 6e 6c 79  nt occurs.  Only
10fe0 20 6f 6e 65 20 63 61 6c 6c 62 61 63 6b 20 6d 61   one callback ma
10ff0 79 20 62 65 20 73 65 74 2e 20 20 49 66 20 4e 55  y be set.  If NU
11000 4c 4c 20 69 73 20 70 61 73 73 65 64 2c 0d 0a 20  LL is passed,.. 
11010 20 20 20 2f 2f 2f 20 74 68 65 20 6c 6f 67 67 69     /// the loggi
11020 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 75  ng callback is u
11030 6e 72 65 67 69 73 74 65 72 65 64 2e 0d 0a 20 20  nregistered...  
11040 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
11050 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
11060 20 6e 61 6d 65 3d 22 66 75 6e 63 22 3e 54 68 65   name="func">The
11070 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69   callback functi
11080 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70  on to invoke.</p
11090 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
110a0 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20  returns>Returns 
110b0 61 20 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72  a result code</r
110c0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
110d0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
110e0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
110f0 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 53 51  etLogCallback(SQ
11100 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 20  LiteLogCallback 
11110 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
11120 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
11130 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
11140 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
11150 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f  qlite3_config_lo
11160 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g(..            
11170 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
11180 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
11190 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20 49 6e 74  G_LOG, func, Int
111a0 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20  Ptr.Zero);....  
111b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b        return rc;
111c0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
111d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
11230 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
11240 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65  ry>..    /// Cre
11250 61 74 65 73 20 61 20 6e 65 77 20 53 51 4c 69 74  ates a new SQLit
11260 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
11270 62 61 73 65 64 20 6f 6e 20 74 68 65 20 70 72 6f  based on the pro
11280 76 69 64 65 64 20 64 65 73 74 69 6e 61 74 69 6f  vided destinatio
11290 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62  n..    /// datab
112a0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
112b0 20 54 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   The source data
112c0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
112d0 69 73 20 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20  is the one..    
112e0 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77  /// associated w
112f0 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74 2e  ith this object.
11300 20 20 54 68 65 20 73 6f 75 72 63 65 20 61 6e 64    The source and
11310 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
11320 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63  abase..    /// c
11330 6f 6e 6e 65 63 74 69 6f 6e 73 20 63 61 6e 6e 6f  onnections canno
11340 74 20 62 65 20 74 68 65 20 73 61 6d 65 2e 0d 0a  t be the same...
11350 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
11360 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
11370 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 43 6e 6e  am name="destCnn
11380 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f  ">The destinatio
11390 6e 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  n database conne
113a0 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  ction.</param>..
113b0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
113c0 61 6d 65 3d 22 64 65 73 74 4e 61 6d 65 22 3e 54  ame="destName">T
113d0 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  he destination d
113e0 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70  atabase name.</p
113f0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
11400 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72  param name="sour
11410 63 65 4e 61 6d 65 22 3e 54 68 65 20 73 6f 75 72  ceName">The sour
11420 63 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  ce database name
11430 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
11440 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
11450 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20 62 61  newly created ba
11460 63 6b 75 70 20 6f 62 6a 65 63 74 2e 3c 2f 72 65  ckup object.</re
11470 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
11480 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
11490 4c 69 74 65 42 61 63 6b 75 70 20 49 6e 69 74 69  LiteBackup Initi
114a0 61 6c 69 7a 65 42 61 63 6b 75 70 28 0d 0a 20 20  alizeBackup(..  
114b0 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
114c0 65 63 74 69 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d  ection destCnn,.
114d0 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
114e0 64 65 73 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  destName,..     
114f0 20 20 20 73 74 72 69 6e 67 20 73 6f 75 72 63 65     string source
11500 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 29 0d  Name..        ).
11510 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
11520 69 66 20 28 64 65 73 74 43 6e 6e 20 3d 3d 20 6e  if (destCnn == n
11530 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
11540 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
11550 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
11560 6e 28 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d  n("destCnn");...
11570 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73  .        if (des
11580 74 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  tName == null)..
11590 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
115a0 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
115b0 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73  llException("des
115c0 74 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  tName");....    
115d0 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 4e 61      if (sourceNa
115e0 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
115f0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
11600 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
11610 78 63 65 70 74 69 6f 6e 28 22 73 6f 75 72 63 65  xception("source
11620 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name");....     
11630 20 20 20 53 51 4c 69 74 65 33 20 64 65 73 74 53     SQLite3 destS
11640 71 6c 69 74 65 33 20 3d 20 64 65 73 74 43 6e 6e  qlite3 = destCnn
11650 2e 5f 73 71 6c 20 61 73 20 53 51 4c 69 74 65 33  ._sql as SQLite3
11660 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
11670 28 64 65 73 74 53 71 6c 69 74 65 33 20 3d 3d 20  (destSqlite3 == 
11680 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
11690 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
116a0 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d  umentException(.
116b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
116c0 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f   "Destination co
116d0 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 6e 6f 20  nnection has no 
116e0 77 72 61 70 70 65 72 2e 22 2c 0d 0a 20 20 20 20  wrapper.",..    
116f0 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65 73              "des
11700 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tCnn");....     
11710 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
11720 69 6f 6e 48 61 6e 64 6c 65 20 64 65 73 74 48 61  ionHandle destHa
11730 6e 64 6c 65 20 3d 20 64 65 73 74 53 71 6c 69 74  ndle = destSqlit
11740 65 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20  e3._sql;....    
11750 20 20 20 20 69 66 20 28 64 65 73 74 48 61 6e 64      if (destHand
11760 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
11770 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
11780 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70  ew ArgumentExcep
11790 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
117a0 20 20 20 20 20 20 20 22 44 65 73 74 69 6e 61 74         "Destinat
117b0 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ion connection h
117c0 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
117d0 6e 64 6c 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20  ndle.",..       
117e0 20 20 20 20 20 20 20 20 20 22 64 65 73 74 43 6e           "destCn
117f0 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n");....        
11800 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
11810 48 61 6e 64 6c 65 20 73 6f 75 72 63 65 48 61 6e  Handle sourceHan
11820 64 6c 65 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20  dle = _sql;.... 
11830 20 20 20 20 20 20 20 69 66 20 28 73 6f 75 72 63         if (sourc
11840 65 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29  eHandle == null)
11850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
11860 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
11870 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
11880 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
11890 20 20 20 20 22 53 6f 75 72 63 65 20 63 6f 6e 6e      "Source conn
118a0 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e  ection has an in
118b0 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b  valid handle.");
118c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65  ....        byte
118d0 5b 5d 20 7a 44 65 73 74 4e 61 6d 65 20 3d 20 54  [] zDestName = T
118e0 6f 55 54 46 38 28 64 65 73 74 4e 61 6d 65 29 3b  oUTF8(destName);
118f0 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d  ..        byte[]
11900 20 7a 53 6f 75 72 63 65 4e 61 6d 65 20 3d 20 54   zSourceName = T
11910 6f 55 54 46 38 28 73 6f 75 72 63 65 4e 61 6d 65  oUTF8(sourceName
11920 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
11930 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
11940 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20   backupHandle = 
11950 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
11960 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
11970 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
11980 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
11990 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
119a0 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a  finally /* NOTE:
119b0 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20   Thread.Abort() 
119c0 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a  protection. */..
119d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
119e0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 62 61         IntPtr ba
119f0 63 6b 75 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  ckup = UnsafeNat
11a00 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
11a10 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74 28 0d  e3_backup_init(.
11a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11a30 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65   destHandle, zDe
11a40 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61  stName, sourceHa
11a50 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65 4e 61 6d  ndle, zSourceNam
11a60 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
11a70 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
11a80 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
11a90 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
11ab0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 65  LiteErrorCode re
11ac0 73 75 6c 74 43 6f 64 65 20 3d 20 52 65 73 75 6c  sultCode = Resul
11ad0 74 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  tCode();....    
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11af0 72 65 73 75 6c 74 43 6f 64 65 20 21 3d 20 53 51  resultCode != SQ
11b00 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
11b10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11b20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
11b30 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
11b40 28 72 65 73 75 6c 74 43 6f 64 65 2c 20 47 65 74  (resultCode, Get
11b50 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
11b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
11b70 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
11b80 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
11b90 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
11ba0 6f 6e 28 22 66 61 69 6c 65 64 20 74 6f 20 69 6e  on("failed to in
11bb0 69 74 69 61 6c 69 7a 65 20 62 61 63 6b 75 70 22  itialize backup"
11bc0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
11bd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
11be0 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20   backupHandle = 
11bf0 6e 65 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70  new SQLiteBackup
11c00 48 61 6e 64 6c 65 28 64 65 73 74 48 61 6e 64 6c  Handle(destHandl
11c10 65 2c 20 62 61 63 6b 75 70 29 3b 0d 0a 20 20 20  e, backup);..   
11c20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
11c30 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
11c40 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c  on.OnChanged(nul
11c50 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f  l, new Connectio
11c60 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  nEventArgs(..   
11c70 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
11c80 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79  onnectionEventTy
11c90 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48 61  pe.NewCriticalHa
11ca0 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  ndle, null, null
11cb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ,..            n
11cc0 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 62 61 63 6b 75  ull, null, backu
11cd0 70 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e  pHandle, null, n
11ce0 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 20 64 65  ew object[] { de
11cf0 73 74 43 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20  stCnn,..        
11d00 20 20 20 20 64 65 73 74 4e 61 6d 65 2c 20 73 6f      destName, so
11d10 75 72 63 65 4e 61 6d 65 20 7d 29 29 3b 0d 0a 0d  urceName }));...
11d20 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
11d30 6e 65 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70  new SQLiteBackup
11d40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  (..            t
11d50 68 69 73 2c 20 62 61 63 6b 75 70 48 61 6e 64 6c  his, backupHandl
11d60 65 2c 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a  e, destHandle, z
11d70 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65  DestName, source
11d80 48 61 6e 64 6c 65 2c 0d 0a 20 20 20 20 20 20 20  Handle,..       
11d90 20 20 20 20 20 7a 53 6f 75 72 63 65 4e 61 6d 65       zSourceName
11da0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
11db0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
11dc0 20 20 20 20 2f 2f 2f 20 43 6f 70 69 65 73 20 75      /// Copies u
11dd0 70 20 74 6f 20 4e 20 70 61 67 65 73 20 66 72 6f  p to N pages fro
11de0 6d 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74  m the source dat
11df0 61 62 61 73 65 20 74 6f 20 74 68 65 20 64 65 73  abase to the des
11e00 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f  tination..    //
11e10 2f 20 64 61 74 61 62 61 73 65 20 61 73 73 6f 63  / database assoc
11e20 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73  iated with the s
11e30 70 65 63 69 66 69 65 64 20 62 61 63 6b 75 70 20  pecified backup 
11e40 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
11e50 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
11e60 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
11e70 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61  ="backup">The ba
11e80 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 75  ckup object to u
11e90 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  se.</param>..   
11ea0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
11eb0 3d 22 6e 50 61 67 65 22 3e 0d 0a 20 20 20 20 2f  ="nPage">..    /
11ec0 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
11ed0 20 70 61 67 65 73 20 74 6f 20 63 6f 70 79 2c 20   pages to copy, 
11ee0 6e 65 67 61 74 69 76 65 20 74 6f 20 63 6f 70 79  negative to copy
11ef0 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 70   all remaining p
11f00 61 67 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ages...    /// <
11f10 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
11f20 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65   <param name="re
11f30 74 72 79 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53  try">..    /// S
11f40 65 74 20 74 6f 20 74 72 75 65 20 69 66 20 74 68  et to true if th
11f50 65 20 6f 70 65 72 61 74 69 6f 6e 20 6e 65 65 64  e operation need
11f60 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 64 20  s to be retried 
11f70 64 75 65 20 74 6f 20 64 61 74 61 62 61 73 65 0d  due to database.
11f80 0a 20 20 20 20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67  .    /// locking
11f90 20 69 73 73 75 65 73 3b 20 6f 74 68 65 72 77 69   issues; otherwi
11fa0 73 65 2c 20 73 65 74 20 74 6f 20 66 61 6c 73 65  se, set to false
11fb0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
11fc0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
11fd0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
11fe0 54 72 75 65 20 69 66 20 74 68 65 72 65 20 61 72  True if there ar
11ff0 65 20 6d 6f 72 65 20 70 61 67 65 73 20 74 6f 20  e more pages to 
12000 62 65 20 63 6f 70 69 65 64 2c 20 66 61 6c 73 65  be copied, false
12010 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20   otherwise...   
12020 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
12030 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
12040 65 72 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70  erride bool Step
12050 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
12060 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61   SQLiteBackup ba
12070 63 6b 75 70 2c 0d 0a 20 20 20 20 20 20 20 20 69  ckup,..        i
12080 6e 74 20 6e 50 61 67 65 2c 0d 0a 20 20 20 20 20  nt nPage,..     
12090 20 20 20 6f 75 74 20 62 6f 6f 6c 20 72 65 74 72     out bool retr
120a0 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  y..        )..  
120b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
120c0 72 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  ry = false;.... 
120d0 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75         if (backu
120e0 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  p == null)..    
120f0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
12100 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
12110 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22  ception("backup"
12120 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
12130 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
12140 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70   handle = backup
12150 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b  ._sqlite_backup;
12160 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
12170 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  handle == null).
12180 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
12190 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
121a0 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
121b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
121c0 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
121d0 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
121e0 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
121f0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
12200 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65  ndlePtr = handle
12210 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
12220 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e  (handlePtr == In
12230 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
12240 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
12250 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
12260 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
12270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
12280 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
12290 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
122a0 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a  le pointer.");..
122b0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
122c0 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
122d0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
122e0 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
122f0 5f 73 74 65 70 28 68 61 6e 64 6c 65 50 74 72 2c  _step(handlePtr,
12300 20 6e 50 61 67 65 29 3b 0d 0a 20 20 20 20 20 20   nPage);..      
12310 20 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65    backup._stepRe
12320 73 75 6c 74 20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54  sult = n; /* NOT
12330 45 3a 20 53 61 76 65 20 66 6f 72 20 75 73 65 20  E: Save for use 
12340 62 79 20 46 69 6e 69 73 68 42 61 63 6b 75 70 2e  by FinishBackup.
12350 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69   */....        i
12360 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
12370 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
12380 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12390 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
123a0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
123b0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
123c0 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
123d0 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20  de.Busy)..      
123e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
123f0 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a   retry = true;..
12400 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
12410 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
12420 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
12430 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
12440 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65  eErrorCode.Locke
12450 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
12460 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72 79             retry
12470 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
12480 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
12490 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
124a0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
124b0 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
124c0 43 6f 64 65 2e 44 6f 6e 65 29 0d 0a 20 20 20 20  Code.Done)..    
124d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
124e0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
124f0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
12500 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
12510 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12520 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
12530 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
12540 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
12550 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
12560 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
12570 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
12580 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  Returns the numb
12590 65 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61  er of pages rema
125a0 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69  ining to be copi
125b0 65 64 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72  ed from the sour
125c0 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61  ce..    /// data
125d0 62 61 73 65 20 74 6f 20 74 68 65 20 64 65 73 74  base to the dest
125e0 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65  ination database
125f0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
12600 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a   the specified..
12610 20 20 20 20 2f 2f 2f 20 62 61 63 6b 75 70 20 6f      /// backup o
12620 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bject...    /// 
12630 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
12640 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
12650 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63  "backup">The bac
12660 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68  kup object to ch
12670 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  eck.</param>..  
12680 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
12690 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
126a0 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20  es remaining to 
126b0 62 65 20 63 6f 70 69 65 64 2e 3c 2f 72 65 74 75  be copied.</retu
126c0 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
126d0 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
126e0 52 65 6d 61 69 6e 69 6e 67 42 61 63 6b 75 70 28  RemainingBackup(
126f0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
12700 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20  Backup backup.. 
12710 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
12720 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63  .        if (bac
12730 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  kup == null)..  
12740 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
12750 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
12760 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75  Exception("backu
12770 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p");....        
12780 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
12790 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b  le handle = back
127a0 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75  up._sqlite_backu
127b0 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  p;....        if
127c0 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c   (handle == null
127d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
127e0 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
127f0 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
12800 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
12810 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
12820 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
12830 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
12840 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
12850 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64  handlePtr = hand
12860 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  le;....        i
12870 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20  f (handlePtr == 
12880 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
12890 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
128a0 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
128b0 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
128c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128d0 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
128e0 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
128f0 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b  ndle pointer.");
12900 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
12910 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
12920 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
12930 61 63 6b 75 70 5f 72 65 6d 61 69 6e 69 6e 67 28  ackup_remaining(
12940 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20  handlePtr);..   
12950 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
12960 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
12970 20 52 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74   Returns the tot
12980 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  al number of pag
12990 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65  es in the source
129a0 20 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69   database associ
129b0 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 77 69  ated..    /// wi
129c0 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
129d0 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d   backup object..
129e0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
129f0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
12a00 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
12a10 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
12a20 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70  ect to check.</p
12a30 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
12a40 72 65 74 75 72 6e 73 3e 54 68 65 20 74 6f 74 61  returns>The tota
12a50 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  l number of page
12a60 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  s in the source 
12a70 64 61 74 61 62 61 73 65 2e 3c 2f 72 65 74 75 72  database.</retur
12a80 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
12a90 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 50  l override int P
12aa0 61 67 65 43 6f 75 6e 74 42 61 63 6b 75 70 28 0d  ageCountBackup(.
12ab0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
12ac0 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20  ackup backup..  
12ad0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
12ae0 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b          if (back
12af0 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  up == null)..   
12b00 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
12b10 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
12b20 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70  xception("backup
12b30 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
12b40 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c  QLiteBackupHandl
12b50 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75  e handle = backu
12b60 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70  p._sqlite_backup
12b70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
12b80 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (handle == null)
12b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
12ba0 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
12bb0 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
12bc0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
12bd0 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
12be0 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
12bf0 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a  d handle.");....
12c00 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
12c10 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c  andlePtr = handl
12c20 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
12c30 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49   (handlePtr == I
12c40 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
12c50 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
12c60 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
12c70 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
12c90 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
12ca0 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
12cb0 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d  dle pointer.");.
12cc0 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
12cd0 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
12ce0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
12cf0 63 6b 75 70 5f 70 61 67 65 63 6f 75 6e 74 28 68  ckup_pagecount(h
12d00 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20  andlePtr);..    
12d10 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
12d20 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
12d30 44 65 73 74 72 6f 79 73 20 74 68 65 20 62 61 63  Destroys the bac
12d40 6b 75 70 20 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c  kup object, roll
12d50 69 6e 67 20 62 61 63 6b 20 61 6e 79 20 62 61 63  ing back any bac
12d60 6b 75 70 20 74 68 61 74 20 6d 61 79 20 62 65 20  kup that may be 
12d70 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 70 72 6f 67  in..    /// prog
12d80 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
12d90 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
12da0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
12db0 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75  ackup">The backu
12dc0 70 20 6f 62 6a 65 63 74 20 74 6f 20 64 65 73 74  p object to dest
12dd0 72 6f 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  roy.</param>..  
12de0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
12df0 69 64 65 20 76 6f 69 64 20 46 69 6e 69 73 68 42  ide void FinishB
12e00 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
12e10 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63  SQLiteBackup bac
12e20 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  kup..        )..
12e30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
12e40 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c  f (backup == nul
12e50 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
12e60 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
12e70 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
12e80 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20  "backup");....  
12e90 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
12ea0 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  upHandle handle 
12eb0 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65  = backup._sqlite
12ec0 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20  _backup;....    
12ed0 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d      if (handle =
12ee0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
12ef0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
12f00 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
12f10 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
12f20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
12f30 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
12f40 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
12f50 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49  ");....        I
12f60 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20  ntPtr handlePtr 
12f70 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
12f80 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50       if (handleP
12f90 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tr == IntPtr.Zer
12fa0 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
12fb0 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
12fc0 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
12fd0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
12fe0 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
12ff0 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
13000 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74  lid handle point
13010 65 72 2e 22 29 3b 0d 0a 0d 0a 23 69 66 20 21 53  er.");....#if !S
13020 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
13030 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
13040 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
13050 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13060 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66  sqlite3_backup_f
13070 69 6e 69 73 68 5f 69 6e 74 65 72 6f 70 28 68 61  inish_interop(ha
13080 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6c 73 65  ndlePtr);..#else
13090 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
130a0 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
130b0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
130c0 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
130d0 5f 66 69 6e 69 73 68 28 68 61 6e 64 6c 65 50 74  _finish(handlePt
130e0 72 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  r);..#endif..   
130f0 20 20 20 20 20 68 61 6e 64 6c 65 2e 53 65 74 48       handle.SetH
13100 61 6e 64 6c 65 41 73 49 6e 76 61 6c 69 64 28 29  andleAsInvalid()
13110 3b 0d 0a 0d 0a 23 69 66 20 43 4f 55 4e 54 5f 48  ;....#if COUNT_H
13120 41 4e 44 4c 45 0d 0a 20 20 20 20 20 20 20 20 69  ANDLE..        i
13130 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  f ((n == SQLiteE
13140 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 20  rrorCode.Ok) || 
13150 28 6e 20 3d 3d 20 62 61 63 6b 75 70 2e 5f 73 74  (n == backup._st
13160 65 70 52 65 73 75 6c 74 29 29 20 68 61 6e 64 6c  epResult)) handl
13170 65 2e 57 61 73 52 65 6c 65 61 73 65 64 4f 6b 28  e.WasReleasedOk(
13180 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
13190 20 20 20 20 20 20 69 66 20 28 28 6e 20 21 3d 20        if ((n != 
131a0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
131b0 4f 6b 29 20 26 26 20 28 6e 20 21 3d 20 62 61 63  Ok) && (n != bac
131c0 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29  kup._stepResult)
131d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
131e0 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
131f0 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
13200 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
13210 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
13220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
13280 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
13290 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69  .    /// Determi
132a0 6e 65 73 20 69 66 20 74 68 65 20 53 51 4c 69 74  nes if the SQLit
132b0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68  e core library h
132c0 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  as been initiali
132d0 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20  zed for the..   
132e0 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f   /// current pro
132f0 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cess...    /// <
13300 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
13310 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
13320 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20    /// A boolean 
13330 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68  indicating wheth
13340 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51  er or not the SQ
13350 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
13360 79 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20  y has been..    
13370 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  /// initialized 
13380 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
13390 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f  process...    //
133a0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
133b0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
133c0 69 64 65 20 62 6f 6f 6c 20 49 73 49 6e 69 74 69  ide bool IsIniti
133d0 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d  alized()..    {.
133e0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
133f0 53 74 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69  StaticIsInitiali
13400 7a 65 64 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  zed();..    }...
13410 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
13420 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65  y>..    /// Dete
13430 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20 53 51  rmines if the SQ
13440 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
13450 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69  y has been initi
13460 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a  alized for the..
13470 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20      /// current 
13480 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f  process...    //
13490 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
134a0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
134b0 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65  .    /// A boole
134c0 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68  an indicating wh
134d0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
134e0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
134f0 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d 0a 20  rary has been.. 
13500 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a     /// initializ
13510 65 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  ed for the curre
13520 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20  nt process...   
13530 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
13540 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
13550 61 74 69 63 20 62 6f 6f 6c 20 53 74 61 74 69 63  atic bool Static
13560 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d  IsInitialized().
13570 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
13580 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 42  //..        // B
13590 55 47 46 49 58 3a 20 50 72 65 76 65 6e 74 20 72  UGFIX: Prevent r
135a0 61 63 65 73 20 77 69 74 68 20 6f 74 68 65 72 20  aces with other 
135b0 74 68 72 65 61 64 73 20 66 6f 72 20 74 68 69 73  threads for this
135c0 20 65 6e 74 69 72 65 20 62 6c 6f 63 6b 2c 20 64   entire block, d
135d0 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ue..        //  
135e0 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 74 72         to the tr
135f0 79 2f 66 69 6e 61 6c 6c 79 20 73 65 6d 61 6e 74  y/finally semant
13600 69 63 73 2e 20 20 53 65 65 20 74 69 63 6b 65 74  ics.  See ticket
13610 20 5b 37 32 39 30 35 63 39 61 37 37 5d 2e 0d 0a   [72905c9a77]...
13620 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
13630 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f      lock (syncRo
13640 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ot)..        {..
13650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
13660 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
13670 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20 73 74  OTE: Save the st
13680 61 74 65 20 6f 66 20 74 68 65 20 6c 6f 67 67 69  ate of the loggi
13690 6e 67 20 63 6c 61 73 73 20 61 6e 64 20 74 68 65  ng class and the
136a0 6e 20 72 65 73 74 6f 72 65 20 69 74 0d 0a 20 20  n restore it..  
136b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
136c0 20 20 20 61 66 74 65 72 20 77 65 20 61 72 65 20     after we are 
136d0 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20 6c 6f  done to avoid lo
136e0 67 67 69 6e 67 20 74 6f 6f 20 6d 61 6e 79 20 66  gging too many f
136f0 61 6c 73 65 20 65 72 72 6f 72 73 2e 0d 0a 20 20  alse errors...  
13700 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
13710 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
13720 61 76 65 64 45 6e 61 62 6c 65 64 20 3d 20 53 51  avedEnabled = SQ
13730 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 3b  LiteLog.Enabled;
13740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
13750 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20  LiteLog.Enabled 
13760 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  = false;....    
13770 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
13780 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
13790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
137a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137b0 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6d 65  // NOTE: This me
137c0 74 68 6f 64 20 5b 61 62 5d 75 73 65 73 20 74 68  thod [ab]uses th
137d0 65 20 66 61 63 74 20 74 68 61 74 20 53 51 4c 69  e fact that SQLi
137e0 74 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 0d 0a  te will always..
137f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13800 2f 2f 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  //       return 
13810 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 66 6f 72  SQLITE_ERROR for
13820 20 61 6e 79 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6e   any unknown con
13830 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
13840 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
13850 20 20 20 2f 2f 20 20 20 20 20 20 20 2a 75 6e 6c     //       *unl
13860 65 73 73 2a 20 74 68 65 20 53 51 4c 69 74 65 20  ess* the SQLite 
13870 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 65  library has alre
13880 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  ady been initial
13890 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  ized...         
138a0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
138b0 49 6e 20 74 68 61 74 20 63 61 73 65 20 69 74 20  In that case it 
138c0 77 69 6c 6c 20 61 6c 77 61 79 73 20 72 65 74 75  will always retu
138d0 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
138e0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
138f0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
13900 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
13910 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61  orCode rc = Unsa
13920 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13930 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6e  sqlite3_config_n
13940 6f 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  one(..          
13950 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
13960 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51  ConfigOpsEnum.SQ
13970 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45  LITE_CONFIG_NONE
13980 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13990 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 72 63        return (rc
139a0 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
139b0 6f 64 65 2e 4d 69 73 75 73 65 29 3b 0d 0a 20 20  ode.Misuse);..  
139c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
139d0 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
139e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
139f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13a00 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c   SQLiteLog.Enabl
13a10 65 64 20 3d 20 73 61 76 65 64 45 6e 61 62 6c 65  ed = savedEnable
13a20 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
13a30 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
13a40 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
13a50 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
13a60 2f 20 48 65 6c 70 65 72 20 66 75 6e 63 74 69 6f  / Helper functio
13a70 6e 20 74 6f 20 72 65 74 72 69 65 76 65 20 61 20  n to retrieve a 
13a80 63 6f 6c 75 6d 6e 20 6f 66 20 64 61 74 61 20 66  column of data f
13a90 72 6f 6d 20 61 6e 20 61 63 74 69 76 65 20 73 74  rom an active st
13aa0 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f  atement...    //
13ab0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
13ac0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
13ad0 65 3d 22 73 74 6d 74 22 3e 54 68 65 20 73 74 61  e="stmt">The sta
13ae0 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 73 74 65  tement being ste
13af0 70 28 29 27 64 20 74 68 72 6f 75 67 68 3c 2f 70  p()'d through</p
13b00 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
13b10 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67  param name="flag
13b20 73 22 3e 54 68 65 20 66 6c 61 67 73 20 61 73 73  s">The flags ass
13b30 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
13b40 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61   connection.</pa
13b50 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
13b60 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78  aram name="index
13b70 22 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 64  ">The column ind
13b80 65 78 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  ex to retrieve</
13b90 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
13ba0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70  <param name="typ
13bb0 22 3e 54 68 65 20 74 79 70 65 20 6f 66 20 64 61  ">The type of da
13bc0 74 61 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ta contained in 
13bd0 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  the column.  If 
13be0 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74  Uninitialized, t
13bf0 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c  his function wil
13c00 6c 20 72 65 74 72 69 65 76 65 20 74 68 65 20 64  l retrieve the d
13c10 61 74 61 74 79 70 65 20 69 6e 66 6f 72 6d 61 74  atatype informat
13c20 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ion.</param>..  
13c30 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
13c40 65 74 75 72 6e 73 20 74 68 65 20 64 61 74 61 20  eturns the data 
13c50 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72  in the column</r
13c60 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
13c70 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6f  ernal override o
13c80 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 53  bject GetValue(S
13c90 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
13ca0 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
13cb0 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
13cc0 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 53 51 4c  , int index, SQL
13cd0 69 74 65 54 79 70 65 20 74 79 70 29 0d 0a 20 20  iteType typ)..  
13ce0 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 49    {..      if (I
13cf0 73 4e 75 6c 6c 28 73 74 6d 74 2c 20 69 6e 64 65  sNull(stmt, inde
13d00 78 29 29 20 72 65 74 75 72 6e 20 44 42 4e 75 6c  x)) return DBNul
13d10 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l.Value;..      
13d20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66  TypeAffinity aff
13d30 20 3d 20 74 79 70 2e 41 66 66 69 6e 69 74 79 3b   = typ.Affinity;
13d40 0d 0a 20 20 20 20 20 20 54 79 70 65 20 74 20 3d  ..      Type t =
13d50 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
13d60 69 66 20 28 74 79 70 2e 54 79 70 65 20 21 3d 20  if (typ.Type != 
13d70 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 0d 0a  DbType.Object)..
13d80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13d90 20 74 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65   t = SQLiteConve
13da0 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54 6f 54  rt.SQLiteTypeToT
13db0 79 70 65 28 74 79 70 29 3b 0d 0a 20 20 20 20 20  ype(typ);..     
13dc0 20 20 20 61 66 66 20 3d 20 54 79 70 65 54 6f 41     aff = TypeToA
13dd0 66 66 69 6e 69 74 79 28 74 29 3b 0d 0a 20 20 20  ffinity(t);..   
13de0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
13df0 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
13e00 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
13e10 2e 47 65 74 41 6c 6c 41 73 54 65 78 74 29 20 3d  .GetAllAsText) =
13e20 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
13e30 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73  onFlags.GetAllAs
13e40 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Text)..         
13e50 20 72 65 74 75 72 6e 20 47 65 74 54 65 78 74 28   return GetText(
13e60 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d  stmt, index);...
13e70 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28 61  .      switch (a
13e80 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ff)..      {..  
13e90 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
13ea0 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20  ffinity.Blob:.. 
13eb0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
13ec0 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e  .Type == DbType.
13ed0 47 75 69 64 20 26 26 20 74 79 70 2e 41 66 66 69  Guid && typ.Affi
13ee0 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69  nity == TypeAffi
13ef0 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20 20 20 20  nity.Text)..    
13f00 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
13f10 65 77 20 47 75 69 64 28 47 65 74 54 65 78 74 28  ew Guid(GetText(
13f20 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
13f30 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
13f40 6e 20 3d 20 28 69 6e 74 29 47 65 74 42 79 74 65  n = (int)GetByte
13f50 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30  s(stmt, index, 0
13f60 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a  , null, 0, 0);..
13f70 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
13f80 20 62 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e 5d   b = new byte[n]
13f90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 47 65 74  ;..          Get
13fa0 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65  Bytes(stmt, inde
13fb0 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d  x, 0, b, 0, n);.
13fc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
13fd0 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54  (typ.Type == DbT
13fe0 79 70 65 2e 47 75 69 64 20 26 26 20 6e 20 3d 3d  ype.Guid && n ==
13ff0 20 31 36 29 0d 0a 20 20 20 20 20 20 20 20 20 20   16)..          
14000 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69    return new Gui
14010 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  d(b);....       
14020 20 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a 20 20     return b;..  
14030 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
14040 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65  ffinity.DateTime
14050 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  :..          ret
14060 75 72 6e 20 47 65 74 44 61 74 65 54 69 6d 65 28  urn GetDateTime(
14070 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
14080 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
14090 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a  Affinity.Double:
140a0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
140b0 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
140c0 6e 20 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74  n GetDouble(stmt
140d0 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
140e0 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
140f0 65 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47  ert.ChangeType(G
14100 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69  etDouble(stmt, i
14110 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b  ndex), t, null);
14120 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
14130 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
14140 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  4:..          if
14150 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74   (t == null) ret
14160 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74 6d  urn GetInt64(stm
14170 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
14180 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
14190 79 70 65 6f 66 28 53 42 79 74 65 29 29 20 72 65  ypeof(SByte)) re
141a0 74 75 72 6e 20 47 65 74 53 42 79 74 65 28 73 74  turn GetSByte(st
141b0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
141c0 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
141d0 74 79 70 65 6f 66 28 42 79 74 65 29 29 20 72 65  typeof(Byte)) re
141e0 74 75 72 6e 20 47 65 74 42 79 74 65 28 73 74 6d  turn GetByte(stm
141f0 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
14200 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
14210 79 70 65 6f 66 28 49 6e 74 31 36 29 29 20 72 65  ypeof(Int16)) re
14220 74 75 72 6e 20 47 65 74 49 6e 74 31 36 28 73 74  turn GetInt16(st
14230 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
14240 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
14250 74 79 70 65 6f 66 28 55 49 6e 74 31 36 29 29 20  typeof(UInt16)) 
14260 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 31 36  return GetUInt16
14270 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
14280 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
14290 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74 33 32 29  == typeof(Int32)
142a0 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 33  ) return GetInt3
142b0 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  2(stmt, index);.
142c0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
142d0 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 33   == typeof(UInt3
142e0 32 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49  2)) return GetUI
142f0 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
14300 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
14310 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49   (t == typeof(UI
14320 6e 74 36 34 29 29 20 72 65 74 75 72 6e 20 47 65  nt64)) return Ge
14330 74 55 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e  tUInt64(stmt, in
14340 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
14350 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
14360 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 49 6e  ChangeType(GetIn
14370 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
14380 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  , t, null);..   
14390 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20       default:.. 
143a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
143b0 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
143c0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  dex);..      }..
143d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
143e0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
143f0 6e 74 20 47 65 74 43 75 72 73 6f 72 46 6f 72 54  nt GetCursorForT
14400 61 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65  able(SQLiteState
14410 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 64  ment stmt, int d
14420 62 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67 65 29  b, int rootPage)
14430 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
14440 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
14450 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
14460 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
14470 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 75  sqlite3_table_cu
14480 72 73 6f 72 5f 69 6e 74 65 72 6f 70 28 73 74 6d  rsor_interop(stm
14490 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
144a0 64 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a  db, rootPage);..
144b0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
144c0 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d  urn -1;..#endif.
144d0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
144e0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
144f0 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 6f 72  long GetRowIdFor
14500 43 75 72 73 6f 72 28 53 51 4c 69 74 65 53 74 61  Cursor(SQLiteSta
14510 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
14520 20 63 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d   cursor)..    {.
14530 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
14540 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e  NDARD..      lon
14550 67 20 72 6f 77 69 64 3b 0d 0a 20 20 20 20 20 20  g rowid;..      
14560 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
14570 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
14580 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
14590 5f 63 75 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e  _cursor_rowid_in
145a0 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
145b0 74 65 5f 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c  te_stmt, cursor,
145c0 20 6f 75 74 20 72 6f 77 69 64 29 3b 0d 0a 20 20   out rowid);..  
145d0 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51      if (rc == SQ
145e0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
145f0 29 20 72 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d  ) return rowid;.
14600 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
14610 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  0;..#else..     
14620 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64   return 0;..#end
14630 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
14640 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
14650 64 65 20 76 6f 69 64 20 47 65 74 49 6e 64 65 78  de void GetIndex
14660 43 6f 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e  ColumnExtendedIn
14670 66 6f 28 73 74 72 69 6e 67 20 64 61 74 61 62 61  fo(string databa
14680 73 65 2c 20 73 74 72 69 6e 67 20 69 6e 64 65 78  se, string index
14690 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c  , string column,
146a0 20 6f 75 74 20 69 6e 74 20 73 6f 72 74 4d 6f 64   out int sortMod
146b0 65 2c 20 6f 75 74 20 69 6e 74 20 6f 6e 45 72 72  e, out int onErr
146c0 6f 72 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63  or, out string c
146d0 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
146e0 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
146f0 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
14700 20 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c        IntPtr col
14710 6c 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 6f  l;..      int co
14720 6c 6c 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 53 51  lllen;..      SQ
14730 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
14740 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 63 20 3d 20  ;....      rc = 
14750 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
14760 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
14770 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e  x_column_info_in
14780 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
14790 46 38 28 64 61 74 61 62 61 73 65 29 2c 20 54 6f  F8(database), To
147a0 55 54 46 38 28 69 6e 64 65 78 29 2c 20 54 6f 55  UTF8(index), ToU
147b0 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74  TF8(column), out
147c0 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74 20 6f   sortMode, out o
147d0 6e 45 72 72 6f 72 2c 20 6f 75 74 20 63 6f 6c 6c  nError, out coll
147e0 2c 20 6f 75 74 20 63 6f 6c 6c 6c 65 6e 29 3b 0d  , out colllen);.
147f0 0a 20 20 20 20 20 20 69 66 20 28 72 63 20 21 3d  .      if (rc !=
14800 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
14810 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
14820 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72  QLiteException(r
14830 63 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  c, null);....   
14840 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75     collationSequ
14850 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72  ence = UTF8ToStr
14860 69 6e 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65  ing(coll, collle
14870 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
14880 20 20 73 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d    sortMode = 0;.
14890 0a 20 20 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d  .      onError =
148a0 20 32 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61   2;..      colla
148b0 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 22  tionSequence = "
148c0 42 49 4e 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66  BINARY";..#endif
148d0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
148e0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
148f0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
14900 20 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72   FileControl(str
14910 69 6e 67 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74  ing zDbName, int
14920 20 6f 70 2c 20 49 6e 74 50 74 72 20 70 41 72 67   op, IntPtr pArg
14930 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
14940 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
14950 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
14960 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
14970 5f 73 71 6c 2c 20 28 7a 44 62 4e 61 6d 65 20 21  _sql, (zDbName !
14980 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 55 54 46 38  = null) ? ToUTF8
14990 28 7a 44 62 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c  (zDbName) : null
149a0 2c 20 6f 70 2c 20 70 41 72 67 29 3b 0d 0a 20 20  , op, pArg);..  
149b0 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a             }..  }..}..