System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 624693b6ef7ec832beeab872f97ecd1dd178d694:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 20 0d 0a  soft.com).. * ..
00b0: 20 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74   * Released to t
00c0: 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e  he public domain
00d0: 2c 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77  , use at your ow
00e0: 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a  n risk!.. ******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65  **/....namespace
0130: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
0140: 69 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20  ite..{..  using 
0150: 53 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67  System;..  using
0160: 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69   System.Collecti
0170: 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 0d 0a  ons.Generic;....
0180: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
0190: 5f 32 30 20 26 26 20 28 54 52 41 43 45 5f 43 4f  _20 && (TRACE_CO
01a0: 4e 4e 45 43 54 49 4f 4e 20 7c 7c 20 54 52 41 43  NNECTION || TRAC
01b0: 45 5f 53 54 41 54 45 4d 45 4e 54 29 0d 0a 20 20  E_STATEMENT)..  
01c0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61  using System.Dia
01d0: 67 6e 6f 73 74 69 63 73 3b 0d 0a 23 65 6e 64 69  gnostics;..#endi
01e0: 66 0d 0a 0d 0a 20 20 75 73 69 6e 67 20 53 79 73  f....  using Sys
01f0: 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f  tem.Globalizatio
0200: 6e 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  n;..  using Syst
0210: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0220: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 20 20 75  opServices;..  u
0230: 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74  sing System.Text
0240: 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;....  /// <summ
0250: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  ary>..  /// This
0260: 20 69 73 20 74 68 65 20 6d 65 74 68 6f 64 20 73   is the method s
0270: 69 67 6e 61 74 75 72 65 20 66 6f 72 20 74 68 65  ignature for the
0280: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
0290: 72 61 72 79 20 6c 6f 67 67 69 6e 67 20 63 61 6c  rary logging cal
02a0: 6c 62 61 63 6b 0d 0a 20 20 2f 2f 2f 20 66 75 6e  lback..  /// fun
02b0: 63 74 69 6f 6e 20 66 6f 72 20 75 73 65 20 77 69  ction for use wi
02c0: 74 68 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  th sqlite3_log()
02d0: 20 61 6e 64 20 74 68 65 20 53 51 4c 49 54 45 5f   and the SQLITE_
02e0: 43 4f 4e 46 49 47 5f 4c 4f 47 2e 0d 0a 20 20 2f  CONFIG_LOG...  /
02f0: 2f 2f 0d 0a 20 20 2f 2f 2f 20 57 41 52 4e 49 4e  //..  /// WARNIN
0300: 47 3a 20 54 68 69 73 20 64 65 6c 65 67 61 74 65  G: This delegate
0310: 20 69 73 20 75 73 65 64 20 6d 6f 72 65 2d 6f 72   is used more-or
0320: 2d 6c 65 73 73 20 64 69 72 65 63 74 6c 79 20 62  -less directly b
0330: 79 20 6e 61 74 69 76 65 20 63 6f 64 65 2c 20 64  y native code, d
0340: 6f 0d 0a 20 20 2f 2f 2f 20 20 20 20 20 20 20 20  o..  ///        
0350: 20 20 6e 6f 74 20 6d 6f 64 69 66 79 20 69 74 73    not modify its
0360: 20 74 79 70 65 20 73 69 67 6e 61 74 75 72 65 2e   type signature.
0370: 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
0380: 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  y>..  /// <param
0390: 20 6e 61 6d 65 3d 22 70 55 73 65 72 44 61 74 61   name="pUserData
03a0: 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 65 78  ">..  /// The ex
03b0: 74 72 61 20 64 61 74 61 20 61 73 73 6f 63 69 61  tra data associa
03c0: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6d 65  ted with this me
03d0: 73 73 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d 0a  ssage, if any...
03e0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
03f0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
0400: 65 3d 22 65 72 72 6f 72 43 6f 64 65 22 3e 0d 0a  e="errorCode">..
0410: 20 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72 20    /// The error 
0420: 63 6f 64 65 20 61 73 73 6f 63 69 61 74 65 64 20  code associated 
0430: 77 69 74 68 20 74 68 69 73 20 6d 65 73 73 61 67  with this messag
0440: 65 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  e...  /// </para
0450: 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  m>..  /// <param
0460: 20 6e 61 6d 65 3d 22 70 4d 65 73 73 61 67 65 22   name="pMessage"
0470: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 6d 65 73  >..  /// The mes
0480: 73 61 67 65 20 73 74 72 69 6e 67 20 74 6f 20 62  sage string to b
0490: 65 20 6c 6f 67 67 65 64 2e 0d 0a 20 20 2f 2f 2f  e logged...  ///
04a0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 23 69 66 20 21   </param>..#if !
04b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
04c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 5b 55 6e  FRAMEWORK..  [Un
04d0: 6d 61 6e 61 67 65 64 46 75 6e 63 74 69 6f 6e 50  managedFunctionP
04e0: 6f 69 6e 74 65 72 28 43 61 6c 6c 69 6e 67 43 6f  ointer(CallingCo
04f0: 6e 76 65 6e 74 69 6f 6e 2e 43 64 65 63 6c 29 5d  nvention.Cdecl)]
0500: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 69 6e 74 65  ..#endif..  inte
0510: 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f  rnal delegate vo
0520: 69 64 20 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c  id SQLiteLogCall
0530: 62 61 63 6b 28 49 6e 74 50 74 72 20 70 55 73 65  back(IntPtr pUse
0540: 72 44 61 74 61 2c 20 69 6e 74 20 65 72 72 6f 72  rData, int error
0550: 43 6f 64 65 2c 20 49 6e 74 50 74 72 20 70 4d 65  Code, IntPtr pMe
0560: 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f  ssage);....  ///
0570: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f   <summary>..  //
0580: 2f 20 54 68 69 73 20 63 6c 61 73 73 20 69 6d 70  / This class imp
0590: 6c 65 6d 65 6e 74 73 20 53 51 4c 69 74 65 42 61  lements SQLiteBa
05a0: 73 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2c 20 61  se completely, a
05b0: 6e 64 20 69 73 20 74 68 65 20 67 75 74 73 20 6f  nd is the guts o
05c0: 66 20 74 68 65 20 63 6f 64 65 20 74 68 61 74 20  f the code that 
05d0: 69 6e 74 65 72 6f 70 27 73 20 53 51 4c 69 74 65  interop's SQLite
05e0: 20 77 69 74 68 20 2e 4e 45 54 0d 0a 20 20 2f 2f   with .NET..  //
05f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0600: 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 53  internal class S
0610: 51 4c 69 74 65 33 20 3a 20 53 51 4c 69 74 65 42  QLite3 : SQLiteB
0620: 61 73 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 70 72  ase..  {..    pr
0630: 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a  ivate static obj
0640: 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e  ect syncRoot = n
0650: 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 0d 0a  ew object();....
0660: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 2f 2f 20 4e      //..    // N
0670: 4f 54 45 3a 20 54 68 69 73 20 69 73 20 74 68 65  OTE: This is the
0680: 20 70 75 62 6c 69 63 20 6b 65 79 20 66 6f 72 20   public key for 
0690: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
06a0: 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 2e  SQLite assembly.
06b0: 20 20 49 66 20 79 6f 75 20 63 68 61 6e 67 65 20    If you change 
06c0: 74 68 65 0d 0a 20 20 20 20 2f 2f 20 20 20 20 20  the..    //     
06d0: 20 20 53 4e 4b 20 66 69 6c 65 2c 20 79 6f 75 20    SNK file, you 
06e0: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 63 68 61  will need to cha
06f0: 6e 67 65 20 74 68 69 73 20 61 73 20 77 65 6c 6c  nge this as well
0700: 2e 0d 0a 20 20 20 20 2f 2f 0d 0a 20 20 20 20 69  ...    //..    i
0710: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74  nternal const st
0720: 72 69 6e 67 20 50 75 62 6c 69 63 4b 65 79 20 3d  ring PublicKey =
0730: 0d 0a 20 20 20 20 20 20 20 20 22 30 30 32 34 30  ..        "00240
0740: 30 30 30 30 34 38 30 30 30 30 30 39 34 30 30 30  0000480000094000
0750: 30 30 30 30 36 30 32 30 30 30 30 30 30 32 34 30  0000602000000240
0760: 30 30 30 35 32 35 33 34 31 33 31 30 30 30 34 30  0005253413100040
0770: 30 30 30 30 31 30 30 30 31 30 30 30 35 61 32 38  0000100010005a28
0780: 38 64 65 35 36 38 37 63 34 65 31 22 20 2b 0d 0a  8de5687c4e1" +..
0790: 20 20 20 20 20 20 20 20 22 62 36 32 31 64 64 66          "b621ddf
07a0: 66 35 64 38 34 34 37 32 37 34 31 38 39 35 36 39  f5d8447274189569
07b0: 39 37 66 34 37 35 65 62 38 32 39 34 32 39 65 34  97f475eb829429e4
07c0: 31 31 61 66 66 33 65 39 33 66 39 37 62 37 30 64  11aff3e93f97b70d
07d0: 65 36 39 38 62 39 37 32 36 34 30 39 32 35 62 64  e698b972640925bd
07e0: 64 34 34 32 38 30 64 66 30 22 20 2b 0d 0a 20 20  d44280df0" +..  
07f0: 20 20 20 20 20 20 22 61 32 35 61 38 34 33 32 36        "a25a84326
0800: 36 39 37 33 37 30 34 31 33 37 63 62 62 30 65 37  6973704137cbb0e7
0810: 34 34 31 63 31 66 65 37 63 61 65 34 65 32 34 34  441c1fe7cae4e244
0820: 30 61 65 39 31 61 62 38 63 64 65 33 39 33 33 66  0ae91ab8cde3933f
0830: 65 62 63 62 31 61 63 34 38 64 64 33 33 62 34 30  ebcb1ac48dd33b40
0840: 65 31 33 63 34 32 31 22 20 2b 0d 0a 20 20 20 20  e13c421" +..    
0850: 20 20 20 20 22 64 38 32 31 35 63 31 38 61 34 33      "d8215c18a43
0860: 34 39 61 34 33 36 64 64 34 39 39 65 33 63 33 38  49a436dd499e3c38
0870: 35 63 63 36 38 33 30 31 35 66 38 38 36 66 36 63  5cc683015f886f6c
0880: 31 30 62 64 39 30 31 31 35 65 62 32 62 64 36 31  10bd90115eb2bd61
0890: 62 36 37 37 35 30 38 33 39 65 33 61 31 39 39 34  b67750839e3a1994
08a0: 31 64 63 39 63 22 3b 0d 0a 0d 0a 23 69 66 20 21  1dc9c";....#if !
08b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
08c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 69  FRAMEWORK..    i
08d0: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74  nternal const st
08e0: 72 69 6e 67 20 44 65 73 69 67 6e 65 72 56 65 72  ring DesignerVer
08f0: 73 69 6f 6e 20 3d 20 22 31 2e 30 2e 38 37 2e 30  sion = "1.0.87.0
0900: 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  ";..#endif....  
0910: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0920: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 70 61  .    /// The opa
0930: 71 75 65 20 70 6f 69 6e 74 65 72 20 72 65 74 75  que pointer retu
0940: 72 6e 65 64 20 74 6f 20 75 73 20 62 79 20 74 68  rned to us by th
0950: 65 20 73 71 6c 69 74 65 20 70 72 6f 76 69 64 65  e sqlite provide
0960: 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  r..    /// </sum
0970: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0980: 63 74 65 64 20 69 6e 74 65 72 6e 61 6c 20 53 51  cted internal SQ
0990: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
09a0: 6e 64 6c 65 20 5f 73 71 6c 3b 0d 0a 20 20 20 20  ndle _sql;..    
09b0: 70 72 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67  protected string
09c0: 20 5f 66 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20   _fileName;..   
09d0: 20 70 72 6f 74 65 63 74 65 64 20 62 6f 6f 6c 20   protected bool 
09e0: 5f 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 70  _usePool;..    p
09f0: 72 6f 74 65 63 74 65 64 20 69 6e 74 20 5f 70 6f  rotected int _po
0a00: 6f 6c 56 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 23 69  olVersion;....#i
0a10: 66 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54  f (NET_35 || NET
0a20: 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 29 20 26  _40 || NET_45) &
0a30: 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  & !PLATFORM_COMP
0a40: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
0a50: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 5f    private bool _
0a60: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 3b 0d  buildingSchema;.
0a70: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
0a80: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0a90: 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72 2d 64    /// The user-d
0aa0: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
0ab0: 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e 20 74   registered on t
0ac0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  his connection..
0ad0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ae0: 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  y>..    protecte
0af0: 64 20 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 20 20 20 20 20 20  ileName;..      
11d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
11e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
11f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1240: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
1250: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
1260: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
1270: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1280: 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20   disposed;..    
1290: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
12a0: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
12b0: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b 0d  throw */..    {.
12c0: 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49  .#if THROW_ON_DI
12d0: 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20  SPOSED..        
12e0: 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20  if (disposed).. 
12f0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1300: 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
1310: 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74 79 70  sedException(typ
1320: 65 6f 66 28 53 51 4c 69 74 65 33 29 2e 4e 61 6d  eof(SQLite3).Nam
1330: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
1340: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
1350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
13b0: 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72   protected overr
13c0: 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65  ide void Dispose
13d0: 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29  (bool disposing)
13e0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
13f0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1410: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
1420: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1430: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
1440: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
1450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1460: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1470: 20 20 20 2f 2f 20 20 20 20 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 0d 0a 20  /////////////.. 
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14b0: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
14c0: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
14d0: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
14e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
14f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1510: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1520: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1560: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
1570: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
1580: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
1590: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d0: 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45  ////....#if INTE
15e0: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
15f0: 45 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  E..             
1600: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1610: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1620: 49 66 20 61 6e 79 20 6d 6f 64 75 6c 65 73 20 77  If any modules w
1630: 65 72 65 20 63 72 65 61 74 65 64 2c 20 61 74 74  ere created, att
1640: 65 6d 70 74 20 74 6f 20 64 69 73 70 6f 73 65 20  empt to dispose 
1650: 6f 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  of..            
1660: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
1670: 6d 20 6e 6f 77 2e 20 20 54 68 69 73 20 63 6f 64  m now.  This cod
1680: 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f  e is designed to
1690: 20 61 76 6f 69 64 20 74 68 72 6f 77 69 6e 67 0d   avoid throwing.
16a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b0: 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70 74   //       except
16c0: 69 6f 6e 73 20 75 6e 6c 65 73 73 20 74 68 65 20  ions unless the 
16d0: 44 69 73 70 6f 73 65 20 6d 65 74 68 6f 64 20 6f  Dispose method o
16e0: 66 20 74 68 65 20 6d 6f 64 75 6c 65 0d 0a 20 20  f the module..  
16f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1700: 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 74 68         itself th
1710: 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74 69 6f  rows an exceptio
1720: 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n...            
1730: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1740: 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f 64          if (_mod
1750: 75 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  ules != null).. 
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1780: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 4b        foreach (K
1790: 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74 72 69  eyValuePair<stri
17a0: 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ng, SQLiteModule
17b0: 3e 20 70 61 69 72 20 69 6e 20 5f 6d 6f 64 75 6c  > pair in _modul
17c0: 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es)..           
17d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f0: 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65      SQLiteModule
1800: 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69 72 2e 56   module = pair.V
1810: 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
1820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1830: 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
1840: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1860: 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1880: 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69         module.Di
1890: 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  spose();..      
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18c0: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6c                Cl
18e0: 6f 73 65 28 66 61 6c 73 65 29 3b 20 2f 2a 20 44  ose(false); /* D
18f0: 69 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e 6f 74  isposing, cannot
1900: 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a 0d 0a 20 20   throw. */....  
1910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
1920: 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a  sposed = true;..
1930: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1940: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1950: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
1960: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1970: 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28 64    base.Dispose(d
1980: 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 20 20 20 20  isposing);..    
1990: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
19a0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
19b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
19c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a10: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49 74  ///....    // It
1a20: 20 69 73 6e 27 74 20 6e 65 63 65 73 73 61 72 79   isn't necessary
1a30: 20 74 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79 20   to cleanup any 
1a40: 66 75 6e 63 74 69 6f 6e 73 20 77 65 27 76 65 20  functions we've 
1a50: 72 65 67 69 73 74 65 72 65 64 2e 20 20 49 66 20  registered.  If 
1a60: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  the connection..
1a70: 20 20 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20 74      // goes to t
1a80: 68 65 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20 72  he pool and is r
1a90: 65 73 75 72 72 65 63 74 65 64 20 6c 61 74 65 72  esurrected later
1aa0: 2c 20 72 65 2d 72 65 67 69 73 74 65 72 65 64 20  , re-registered 
1ab0: 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 6f  functions will o
1ac0: 76 65 72 77 72 69 74 65 20 74 68 65 0d 0a 20 20  verwrite the..  
1ad0: 20 20 2f 2f 20 70 72 65 76 69 6f 75 73 20 66 75    // previous fu
1ae0: 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 53 51  nctions.  The SQ
1af0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b  LiteFunctionCook
1b00: 69 65 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74 61  ieHandle will ta
1b10: 6b 65 20 63 61 72 65 20 6f 66 20 66 72 65 65 69  ke care of freei
1b20: 6e 67 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20 20  ng unmanaged..  
1b30: 20 20 2f 2f 20 72 65 73 6f 75 72 63 65 73 20 62    // resources b
1b40: 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20  elonging to the 
1b50: 70 72 65 76 69 6f 75 73 6c 79 2d 72 65 67 69 73  previously-regis
1b60: 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e  tered functions.
1b70: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1b80: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c 6f  verride void Clo
1b90: 73 65 28 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77  se(bool canThrow
1ba0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1bb0: 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c  if (_sql != null
1bc0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
1bd0: 20 20 20 20 20 20 69 66 20 28 21 5f 73 71 6c 2e        if (!_sql.
1be0: 4f 77 6e 48 61 6e 64 6c 65 29 0d 0a 20 20 20 20  OwnHandle)..    
1bf0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c00: 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75         _sql = nu
1c10: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
1c20: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20     return;..    
1c30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1c40: 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f       if (_usePoo
1c50: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  l)..          {.
1c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1c70: 66 20 28 53 51 4c 69 74 65 42 61 73 65 2e 52 65  f (SQLiteBase.Re
1c80: 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f 73  setConnection(_s
1c90: 71 6c 2c 20 5f 73 71 6c 2c 20 63 61 6e 54 68 72  ql, _sql, canThr
1ca0: 6f 77 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ow))..          
1cb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1cc0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
1cd0: 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41 64  onnectionPool.Ad
1ce0: 64 28 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 73 71  d(_fileName, _sq
1cf0: 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29  l, _poolVersion)
1d00: 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  ;....#if !NET_CO
1d10: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
1d20: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d40: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
1d50: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43  String.Format("C
1d60: 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 53 75 63 63  lose (Pool) Succ
1d70: 65 73 73 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29  ess: {0}", _sql)
1d80: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
1d90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66            }..#if
1da0: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
1db0: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
1dc0: 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
1dd0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
1de0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1e00: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72  ce.WriteLine(Str
1e10: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43 6c 6f 73  ing.Format("Clos
1e20: 65 20 28 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65  e (Pool) Failure
1e30: 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29 29 3b 0d  : {0}", _sql));.
1e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
1e50: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
1e60: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1e70: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
1e80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e90: 20 20 5f 73 71 6c 2e 44 69 73 70 6f 73 65 28 29    _sql.Dispose()
1ea0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
1eb0: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d            _sql =
1ec0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d   null;..      }.
1ed0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
1ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1f40: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1f50: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65  y>..    /// Atte
1f60: 6d 70 74 73 20 74 6f 20 69 6e 74 65 72 72 75 70  mpts to interrup
1f70: 74 20 74 68 65 20 71 75 65 72 79 20 63 75 72 72  t the query curr
1f80: 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
1f90: 6f 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  on the associate
1fa0: 64 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76  d..    /// nativ
1fb0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
1fc0: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
1fd0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1fe0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
1ff0: 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28 29 0d  e void Cancel().
2000: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
2010: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
2020: 73 2e 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  s.sqlite3_interr
2030: 75 70 74 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  upt(_sql);..    
2040: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
2050: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
2060: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 62 69  This function bi
2070: 6e 64 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e  nds a user-defin
2080: 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74  ed function to t
2090: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  he connection...
20a0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
20b0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
20c0: 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f  am name="functio
20d0: 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20 20  nAttribute">..  
20e0: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
20f0: 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74  ref="SQLiteFunct
2100: 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f 3e 20  ionAttribute"/> 
2110: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
2120: 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20  containing..    
2130: 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61 74 61  /// the metadata
2140: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
2150: 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a  n to be bound...
2160: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2170: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
2180: 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 22   name="function"
2190: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  >..    /// The <
21a0: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
21b0: 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62 6a 65  Function"/> obje
21c0: 63 74 20 69 6e 73 74 61 6e 63 65 20 74 68 61 74  ct instance that
21d0: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0d   implements the.
21e0: 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f  .    /// functio
21f0: 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a  n to be bound...
2200: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2210: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
2220: 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a   name="flags">..
2230: 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67      /// The flag
2240: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
2250: 68 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e  h the parent con
2260: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 0d  nection object..
2270: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
2280: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
2290: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
22a0: 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  ndFunction(..   
22b0: 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74       SQLiteFunct
22c0: 69 6f 6e 41 74 74 72 69 62 75 74 65 20 66 75 6e  ionAttribute fun
22d0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 0d  ctionAttribute,.
22e0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46  .        SQLiteF
22f0: 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  unction function
2300: 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ,..        SQLit
2310: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
2320: 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20   flags..        
2330: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
2340: 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e    SQLiteFunction
2350: 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 74 68  .BindFunction(th
2360: 69 73 2c 20 66 75 6e 63 74 69 6f 6e 41 74 74 72  is, functionAttr
2370: 69 62 75 74 65 2c 20 66 75 6e 63 74 69 6f 6e 2c  ibute, function,
2380: 20 66 6c 61 67 73 29 3b 0d 0a 0d 0a 20 20 20 20   flags);....    
2390: 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f      if (_functio
23a0: 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
23b0: 20 20 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69           _functi
23c0: 6f 6e 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 53  ons = new List<S
23d0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 28 29  QLiteFunction>()
23e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 66 75  ;....        _fu
23f0: 6e 63 74 69 6f 6e 73 2e 41 64 64 28 66 75 6e 63  nctions.Add(func
2400: 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  tion);..    }...
2410: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
2420: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 56 65  erride string Ve
2430: 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20  rsion..    {..  
2440: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
2450: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2460: 20 53 51 4c 69 74 65 33 2e 53 51 4c 69 74 65 56   SQLite3.SQLiteV
2470: 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 7d  ersion;..      }
2480: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
2490: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
24a0: 20 69 6e 74 20 56 65 72 73 69 6f 6e 4e 75 6d 62   int VersionNumb
24b0: 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  er..    {..     
24c0: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
24d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
24e0: 4c 69 74 65 33 2e 53 51 4c 69 74 65 56 65 72 73  Lite3.SQLiteVers
24f0: 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20  ionNumber;..    
2500: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
2510: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
2520: 63 20 73 74 72 69 6e 67 20 44 65 66 69 6e 65 43  c string DefineC
2530: 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 7b 0d  onstants..    {.
2540: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
2550: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2560: 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64       StringBuild
2570: 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  er result = new 
2580: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b  StringBuilder();
2590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4c  ..            IL
25a0: 69 73 74 3c 73 74 72 69 6e 67 3e 20 6c 69 73 74  ist<string> list
25b0: 20 3d 20 53 51 4c 69 74 65 44 65 66 69 6e 65 43   = SQLiteDefineC
25c0: 6f 6e 73 74 61 6e 74 73 2e 4f 70 74 69 6f 6e 4c  onstants.OptionL
25d0: 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ist;....        
25e0: 20 20 20 20 69 66 20 28 6c 69 73 74 20 21 3d 20      if (list != 
25f0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2600: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2610: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 73        foreach (s
2620: 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 20 69 6e  tring element in
2630: 20 6c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20   list)..        
2640: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2660: 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75  f (element == nu
2670: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2680: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2690: 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
26b0: 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20   (result.Length 
26c0: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
26e0: 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29  sult.Append(' ')
26f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2700: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
2710: 41 70 70 65 6e 64 28 65 6c 65 6d 65 6e 74 29 3b  Append(element);
2720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2730: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2740: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2750: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e    return result.
2760: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
2770: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2780: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
2790: 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69  atic string SQLi
27a0: 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b  teVersion..    {
27b0: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
27c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
27d0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
27e0: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
27f0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69  thods.sqlite3_li
2800: 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b  bversion(), -1);
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 69 6e 74 20 53 51 4c 69   static int SQLi
2840: 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 0d  teVersionNumber.
2850: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
2860: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
2870: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
2880: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
2890: 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f  qlite3_libversio
28a0: 6e 5f 6e 75 6d 62 65 72 28 29 3b 0d 0a 20 20 20  n_number();..   
28b0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
28c0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
28d0: 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65  ic string SQLite
28e0: 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d  SourceId..    {.
28f0: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
2900: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
2910: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
2920: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
2930: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 6f 75  hods.sqlite3_sou
2940: 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 20  rceid(), -1);.. 
2950: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2960: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
2970: 65 72 72 69 64 65 20 62 6f 6f 6c 20 41 75 74 6f  erride bool Auto
2980: 43 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d 0a 20  Commit..    {.. 
2990: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
29a0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
29b0: 6e 20 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28 5f  n IsAutocommit(_
29c0: 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20  sql, _sql);..   
29d0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
29e0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
29f0: 72 69 64 65 20 6c 6f 6e 67 20 4c 61 73 74 49 6e  ride long LastIn
2a00: 73 65 72 74 52 6f 77 49 64 0d 0a 20 20 20 20 7b  sertRowId..    {
2a10: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
2a20: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
2a30: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
2a40: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 72 65  WORK..        re
2a50: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
2a60: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
2a70: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
2a80: 69 64 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 69 66  id(_sql);..#elif
2a90: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
2aa0: 44 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67 20  D..        long 
2ab0: 72 6f 77 49 64 20 3d 20 30 3b 0d 0a 20 20 20 20  rowId = 0;..    
2ac0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
2ad0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2ae0: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
2af0: 64 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  d_interop(_sql, 
2b00: 72 65 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20  ref rowId);..   
2b10: 20 20 20 20 20 72 65 74 75 72 6e 20 72 6f 77 49       return rowI
2b20: 64 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  d;..#else..     
2b30: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
2b40: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
2b50: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
2b60: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
2b70: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2b80: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 68 61  override int Cha
2b90: 6e 67 65 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  nges..    {..   
2ba0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
2bb0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
2bc0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 72  NDARD..        r
2bd0: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
2be0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
2bf0: 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f  3_changes_intero
2c00: 70 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 73 65 0d  p(_sql);..#else.
2c10: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
2c20: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2c30: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e  ods.sqlite3_chan
2c40: 67 65 73 28 5f 73 71 6c 29 3b 0d 0a 23 65 6e 64  ges(_sql);..#end
2c50: 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  if..      }..   
2c60: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
2c70: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
2c80: 20 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20   MemoryUsed..   
2c90: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
2ca0: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
2cb0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
2cc0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
2cd0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
2ce0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2cf0: 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 28 29  e3_memory_used()
2d00: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
2d10: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
2d20: 20 20 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20     long bytes = 
2d30: 30 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61  0;..        Unsa
2d40: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2d50: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75  sqlite3_memory_u
2d60: 73 65 64 5f 69 6e 74 65 72 6f 70 28 72 65 66 20  sed_interop(ref 
2d70: 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20  bytes);..       
2d80: 20 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a   return bytes;..
2d90: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74  #else..        t
2da0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
2db0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
2dc0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
2dd0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
2de0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
2df0: 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79  ride long Memory
2e00: 48 69 67 68 77 61 74 65 72 0d 0a 20 20 20 20 7b  Highwater..    {
2e10: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
2e20: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
2e30: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
2e40: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 72 65  WORK..        re
2e50: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
2e60: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
2e70: 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65  _memory_highwate
2e80: 72 28 30 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  r(0);..#elif !SQ
2e90: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
2ea0: 20 20 20 20 20 20 20 6c 6f 6e 67 20 62 79 74 65         long byte
2eb0: 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  s = 0;..        
2ec0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2ed0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f  ods.sqlite3_memo
2ee0: 72 79 5f 68 69 67 68 77 61 74 65 72 5f 69 6e 74  ry_highwater_int
2ef0: 65 72 6f 70 28 30 2c 20 72 65 66 20 62 79 74 65  erop(0, ref byte
2f00: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  s);..        ret
2f10: 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23 65 6c 73  urn bytes;..#els
2f20: 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  e..        throw
2f30: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
2f40: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
2f50: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d  .#endif..      }
2f60: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
2f70: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2f80: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f    /// Returns no
2f90: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 75 6e  n-zero if the un
2fa0: 64 65 72 6c 79 69 6e 67 20 6e 61 74 69 76 65 20  derlying native 
2fb0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
2fc0: 65 20 69 73 20 6f 77 6e 65 64 0d 0a 20 20 20 20  e is owned..    
2fd0: 2f 2f 2f 20 62 79 20 74 68 69 73 20 69 6e 73 74  /// by this inst
2fe0: 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ance...    /// <
2ff0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
3000: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
3010: 20 62 6f 6f 6c 20 4f 77 6e 48 61 6e 64 6c 65 0d   bool OwnHandle.
3020: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
3030: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  get..        {..
3040: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3050: 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
3060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
3070: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
3080: 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e  xception("no con
3090: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61  nection handle a
30a0: 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 0d 0a 20  vailable");.... 
30b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
30c0: 6e 20 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c 65  n _sql.OwnHandle
30d0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
30e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
30f0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
3100: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74  iteErrorCode Set
3110: 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 62 6f 6f  MemoryStatus(boo
3120: 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  l value)..    {.
3130: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
3140: 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53  StaticSetMemoryS
3150: 74 61 74 75 73 28 76 61 6c 75 65 29 3b 0d 0a 20  tatus(value);.. 
3160: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
3170: 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69  rnal static SQLi
3180: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74  teErrorCode Stat
3190: 69 63 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75  icSetMemoryStatu
31a0: 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20  s(bool value).. 
31b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
31c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
31d0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
31e0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
31f0: 6f 6e 66 69 67 5f 69 6e 74 28 0d 0a 20 20 20 20  onfig_int(..    
3200: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
3210: 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  nfigOpsEnum.SQLI
3220: 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41  TE_CONFIG_MEMSTA
3230: 54 55 53 2c 20 76 61 6c 75 65 20 3f 20 31 20 3a  TUS, value ? 1 :
3240: 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   0);....        
3250: 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
3260: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
3270: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3280: 53 68 75 74 64 6f 77 6e 20 74 68 65 20 53 51 4c  Shutdown the SQL
3290: 69 74 65 20 65 6e 67 69 6e 65 20 73 6f 20 74 68  ite engine so th
32a0: 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
32b0: 74 61 72 74 65 64 20 77 69 74 68 20 64 69 66 66  tarted with diff
32c0: 65 72 65 6e 74 20 63 6f 6e 66 69 67 20 6f 70 74  erent config opt
32d0: 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57  ions...    /// W
32e0: 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f  e depend on auto
32f0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
3300: 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20  to recover...   
3310: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
3320: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
3330: 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65 73 75  s>Returns a resu
3340: 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73  lt code</returns
3350: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
3360: 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
3370: 72 72 6f 72 43 6f 64 65 20 53 68 75 74 64 6f 77  rrorCode Shutdow
3380: 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  n()..    {..    
3390: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
33a0: 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e  ode rc = UnsafeN
33b0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
33c0: 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 3b  ite3_shutdown();
33d0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
33e0: 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   rc;..    }.... 
33f0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3400: 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d  ..    /// Determ
3410: 69 6e 65 73 20 69 66 20 74 68 65 20 61 73 73 6f  ines if the asso
3420: 63 69 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f  ciated native co
3430: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
3440: 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f  is open...    //
3450: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
3460: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
3470: 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72  .    /// Non-zer
3480: 6f 20 69 66 20 74 68 65 20 61 73 73 6f 63 69 61  o if the associa
3490: 74 65 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65  ted native conne
34a0: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20  ction handle is 
34b0: 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  open...    /// <
34c0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
34d0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
34e0: 20 62 6f 6f 6c 20 49 73 4f 70 65 6e 28 29 0d 0a   bool IsOpen()..
34f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
3500: 65 74 75 72 6e 20 28 5f 73 71 6c 20 21 3d 20 6e  eturn (_sql != n
3510: 75 6c 6c 29 20 26 26 20 21 5f 73 71 6c 2e 49 73  ull) && !_sql.Is
3520: 49 6e 76 61 6c 69 64 20 26 26 20 21 5f 73 71 6c  Invalid && !_sql
3530: 2e 49 73 43 6c 6f 73 65 64 3b 0d 0a 20 20 20 20  .IsClosed;..    
3540: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
3550: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
3560: 4f 70 65 6e 28 73 74 72 69 6e 67 20 73 74 72 46  Open(string strF
3570: 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 69 74 65 43  ilename, SQLiteC
3580: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 63  onnectionFlags c
3590: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20  onnectionFlags, 
35a0: 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73 45  SQLiteOpenFlagsE
35b0: 6e 75 6d 20 6f 70 65 6e 46 6c 61 67 73 2c 20 69  num openFlags, i
35c0: 6e 74 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20  nt maxPoolSize, 
35d0: 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29 0d 0a 20  bool usePool).. 
35e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a     {..      //..
35f0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
3600: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
3610: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72  onnection is cur
3620: 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 61 74 74  rently open, att
3630: 65 6d 70 74 20 74 6f 0d 0a 20 20 20 20 20 20 2f  empt to..      /
3640: 2f 20 20 20 20 20 20 20 63 6c 6f 73 65 20 69 74  /       close it
3650: 20 6e 6f 77 2e 20 20 54 68 69 73 20 6d 75 73 74   now.  This must
3660: 20 62 65 20 64 6f 6e 65 20 62 65 63 61 75 73 65   be done because
3670: 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f   the file name o
3680: 72 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  r..      //     
3690: 20 20 6f 74 68 65 72 20 70 61 72 61 6d 65 74 65    other paramete
36a0: 72 73 20 74 68 61 74 20 6d 61 79 20 69 6d 70 61  rs that may impa
36b0: 63 74 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  ct the underlyin
36c0: 67 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  g database..    
36d0: 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 6e 65    //       conne
36e0: 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63  ction may have c
36f0: 68 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 2f  hanged...      /
3700: 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71  /..      if (_sq
3710: 6c 20 21 3d 20 6e 75 6c 6c 29 20 43 6c 6f 73 65  l != null) Close
3720: 28 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  (true);....     
3730: 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f   //..      // NO
3740: 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6e 6e 65  TE: If the conne
3750: 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 63 6c  ction was not cl
3760: 6f 73 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c  osed successfull
3770: 79 2c 20 74 68 72 6f 77 20 61 6e 0d 0a 20 20 20  y, throw an..   
3780: 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65     //       exce
3790: 70 74 69 6f 6e 20 6e 6f 77 2e 0d 0a 20 20 20 20  ption now...    
37a0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28    //..      if (
37b0: 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql != null).. 
37c0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
37d0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
37e0: 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  on("connection h
37f0: 61 6e 64 6c 65 20 69 73 20 73 74 69 6c 6c 20 61  andle is still a
3800: 63 74 69 76 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  ctive");....    
3810: 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 75 73 65    _usePool = use
3820: 50 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 5f 66 69  Pool;..      _fi
3830: 6c 65 4e 61 6d 65 20 3d 20 73 74 72 46 69 6c 65  leName = strFile
3840: 6e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  name;....      i
3850: 66 20 28 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20  f (usePool)..   
3860: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 73     {..        _s
3870: 71 6c 20 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ql = SQLiteConne
3880: 63 74 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65  ctionPool.Remove
3890: 28 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61  (strFilename, ma
38a0: 78 50 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f  xPoolSize, out _
38b0: 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d  poolVersion);...
38c0: 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
38d0: 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
38e0: 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
38f0: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
3900: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
3910: 22 4f 70 65 6e 20 28 50 6f 6f 6c 29 3a 20 7b 30  "Open (Pool): {0
3920: 7d 22 2c 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c  }", (_sql != nul
3930: 6c 29 20 3f 20 5f 73 71 6c 2e 54 6f 53 74 72 69  l) ? _sql.ToStri
3940: 6e 67 28 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29  ng() : "<null>")
3950: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
3960: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if 
3970: 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (_sql == null)..
3980: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3990: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
39a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
39b0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
39c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
39d0: 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a  finally /* NOTE:
39e0: 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20   Thread.Abort() 
39f0: 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a  protection. */..
3a00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3a10: 20 20 20 20 20 49 6e 74 50 74 72 20 64 62 3b 0d       IntPtr db;.
3a20: 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74  .          SQLit
3a30: 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d  eErrorCode n;...
3a40: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
3a50: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
3a60: 20 69 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e   if ((connection
3a70: 46 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  Flags & SQLiteCo
3a80: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
3a90: 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f  ExtensionFunctio
3aa0: 6e 73 29 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e  ns) != SQLiteCon
3ab0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45  nectionFlags.NoE
3ac0: 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e  xtensionFunction
3ad0: 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  s)..          {.
3ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
3af0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
3b00: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65  hods.sqlite3_ope
3b10: 6e 5f 69 6e 74 65 72 6f 70 28 54 6f 55 54 46 38  n_interop(ToUTF8
3b20: 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 6f  (strFilename), o
3b30: 70 65 6e 46 6c 61 67 73 2c 20 6f 75 74 20 64 62  penFlags, out db
3b40: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
3b50: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d  .          else.
3b60: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
3b70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3b80: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
3b90: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
3ba0: 33 5f 6f 70 65 6e 5f 76 32 28 54 6f 55 54 46 38  3_open_v2(ToUTF8
3bb0: 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 6f  (strFilename), o
3bc0: 75 74 20 64 62 2c 20 6f 70 65 6e 46 6c 61 67 73  ut db, openFlags
3bd0: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
3be0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
3bf0: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
3c00: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
3c10: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
3c20: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
3c30: 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ne(String.Format
3c40: 28 22 4f 70 65 6e 3a 20 7b 30 7d 22 2c 20 64 62  ("Open: {0}", db
3c50: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  ));..#endif.... 
3c60: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
3c70: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
3c80: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
3c90: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
3ca0: 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  n, null);..     
3cb0: 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20       _sql = new 
3cc0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
3cd0: 48 61 6e 64 6c 65 28 64 62 2c 20 74 72 75 65 29  Handle(db, true)
3ce0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
3cf0: 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f 73 71 6c        lock (_sql
3d00: 29 20 7b 20 2f 2a 20 48 41 43 4b 3a 20 46 6f 72  ) { /* HACK: For
3d10: 63 65 20 74 68 65 20 53 79 6e 63 42 6c 6f 63 6b  ce the SyncBlock
3d20: 20 74 6f 20 62 65 20 22 63 72 65 61 74 65 64 22   to be "created"
3d30: 20 6e 6f 77 2e 20 2a 2f 20 7d 0d 0a 20 20 20 20   now. */ }..    
3d40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20    }....      // 
3d50: 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 74  Bind functions t
3d60: 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f  o this connectio
3d70: 6e 2e 20 20 49 66 20 61 6e 79 20 70 72 65 76 69  n.  If any previ
3d80: 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66  ous functions of
3d90: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 0d 0a   the same name..
3da0: 20 20 20 20 20 20 2f 2f 20 77 65 72 65 20 61 6c        // were al
3db0: 72 65 61 64 79 20 62 6f 75 6e 64 2c 20 74 68 65  ready bound, the
3dc0: 6e 20 74 68 65 20 6e 65 77 20 62 69 6e 64 69 6e  n the new bindin
3dd0: 67 73 20 72 65 70 6c 61 63 65 20 74 68 65 20 6f  gs replace the o
3de0: 6c 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 28  ld...      if ((
3df0: 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  connectionFlags 
3e00: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
3e10: 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75  onFlags.NoBindFu
3e20: 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69  nctions) != SQLi
3e30: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
3e40: 73 2e 4e 6f 42 69 6e 64 46 75 6e 63 74 69 6f 6e  s.NoBindFunction
3e50: 73 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  s)..      {..   
3e60: 20 20 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63         if (_func
3e70: 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  tions == null)..
3e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 66                _f
3e90: 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77 20 4c  unctions = new L
3ea0: 69 73 74 3c 53 51 4c 69 74 65 46 75 6e 63 74 69  ist<SQLiteFuncti
3eb0: 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  on>();....      
3ec0: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 2e 41      _functions.A
3ed0: 64 64 52 61 6e 67 65 28 6e 65 77 20 4c 69 73 74  ddRange(new List
3ee0: 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e  <SQLiteFunction>
3ef0: 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e  (SQLiteFunction.
3f00: 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 74 68  BindFunctions(th
3f10: 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  is, connectionFl
3f20: 61 67 73 29 29 29 3b 0d 0a 20 20 20 20 20 20 7d  ags)));..      }
3f30: 0d 0a 0d 0a 20 20 20 20 20 20 53 65 74 54 69 6d  ....      SetTim
3f40: 65 6f 75 74 28 30 29 3b 0d 0a 20 20 20 20 20 20  eout(0);..      
3f50: 47 43 2e 4b 65 65 70 41 6c 69 76 65 28 5f 73 71  GC.KeepAlive(_sq
3f60: 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
3f70: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
3f80: 69 64 65 20 76 6f 69 64 20 43 6c 65 61 72 50 6f  ide void ClearPo
3f90: 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ol()..    {..   
3fa0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
3fb0: 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f  ionPool.ClearPoo
3fc0: 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20  l(_fileName);.. 
3fd0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
3fe0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
3ff0: 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20  t CountPool().. 
4000: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 69     {..        Di
4010: 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
4020: 20 69 6e 74 3e 20 63 6f 75 6e 74 73 20 3d 20 6e   int> counts = n
4030: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e  ull;..        in
4040: 74 20 6f 70 65 6e 43 6f 75 6e 74 20 3d 20 30 3b  t openCount = 0;
4050: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 63 6c  ..        int cl
4060: 6f 73 65 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20  oseCount = 0;.. 
4070: 20 20 20 20 20 20 20 69 6e 74 20 74 6f 74 61 6c         int total
4080: 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20  Count = 0;....  
4090: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
40a0: 65 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f  ectionPool.GetCo
40b0: 75 6e 74 73 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d  unts(_fileName,.
40c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
40d0: 20 63 6f 75 6e 74 73 2c 20 72 65 66 20 6f 70 65   counts, ref ope
40e0: 6e 43 6f 75 6e 74 2c 20 72 65 66 20 63 6c 6f 73  nCount, ref clos
40f0: 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20  eCount,..       
4100: 20 20 20 20 20 72 65 66 20 74 6f 74 61 6c 43 6f       ref totalCo
4110: 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
4120: 20 72 65 74 75 72 6e 20 74 6f 74 61 6c 43 6f 75   return totalCou
4130: 6e 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  nt;..    }....  
4140: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
4150: 69 64 65 20 76 6f 69 64 20 53 65 74 54 69 6d 65  ide void SetTime
4160: 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74  out(int nTimeout
4170: 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  MS)..    {..    
4180: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
4190: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
41a0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
41b0: 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 5f  3_busy_timeout(_
41c0: 73 71 6c 2c 20 6e 54 69 6d 65 6f 75 74 4d 53 29  sql, nTimeoutMS)
41d0: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ;..      if (n !
41e0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
41f0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
4200: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
4210: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
4220: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
4230: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
4240: 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 28 53 51  ide bool Step(SQ
4250: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
4260: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
4270: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
4280: 65 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64  e n;..      Rand
4290: 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a  om rnd = null;..
42a0: 20 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74        uint start
42b0: 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76  tick = (uint)Env
42c0: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
42d0: 6e 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20  nt;..      uint 
42e0: 74 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74 29  timeout = (uint)
42f0: 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f  (stmt._command._
4300: 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a  commandTimeout *
4310: 20 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20   1000);....     
4320: 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d 0a 20   while (true).. 
4330: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4340: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
4350: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
4360: 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  step(stmt._sqlit
4370: 65 5f 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20  e_stmt);....    
4380: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
4390: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77  iteErrorCode.Row
43a0: 29 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a  ) return true;..
43b0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d          if (n ==
43c0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
43d0: 2e 44 6f 6e 65 29 20 72 65 74 75 72 6e 20 66 61  .Done) return fa
43e0: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
43f0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
4400: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
4410: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4420: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
4430: 64 65 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de r;....       
4440: 20 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72 20 6f     // An error o
4450: 63 63 75 72 72 65 64 2c 20 61 74 74 65 6d 70 74  ccurred, attempt
4460: 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 73 74   to reset the st
4470: 61 74 65 6d 65 6e 74 2e 20 20 49 66 20 74 68 65  atement.  If the
4480: 20 72 65 73 65 74 20 77 6f 72 6b 65 64 20 62 65   reset worked be
4490: 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20  cause the..     
44a0: 20 20 20 20 20 2f 2f 20 73 63 68 65 6d 61 20 68       // schema h
44b0: 61 73 20 63 68 61 6e 67 65 64 2c 20 72 65 2d 74  as changed, re-t
44c0: 72 79 20 74 68 65 20 73 74 65 70 20 61 67 61 69  ry the step agai
44d0: 6e 2e 20 20 49 66 20 69 74 20 65 72 72 6f 72 65  n.  If it errore
44e0: 64 20 6f 75 72 20 62 65 63 61 75 73 65 20 74 68  d our because th
44f0: 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  e database..    
4500: 20 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f 63 6b        // is lock
4510: 65 64 2c 20 74 68 65 6e 20 6b 65 65 70 20 72 65  ed, then keep re
4520: 74 72 79 69 6e 67 20 75 6e 74 69 6c 20 74 68 65  trying until the
4530: 20 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f 75 74   command timeout
4540: 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20   occurs...      
4550: 20 20 20 20 72 20 3d 20 52 65 73 65 74 28 73 74      r = Reset(st
4560: 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  mt);....        
4570: 20 20 69 66 20 28 72 20 3d 3d 20 53 51 4c 69 74    if (r == SQLit
4580: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
4590: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
45a0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
45b0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
45c0: 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
45d0: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
45e0: 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (r == SQLiteErro
45f0: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
4600: 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  r == SQLiteError
4610: 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20 73 74  Code.Busy) && st
4620: 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e  mt._command != n
4630: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
4640: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
4650: 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20  / Keep trying.. 
4660: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
4670: 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46  nd == null) // F
4680: 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65 20  irst time we've 
4690: 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20  encountered the 
46a0: 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  lock..          
46b0: 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61      rnd = new Ra
46c0: 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndom();....     
46d0: 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27         // If we'
46e0: 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65 20  ve exceeded the 
46f0: 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75  command's timeou
4700: 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20 74  t, give up and t
4710: 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20  hrow an error.. 
4720: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
4730: 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74  uint)Environment
4740: 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61  .TickCount - sta
4750: 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74  rttick > timeout
4760: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
4770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4780: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
4790: 45 78 63 65 70 74 69 6f 6e 28 72 2c 20 47 65 74  Exception(r, Get
47a0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
47b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
47c0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
47d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
47f0: 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65 70 20  Otherwise sleep 
4800: 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f  for a random amo
4810: 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74  unt of time up t
4820: 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20  o 150ms..       
4830: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68         System.Th
4840: 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53  reading.Thread.S
4850: 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c  leep(rnd.Next(1,
4860: 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20   150));..       
4870: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4880: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
4890: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
48a0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
48b0: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
48c0: 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28 53 51  rorCode Reset(SQ
48d0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
48e0: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
48f0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
4900: 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  e n;....#if !SQL
4910: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
4920: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
4930: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4940: 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f  te3_reset_intero
4950: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
4960: 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  tmt);..#else..  
4970: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
4980: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4990: 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74 2e 5f  te3_reset(stmt._
49a0: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23  sqlite_stmt);..#
49b0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 2f  endif....      /
49c0: 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20  / If the schema 
49d0: 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61 6e 64  changed, try and
49e0: 20 72 65 2d 70 72 65 70 61 72 65 20 69 74 0d 0a   re-prepare it..
49f0: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
4a00: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53  QLiteErrorCode.S
4a10: 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 7b 0d  chema)..      {.
4a20: 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65 63 72  .        // Recr
4a30: 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73 74 61  eate a dummy sta
4a40: 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  tement..        
4a50: 73 74 72 69 6e 67 20 73 74 72 3b 0d 0a 20 20 20  string str;..   
4a60: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
4a70: 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6d 70 20  teStatement tmp 
4a80: 3d 20 50 72 65 70 61 72 65 28 6e 75 6c 6c 2c 20  = Prepare(null, 
4a90: 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65 6d 65  stmt._sqlStateme
4aa0: 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e 74 29  nt, null, (uint)
4ab0: 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f  (stmt._command._
4ac0: 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a  commandTimeout *
4ad0: 20 31 30 30 30 29 2c 20 6f 75 74 20 73 74 72 29   1000), out str)
4ae0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
4af0: 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e 61 6c          // Final
4b00: 69 7a 65 20 74 68 65 20 65 78 69 73 74 69 6e 67  ize the existing
4b10: 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20   statement..    
4b20: 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69        stmt._sqli
4b30: 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73 65 28  te_stmt.Dispose(
4b40: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  );..          //
4b50: 20 52 65 61 73 73 69 67 6e 20 61 20 6e 65 77 20   Reassign a new 
4b60: 73 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e 74 65  statement pointe
4b70: 72 20 74 6f 20 74 68 65 20 6f 6c 64 20 73 74 61  r to the old sta
4b80: 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65 61 72  tement and clear
4b90: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 6f   the temporary o
4ba0: 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  ne..          st
4bb0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20  mt._sqlite_stmt 
4bc0: 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74  = tmp._sqlite_st
4bd0: 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  mt;..          t
4be0: 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20  mp._sqlite_stmt 
4bf0: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
4c00: 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c 79 20       // Reapply 
4c10: 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20 20  parameters..    
4c20: 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e 64 50        stmt.BindP
4c30: 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a 20 20  arameters();..  
4c40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4c50: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
4c60: 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e 6f 77 6e 3b  rorCode.Unknown;
4c70: 20 2f 2f 20 52 65 73 65 74 20 77 61 73 20 4f 4b   // Reset was OK
4c80: 2c 20 77 69 74 68 20 73 63 68 65 6d 61 20 63 68  , with schema ch
4c90: 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ange..      }.. 
4ca0: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
4cb0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
4cc0: 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d  de.Locked || n =
4cd0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
4ce0: 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20  e.Busy)..       
4cf0: 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a 20 20   return n;....  
4d00: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
4d10: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
4d20: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
4d30: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
4d40: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
4d50: 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
4d60: 20 72 65 74 75 72 6e 20 6e 3b 20 2f 2f 20 57 65   return n; // We
4d70: 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20 73 63   reset OK, no sc
4d80: 68 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a 20 20  hema changes..  
4d90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
4da0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
4db0: 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f 72  ing GetLastError
4dc0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
4dd0: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 42 61   return SQLiteBa
4de0: 73 65 2e 47 65 74 4c 61 73 74 45 72 72 6f 72 28  se.GetLastError(
4df0: 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20  _sql, _sql);..  
4e00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
4e10: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
4e20: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 50 72 65  iteStatement Pre
4e30: 70 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65  pare(SQLiteConne
4e40: 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e  ction cnn, strin
4e50: 67 20 73 74 72 53 71 6c 2c 20 53 51 4c 69 74 65  g strSql, SQLite
4e60: 53 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69 6f  Statement previo
4e70: 75 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75 74  us, uint timeout
4e80: 4d 53 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 73  MS, out string s
4e90: 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20 20 20 7b  trRemain)..    {
4ea0: 0d 0a 20 20 20 20 20 20 69 66 20 28 21 53 74 72  ..      if (!Str
4eb0: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
4ec0: 79 28 73 74 72 53 71 6c 29 29 0d 0a 20 20 20 20  y(strSql))..    
4ed0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d    {..        //.
4ee0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
4ef0: 3a 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  : SQLite does no
4f00: 74 20 73 75 70 70 6f 72 74 20 74 68 65 20 63 6f  t support the co
4f10: 6e 63 65 70 74 20 6f 66 20 73 65 70 61 72 61 74  ncept of separat
4f20: 65 20 73 63 68 65 6d 61 73 0d 0a 20 20 20 20 20  e schemas..     
4f30: 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 20 6f     //       in o
4f40: 6e 65 20 64 61 74 61 62 61 73 65 3b 20 74 68 65  ne database; the
4f50: 72 65 66 6f 72 65 2c 20 72 65 6d 6f 76 65 20 74  refore, remove t
4f60: 68 65 20 62 61 73 65 20 73 63 68 65 6d 61 20 6e  he base schema n
4f70: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  ame..        // 
4f80: 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 73 6d        used to sm
4f90: 6f 6f 74 68 20 69 6e 74 65 67 72 61 74 69 6f 6e  ooth integration
4fa0: 20 77 69 74 68 20 74 68 65 20 62 61 73 65 20 2e   with the base .
4fb0: 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d 0a 20  NET Framework.. 
4fc0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
4fd0: 64 61 74 61 20 63 6c 61 73 73 65 73 2e 0d 0a 20  data classes... 
4fe0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4ff0: 20 20 20 73 74 72 69 6e 67 20 62 61 73 65 53 63     string baseSc
5000: 68 65 6d 61 4e 61 6d 65 20 3d 20 28 63 6e 6e 20  hemaName = (cnn 
5010: 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f  != null) ? cnn._
5020: 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3a  baseSchemaName :
5030: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
5040: 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
5050: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 62 61 73 65  NullOrEmpty(base
5060: 53 63 68 65 6d 61 4e 61 6d 65 29 29 0d 0a 20 20  SchemaName))..  
5070: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5080: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53     strSql = strS
5090: 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20 20  ql.Replace(..   
50a0: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
50b0: 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65  g.Format(Culture
50c0: 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
50d0: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
50e0: 20 20 20 20 20 20 22 5b 7b 30 7d 5d 2e 22 2c 20        "[{0}].", 
50f0: 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c  baseSchemaName),
5100: 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d   String.Empty);.
5110: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72  ...          str
5120: 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70  Sql = strSql.Rep
5130: 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  lace(..         
5140: 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
5150: 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49  at(CultureInfo.I
5160: 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c  nvariantCulture,
5170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5180: 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63 68 65  "{0}.", baseSche
5190: 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e  maName), String.
51a0: 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20 20  Empty);..       
51b0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }.... 
51c0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
51d0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
51e0: 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 28 63   =..          (c
51f0: 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e  nn != null) ? cn
5200: 6e 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69 74 65  n.Flags : SQLite
5210: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5220: 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20  Default;....    
5230: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
5240: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5250: 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61 72 65 29  lags.LogPrepare)
5260: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
5270: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65  tionFlags.LogPre
5280: 70 61 72 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  pare)..      {..
5290: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 73            if ((s
52a0: 74 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c  trSql == null) |
52b0: 7c 20 28 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68  | (strSql.Length
52c0: 20 3d 3d 20 30 29 20 7c 7c 20 28 73 74 72 53 71   == 0) || (strSq
52d0: 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e 67 74 68 20  l.Trim().Length 
52e0: 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20  == 0))..        
52f0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
5300: 4c 6f 67 4d 65 73 73 61 67 65 28 22 50 72 65 70  LogMessage("Prep
5310: 61 72 69 6e 67 20 7b 3c 6e 6f 74 68 69 6e 67 3e  aring {<nothing>
5320: 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20 20 20 20 20  }...");..       
5330: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
5340: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
5350: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
5360: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
5370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
5380: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
5390: 74 43 75 6c 74 75 72 65 2c 20 22 50 72 65 70 61  tCulture, "Prepa
53a0: 72 69 6e 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22  ring {{{0}}}..."
53b0: 2c 20 73 74 72 53 71 6c 29 29 3b 0d 0a 20 20 20  , strSql));..   
53c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 49 6e     }....      In
53d0: 74 50 74 72 20 73 74 6d 74 20 3d 20 49 6e 74 50  tPtr stmt = IntP
53e0: 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
53f0: 49 6e 74 50 74 72 20 70 74 72 20 3d 20 49 6e 74  IntPtr ptr = Int
5400: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
5410: 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
5420: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
5430: 43 6f 64 65 20 6e 20 3d 20 53 51 4c 69 74 65 45  Code n = SQLiteE
5440: 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 3b  rrorCode.Schema;
5450: 0d 0a 20 20 20 20 20 20 69 6e 74 20 72 65 74 72  ..      int retr
5460: 69 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ies = 0;..      
5470: 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
5480: 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20 20 20  8(strSql);..    
5490: 20 20 73 74 72 69 6e 67 20 74 79 70 65 64 65 66    string typedef
54a0: 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  s = null;..     
54b0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
54c0: 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20   cmd = null;..  
54d0: 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d      Random rnd =
54e0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69   null;..      ui
54f0: 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28  nt starttick = (
5500: 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74  uint)Environment
5510: 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a 20  .TickCount;.... 
5520: 20 20 20 20 20 47 43 48 61 6e 64 6c 65 20 68 61       GCHandle ha
5530: 6e 64 6c 65 20 3d 20 47 43 48 61 6e 64 6c 65 2e  ndle = GCHandle.
5540: 41 6c 6c 6f 63 28 62 2c 20 47 43 48 61 6e 64 6c  Alloc(b, GCHandl
5550: 65 54 79 70 65 2e 50 69 6e 6e 65 64 29 3b 0d 0a  eType.Pinned);..
5560: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 73 71        IntPtr psq
5570: 6c 20 3d 20 68 61 6e 64 6c 65 2e 41 64 64 72 4f  l = handle.AddrO
5580: 66 50 69 6e 6e 65 64 4f 62 6a 65 63 74 28 29 3b  fPinnedObject();
5590: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53 74  ..      SQLiteSt
55a0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 73 74  atementHandle st
55b0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20  atementHandle = 
55c0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 74 72 79  null;..      try
55d0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
55e0: 20 20 20 77 68 69 6c 65 20 28 28 6e 20 3d 3d 20     while ((n == 
55f0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
5600: 53 63 68 65 6d 61 20 7c 7c 20 6e 20 3d 3d 20 53  Schema || n == S
5610: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c  QLiteErrorCode.L
5620: 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51  ocked || n == SQ
5630: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75  LiteErrorCode.Bu
5640: 73 79 29 20 26 26 20 72 65 74 72 69 65 73 20 3c  sy) && retries <
5650: 20 33 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   3)..        {..
5660: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
5670: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5680: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
5690: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
56a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 66    }..          f
56b0: 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20  inally /* NOTE: 
56c0: 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70  Thread.Abort() p
56d0: 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20  rotection. */.. 
56e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20           {..#if 
56f0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
5700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
5710: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
5720: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72  thods.sqlite3_pr
5730: 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 5f 73  epare_interop(_s
5740: 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67  ql, psql, b.Leng
5750: 74 68 20 2d 20 31 2c 20 6f 75 74 20 73 74 6d 74  th - 1, out stmt
5760: 2c 20 6f 75 74 20 70 74 72 2c 20 6f 75 74 20 6c  , out ptr, out l
5770: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 23 69 66  en);..#else..#if
5780: 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56 32 0d   USE_PREPARE_V2.
5790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
57a0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
57b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65  hods.sqlite3_pre
57c0: 70 61 72 65 5f 76 32 28 5f 73 71 6c 2c 20 70 73  pare_v2(_sql, ps
57d0: 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31  ql, b.Length - 1
57e0: 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75 74 20  , out stmt, out 
57f0: 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ptr);..#else..  
5800: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
5810: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5820: 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  s.sqlite3_prepar
5830: 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e  e(_sql, psql, b.
5840: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20  Length - 1, out 
5850: 73 74 6d 74 2c 20 6f 75 74 20 70 74 72 29 3b 0d  stmt, out ptr);.
5860: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
5870: 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a       len = -1;..
5880: 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 21 4e  #endif....#if !N
5890: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
58a0: 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54   TRACE_STATEMENT
58b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72  ..            Tr
58c0: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74  ace.WriteLine(St
58d0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 50 72 65  ring.Format("Pre
58e0: 70 61 72 65 20 28 7b 30 7d 29 3a 20 7b 31 7d 22  pare ({0}): {1}"
58f0: 2c 20 6e 2c 20 73 74 6d 74 29 29 3b 0d 0a 23 65  , n, stmt));..#e
5900: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
5910: 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51      if ((n == SQ
5920: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
5930: 29 20 26 26 20 28 73 74 6d 74 20 21 3d 20 49 6e  ) && (stmt != In
5940: 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20  tPtr.Zero))..   
5950: 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
5960: 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 65 77  mentHandle = new
5970: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
5980: 48 61 6e 64 6c 65 28 5f 73 71 6c 2c 20 73 74 6d  Handle(_sql, stm
5990: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  t);..          }
59a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
59b0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
59c0: 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 29 0d 0a  orCode.Schema)..
59d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72              retr
59e0: 69 65 73 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ies++;..        
59f0: 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
5a00: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
5a10: 45 72 72 6f 72 29 0d 0a 20 20 20 20 20 20 20 20  Error)..        
5a20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5a30: 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70   if (String.Comp
5a40: 61 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f 72  are(GetLastError
5a50: 28 29 2c 20 22 6e 65 61 72 20 5c 22 54 59 50 45  (), "near \"TYPE
5a60: 53 5c 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f  S\": syntax erro
5a70: 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  r", StringCompar
5a80: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
5a90: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
5aa0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5ab0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
5ac0: 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 49 6e 64  pos = strSql.Ind
5ad0: 65 78 4f 66 28 27 3b 27 29 3b 0d 0a 20 20 20 20  exOf(';');..    
5ae0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6f            if (po
5af0: 73 20 3d 3d 20 2d 31 29 20 70 6f 73 20 3d 20 73  s == -1) pos = s
5b00: 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 31  trSql.Length - 1
5b10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5b20: 20 20 20 74 79 70 65 64 65 66 73 20 3d 20 73 74     typedefs = st
5b30: 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30  rSql.Substring(0
5b40: 2c 20 70 6f 73 20 2b 20 31 29 3b 0d 0a 20 20 20  , pos + 1);..   
5b50: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71             strSq
5b60: 6c 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73 74  l = strSql.Subst
5b70: 72 69 6e 67 28 70 6f 73 20 2b 20 31 29 3b 0d 0a  ring(pos + 1);..
5b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b90: 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b 0d  strRemain = "";.
5ba0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5bb0: 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e   while (cmd == n
5bc0: 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65  ull && strSql.Le
5bd0: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
5be0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5bf0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 20              cmd 
5c00: 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73  = Prepare(cnn, s
5c10: 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c  trSql, previous,
5c20: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20   timeoutMS, out 
5c30: 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20  strRemain);..   
5c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
5c50: 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b  Sql = strRemain;
5c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5c70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
5c80: 20 20 20 69 66 20 28 63 6d 64 20 21 3d 20 6e 75     if (cmd != nu
5c90: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
5ca0: 20 20 20 20 20 63 6d 64 2e 53 65 74 54 79 70 65       cmd.SetType
5cb0: 73 28 74 79 70 65 64 65 66 73 29 3b 0d 0a 0d 0a  s(typedefs);....
5cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5cd0: 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20  turn cmd;..     
5ce0: 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 28 4e         }..#if (N
5cf0: 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f 34 30 20  ET_35 || NET_40 
5d00: 7c 7c 20 4e 45 54 5f 34 35 29 20 26 26 20 21 50  || NET_45) && !P
5d10: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
5d20: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
5d30: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f        else if (_
5d40: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d  buildingSchema =
5d50: 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72 69 6e  = false && Strin
5d60: 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c 61 73  g.Compare(GetLas
5d70: 74 45 72 72 6f 72 28 29 2c 20 30 2c 20 22 6e 6f  tError(), 0, "no
5d80: 20 73 75 63 68 20 74 61 62 6c 65 3a 20 54 45 4d   such table: TEM
5d90: 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c 20 32 36  P.SCHEMA", 0, 26
5da0: 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
5db0: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
5dc0: 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20  Case) == 0)..   
5dd0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5de0: 20 20 20 20 20 20 20 20 20 20 73 74 72 52 65 6d            strRem
5df0: 61 69 6e 20 3d 20 22 22 3b 0d 0a 20 20 20 20 20  ain = "";..     
5e00: 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69           _buildi
5e10: 6e 67 53 63 68 65 6d 61 20 3d 20 74 72 75 65 3b  ngSchema = true;
5e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5e30: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
5e40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5e50: 20 20 20 20 20 20 49 53 51 4c 69 74 65 53 63 68        ISQLiteSch
5e60: 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 20 65 78  emaExtensions ex
5e70: 74 20 3d 20 28 28 49 53 65 72 76 69 63 65 50 72  t = ((IServicePr
5e80: 6f 76 69 64 65 72 29 53 51 4c 69 74 65 46 61 63  ovider)SQLiteFac
5e90: 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65 29 2e 47  tory.Instance).G
5ea0: 65 74 53 65 72 76 69 63 65 28 74 79 70 65 6f 66  etService(typeof
5eb0: 28 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78  (ISQLiteSchemaEx
5ec0: 74 65 6e 73 69 6f 6e 73 29 29 20 61 73 20 49 53  tensions)) as IS
5ed0: 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e  QLiteSchemaExten
5ee0: 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20 20 20  sions;....      
5ef0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 78            if (ex
5f00: 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
5f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78                ex
5f20: 74 2e 42 75 69 6c 64 54 65 6d 70 53 63 68 65 6d  t.BuildTempSchem
5f30: 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  a(cnn);....     
5f40: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
5f50: 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26   (cmd == null &&
5f60: 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e   strSql.Length >
5f70: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
5f80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5f90: 20 20 20 20 20 20 20 20 20 20 63 6d 64 20 3d 20            cmd = 
5fa0: 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73 74 72  Prepare(cnn, str
5fb0: 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20 74  Sql, previous, t
5fc0: 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74  imeoutMS, out st
5fd0: 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20  rRemain);..     
5fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
5ff0: 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b  Sql = strRemain;
6000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6010: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
6020: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d         return cm
6030: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
6040: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
6050: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
6060: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6070: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 62 75               _bu
6080: 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 66  ildingSchema = f
6090: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
60a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
60b0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20      }..#endif.. 
60c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
60d0: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
60e0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
60f0: 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20  ode.Locked || n 
6100: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
6110: 64 65 2e 42 75 73 79 29 20 2f 2f 20 4c 6f 63 6b  de.Busy) // Lock
6120: 65 64 20 2d 2d 20 64 65 6c 61 79 20 61 20 73 6d  ed -- delay a sm
6130: 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65 66 6f 72  all amount befor
6140: 65 20 72 65 74 72 79 69 6e 67 0d 0a 20 20 20 20  e retrying..    
6150: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6160: 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74 72 79       // Keep try
6170: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
6180: 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c   if (rnd == null
6190: 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d 65 20  ) // First time 
61a0: 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65 72 65  we've encountere
61b0: 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20  d the lock..    
61c0: 20 20 20 20 20 20 20 20 20 20 72 6e 64 20 3d 20            rnd = 
61d0: 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d  new Random();...
61e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
61f0: 49 66 20 77 65 27 76 65 20 65 78 63 65 65 64 65  If we've exceede
6200: 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20  d the command's 
6210: 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20 75 70  timeout, give up
6220: 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20 65 72   and throw an er
6230: 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
6240: 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76 69 72   if ((uint)Envir
6250: 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74  onment.TickCount
6260: 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e 20 74   - starttick > t
6270: 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20 20  imeoutMS)..     
6280: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6290: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
62a0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
62b0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
62c0: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
62d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
62e0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
62f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6300: 20 20 20 20 20 2f 2f 20 4f 74 68 65 72 77 69 73       // Otherwis
6310: 65 20 73 6c 65 65 70 20 66 6f 72 20 61 20 72 61  e sleep for a ra
6320: 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74  ndom amount of t
6330: 69 6d 65 20 75 70 20 74 6f 20 31 35 30 6d 73 0d  ime up to 150ms.
6340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
6350: 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e  ystem.Threading.
6360: 54 68 72 65 61 64 2e 53 6c 65 65 70 28 72 6e 64  Thread.Sleep(rnd
6370: 2e 4e 65 78 74 28 31 2c 20 31 35 30 29 29 3b 0d  .Next(1, 150));.
6380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6390: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
63a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
63b0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
63c0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
63d0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
63e0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
63f0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a  astError());....
6400: 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61 69          strRemai
6410: 6e 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  n = UTF8ToString
6420: 28 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a 20  (ptr, len);.... 
6430: 20 20 20 20 20 20 20 69 66 20 28 73 74 61 74 65         if (state
6440: 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75  mentHandle != nu
6450: 6c 6c 29 20 63 6d 64 20 3d 20 6e 65 77 20 53 51  ll) cmd = new SQ
6460: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 28 74 68  LiteStatement(th
6470: 69 73 2c 20 66 6c 61 67 73 2c 20 73 74 61 74 65  is, flags, state
6480: 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74 72 53  mentHandle, strS
6490: 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20  ql.Substring(0, 
64a0: 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20  strSql.Length - 
64b0: 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67 74 68  strRemain.Length
64c0: 29 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d 0a 0d  ), previous);...
64d0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
64e0: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  cmd;..      }.. 
64f0: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
6500: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 68      {..        h
6510: 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d 0a 20  andle.Free();.. 
6520: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
6530: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
6540: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
6550: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
6560: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
6570: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
6580: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
6590: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
65a0: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
65b0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
65c0: 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67  ogMessage(String
65d0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
65e0: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
65f0: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
6600: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  ,..            "
6610: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
6620: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
6630: 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e 2e 22 2c  {1} as NULL...",
6640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61  ..            ha
6650: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65  ndleIntPtr, inde
6660: 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  x));..    }.... 
6670: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61     protected sta
6680: 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64  tic void LogBind
6690: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
66a0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69  Handle handle, i
66b0: 6e 74 20 69 6e 64 65 78 2c 20 56 61 6c 75 65 54  nt index, ValueT
66c0: 79 70 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ype value)..    
66d0: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
66e0: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
66f0: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
6700: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
6710: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
6720: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
6730: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
6740: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
6750: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
6760: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
6770: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
6780: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
6790: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
67a0: 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 2c  value.GetType(),
67b0: 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d   value));..    }
67c0: 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
67d0: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 46 6f  static string Fo
67e0: 72 6d 61 74 44 61 74 65 54 69 6d 65 28 44 61 74  rmatDateTime(Dat
67f0: 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20  eTime value)..  
6800: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 74 72    {..        Str
6810: 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c  ingBuilder resul
6820: 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  t = new StringBu
6830: 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20  ilder();....    
6840: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
6850: 64 28 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67  d(value.ToString
6860: 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a  ("yyyy-MM-ddTHH:
6870: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22 29  mm:ss.FFFFFFFK")
6880: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
6890: 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d  lt.Append(' ');.
68a0: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
68b0: 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b 69 6e  Append(value.Kin
68c0: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73  d);..        res
68d0: 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b  ult.Append(' ');
68e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74  ..        result
68f0: 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54 69  .Append(value.Ti
6900: 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  cks);....       
6910: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54   return result.T
6920: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
6930: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
6940: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
6950: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
6960: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
6970: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
6980: 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d  DateTime value).
6990: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
69a0: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
69b0: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
69c0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
69d0: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
69e0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
69f0: 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69            "Bindi
6a00: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d  ng statement {0}
6a10: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61   paramter #{1} a
6a20: 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20  s type {2} with 
6a30: 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e  value {{{3}}}...
6a40: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
6a50: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
6a60: 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61 74 65  dex, typeof(Date
6a70: 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44 61 74  Time), FormatDat
6a80: 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29 3b 0d  eTime(value)));.
6a90: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
6aa0: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
6ab0: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
6ac0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
6ad0: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
6ae0: 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  dex, string valu
6af0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
6b00: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
6b10: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
6b20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
6b30: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
6b40: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
6b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69  .            "Bi
6b60: 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  nding statement 
6b70: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31  {0} paramter #{1
6b80: 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69  } as type {2} wi
6b90: 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d  th value {{{3}}}
6ba0: 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
6bb0: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
6bc0: 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 53   index, typeof(S
6bd0: 74 72 69 6e 67 29 2c 20 28 76 61 6c 75 65 20 21  tring), (value !
6be0: 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75 65 20  = null) ? value 
6bf0: 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20  : "<null>"));.. 
6c00: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76     }....    priv
6c10: 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
6c20: 67 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c 53  g ToHexadecimalS
6c30: 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20  tring(..        
6c40: 62 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a 20 20  byte[] array..  
6c50: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
6c60: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 72 61          if (arra
6c70: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
6c80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
6c90: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
6ca0: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65  StringBuilder re
6cb0: 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e  sult = new Strin
6cc0: 67 42 75 69 6c 64 65 72 28 61 72 72 61 79 2e 4c  gBuilder(array.L
6cd0: 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d 0a 20  ength * 2);.... 
6ce0: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74         int lengt
6cf0: 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74 68  h = array.Length
6d00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  ;....        for
6d10: 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
6d20: 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b   index < length;
6d30: 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20   index++)..     
6d40: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
6d50: 70 65 6e 64 28 61 72 72 61 79 5b 69 6e 64 65 78  pend(array[index
6d60: 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78 32 22 29  ].ToString("x2")
6d70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
6d80: 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74  turn result.ToSt
6d90: 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ring();..    }..
6da0: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
6db0: 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42  static void LogB
6dc0: 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ind(SQLiteStatem
6dd0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
6de0: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74  , int index, byt
6df0: 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  e[] value)..    
6e00: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
6e10: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
6e20: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
6e30: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
6e40: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
6e50: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
6e60: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
6e70: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
6e80: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
6e90: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
6ea0: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
6eb0: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
6ec0: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
6ed0: 74 79 70 65 6f 66 28 42 79 74 65 5b 5d 29 2c 20  typeof(Byte[]), 
6ee0: 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20  (value != null) 
6ef0: 3f 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c 53  ? ToHexadecimalS
6f00: 74 72 69 6e 67 28 76 61 6c 75 65 29 20 3a 20 22  tring(value) : "
6f10: 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20  <null>"));..    
6f20: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
6f30: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
6f40: 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69  Bind_Double(SQLi
6f50: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
6f60: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
6f70: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
6f80: 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65  nt index, double
6f90: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
6fa0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
6fb0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
6fc0: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
6fd0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20  ite_stmt;....   
6fe0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
6ff0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
7000: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
7010: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
7020: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
7030: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
7040: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
7050: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
7060: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
7070: 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c 41     }....#if !PLA
7080: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
7090: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
70a0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
70b0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
70c0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
70d0: 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64  bind_double(hand
70e0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
70f0: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
7100: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
7110: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
7120: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
7130: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
7140: 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f  te3_bind_double_
7150: 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20  interop(handle, 
7160: 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65  index, ref value
7170: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
7180: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
7190: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
71a0: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
71b0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
71c0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
71d0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
71e0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
71f0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
7200: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
7210: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
7220: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e  ide void Bind_In
7230: 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t32(SQLiteStatem
7240: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
7250: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
7260: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
7270: 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20  , int value)..  
7280: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
7290: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
72a0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
72b0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
72c0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
72d0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
72e0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
72f0: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
7300: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
7310: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
7320: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7330: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
7340: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
7350: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7360: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
7370: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
7380: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
7390: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68 61  ite3_bind_int(ha
73a0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
73b0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  ue);..        if
73c0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
73d0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
73e0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
73f0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
7400: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
7410: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
7420: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
7430: 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c 69 74 65  nd_UInt32(SQLite
7440: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
7450: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7460: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
7470: 20 69 6e 64 65 78 2c 20 75 69 6e 74 20 76 61 6c   index, uint val
7480: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
7490: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
74a0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
74b0: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
74c0: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
74d0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
74e0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
74f0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
7500: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7510: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
7520: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7530: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
7540: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7550: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
7560: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
7570: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
7580: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
7590: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
75a0: 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ode n;....      
75b0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
75c0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
75d0: 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74 33 32 41  lags.BindUInt32A
75e0: 73 49 6e 74 36 34 29 20 3d 3d 20 53 51 4c 69 74  sInt64) == SQLit
75f0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7600: 2e 42 69 6e 64 55 49 6e 74 33 32 41 73 49 6e 74  .BindUInt32AsInt
7610: 36 34 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  64)..        {..
7620: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67              long
7630: 20 76 61 6c 75 65 32 20 3d 20 76 61 6c 75 65 3b   value2 = value;
7640: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
7650: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
7660: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
7670: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
7680: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7690: 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c  bind_int64(handl
76a0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 32  e, index, value2
76b0: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
76c0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
76d0: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
76e0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
76f0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
7700: 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  64_interop(handl
7710: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
7720: 6c 75 65 32 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  lue2);..#else.. 
7730: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
7740: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
7750: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
7760: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
7770: 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
7780: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
7790: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
77a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
77b0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69  .sqlite3_bind_ui
77c0: 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nt(handle, index
77d0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
77e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 69 66     }..        if
77f0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
7800: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
7810: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
7820: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
7830: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
7840: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
7850: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
7860: 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65 53  nd_Int64(SQLiteS
7870: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
7880: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7890: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
78a0: 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c 75  index, long valu
78b0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
78c0: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
78d0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
78e0: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
78f0: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
7900: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
7910: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
7920: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
7930: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7940: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
7950: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7960: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
7970: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7980: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
7990: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
79a0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
79b0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
79c0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
79d0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
79e0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
79f0: 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e  int64(handle, in
7a00: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  dex, value);..#e
7a10: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
7a20: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51  DARD..        SQ
7a30: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
7a40: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
7a50: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
7a60: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
7a70: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
7a80: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
7a90: 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  se..        thro
7aa0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
7ab0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
7ac0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
7ad0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
7ae0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
7af0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
7b00: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
7b10: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
7b20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
7b30: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
7b40: 64 20 42 69 6e 64 5f 55 49 6e 74 36 34 28 53 51  d Bind_UInt64(SQ
7b50: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
7b60: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
7b70: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
7b80: 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 6c 6f 6e   int index, ulon
7b90: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
7ba0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
7bb0: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
7bc0: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
7bd0: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69  lite_stmt;....#i
7be0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
7bf0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
7c00: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
7c10: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
7c20: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
7c30: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
7c40: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
7c50: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
7c60: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
7c70: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
7c80: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
7c90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7ca0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
7cb0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
7cc0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7cd0: 5f 62 69 6e 64 5f 75 69 6e 74 36 34 28 68 61 6e  _bind_uint64(han
7ce0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
7cf0: 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
7d00: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
7d10: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
7d20: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
7d30: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
7d40: 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34  ite3_bind_uint64
7d50: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
7d60: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
7d70: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
7d80: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
7d90: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
7da0: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
7db0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
7dc0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
7dd0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
7de0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
7df0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
7e00: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
7e10: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
7e20: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 54  ride void Bind_T
7e30: 65 78 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ext(SQLiteStatem
7e40: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
7e50: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
7e60: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
7e70: 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d  , string value).
7e80: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
7e90: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
7ea0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
7eb0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
7ec0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
7ed0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
7ee0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
7ef0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
7f00: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7f10: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
7f20: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7f30: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
7f40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7f50: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
7f60: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
7f70: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
7f80: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
7f90: 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
7fa0: 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 23 69 66  8(value);....#if
7fb0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
7fc0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
7fd0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
7fe0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
7ff0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
8000: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
8010: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
8020: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
8030: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
8040: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
8050: 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  , b);..        }
8060: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
8070: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
8080: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
8090: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
80a0: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61  te3_bind_text(ha
80b0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20  ndle, index, b, 
80c0: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49  b.Length - 1, (I
80d0: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
80e0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
80f0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
8100: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
8110: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
8120: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
8130: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
8140: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
8150: 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74 65 54   void Bind_DateT
8160: 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ime(SQLiteStatem
8170: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
8180: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
8190: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
81a0: 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29 0d 0a  , DateTime dt)..
81b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
81c0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
81d0: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
81e0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
81f0: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
8200: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
8210: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
8220: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
8230: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
8240: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
8250: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
8260: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
8270: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8280: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
8290: 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d 0a 20  , index, dt);.. 
82a0: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
82b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 77 69 74  ....        swit
82c0: 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72  ch (_datetimeFor
82d0: 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  mat)..        {.
82e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
82f0: 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e SQLiteDateForm
8300: 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20 20  ats.Ticks:..    
8310: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8330: 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20     long value = 
8340: 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 23 69 66  dt.Ticks;....#if
8350: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
8360: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8380: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
8390: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
83a0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
83b0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
83c0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
83d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
8400: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
8410: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
8420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8430: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8440: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
8450: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
8460: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8470: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
8480: 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69  _int64(handle, i
8490: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
84a0: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
84b0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
84c0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
84d0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
84e0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
84f0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
8500: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61  int64_interop(ha
8510: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
8520: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
8530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8540: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
8550: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
8560: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
8570: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
8580: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
8590: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
85a0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
85b0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
85c0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
85d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
85e0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
8610: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
8620: 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79 3a 0d  mats.JulianDay:.
8630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8640: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8650: 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76          double v
8660: 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69 61 6e 44  alue = ToJulianD
8670: 61 79 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21  ay(dt);....#if !
8680: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
8690: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
86a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
86b0: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
86c0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
86d0: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
86e0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
86f0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
8700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8710: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8720: 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67               Log
8730: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
8740: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
8750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8760: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8770: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
8780: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
8790: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
87a0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  s.sqlite3_bind_d
87b0: 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69 6e  ouble(handle, in
87c0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  dex, value);..#e
87d0: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
87e0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
87f0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
8800: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
8810: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
8820: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  s.sqlite3_bind_d
8830: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61  ouble_interop(ha
8840: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
8850: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
8860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8870: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
8880: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
8890: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
88a0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
88b0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
88c0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
88d0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
88e0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
88f0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
8900: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8910: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
8920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
8940: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
8950: 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 3a 0d  mats.UnixEpoch:.
8960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8970: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8980: 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c          long val
8990: 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49  ue = Convert.ToI
89a0: 6e 74 36 34 28 64 74 2e 53 75 62 74 72 61 63 74  nt64(dt.Subtract
89b0: 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f 74 61  (UnixEpoch).Tota
89c0: 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a 23 69  lSeconds);....#i
89d0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
89e0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
89f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a00: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
8a10: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
8a20: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
8a30: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8a40: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
8a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8a60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a80: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
8a90: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
8aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ab0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
8ad0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
8ae0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
8af0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
8b00: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
8b10: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
8b20: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
8b30: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
8b40: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
8b50: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
8b60: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8b70: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
8b80: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68  _int64_interop(h
8b90: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
8ba0: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  f value);..#else
8bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8bc0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
8bd0: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
8be0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
8bf0: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
8c00: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
8c10: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8c20: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
8c30: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
8c40: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
8c50: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8c60: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c80: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  }..            d
8c90: 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20  efault:..       
8ca0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cc0: 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
8cd0: 38 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21 50  8(dt);....#if !P
8ce0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
8cf0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8d10: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
8d20: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
8d30: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
8d40: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
8d50: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8d80: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
8d90: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
8da0: 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20  x, b);..        
8db0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
8dc0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
8dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
8de0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
8df0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
8e00: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
8e10: 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69  d_text(handle, i
8e20: 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74  ndex, b, b.Lengt
8e30: 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28  h - 1, (IntPtr)(
8e40: 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  -1));..         
8e50: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
8e60: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
8e70: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
8e80: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
8e90: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
8ea0: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
8eb0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
8ec0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8ed0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
8ee0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
8ef0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
8f00: 76 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53  void Bind_Blob(S
8f10: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
8f20: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
8f30: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
8f40: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74  , int index, byt
8f50: 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29 0d 0a 20  e[] blobData).. 
8f60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
8f70: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
8f80: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
8f90: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
8fa0: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
8fb0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
8fc0: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
8fd0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
8fe0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
8ff0: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
9000: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
9010: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
9020: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9030: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
9040: 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61   index, blobData
9050: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
9060: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
9070: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9080: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
9090: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
90a0: 5f 62 69 6e 64 5f 62 6c 6f 62 28 68 61 6e 64 6c  _bind_blob(handl
90b0: 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61  e, index, blobDa
90c0: 74 61 2c 20 62 6c 6f 62 44 61 74 61 2e 4c 65 6e  ta, blobData.Len
90d0: 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31  gth, (IntPtr)(-1
90e0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ));..        if 
90f0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
9100: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
9110: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
9120: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
9130: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
9140: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
9150: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
9160: 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61  d_Null(SQLiteSta
9170: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
9180: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
9190: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
91a0: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
91b0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
91c0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
91d0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
91e0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
91f0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
9200: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
9210: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
9220: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
9230: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
9240: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
9250: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
9260: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9270: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
9280: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d  handle, index);.
9290: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
92a0: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  if....        SQ
92b0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
92c0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
92d0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
92e0: 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65 2c 20  nd_null(handle, 
92f0: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
9300: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
9310: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
9320: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
9330: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
9340: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
9350: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
9360: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
9370: 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74 28  Bind_ParamCount(
9380: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
9390: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
93a0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
93b0: 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
93c0: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
93d0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
93e0: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
93f0: 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e  tmt;..        in
9400: 74 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65  t value = Unsafe
9410: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9420: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
9430: 65 74 65 72 5f 63 6f 75 6e 74 28 68 61 6e 64 6c  eter_count(handl
9440: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  e);....        i
9450: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
9460: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
9470: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
9480: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
9490: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
94a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
94b0: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
94c0: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
94d0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
94e0: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
94f0: 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f  essage(String.Fo
9500: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
9510: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
9520: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
9530: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
9540: 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b      "Statement {
9550: 30 7d 20 70 61 72 61 6d 74 65 72 20 63 6f 75 6e  0} paramter coun
9560: 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20  t is {1}.",..   
9570: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e               han
9580: 64 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c 75 65  dleIntPtr, value
9590: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
95a0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
95b0: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a   value;..    }..
95c0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
95d0: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 42  verride string B
95e0: 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28 53 51  ind_ParamName(SQ
95f0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
9600: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
9610: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
9620: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
9630: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
9640: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
9650: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
9660: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20  _sqlite_stmt;.. 
9670: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
9680: 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49  me;....#if !SQLI
9690: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
96a0: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20       int len;.. 
96b0: 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54         name = UT
96c0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
96d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
96e0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
96f0: 6d 65 74 65 72 5f 6e 61 6d 65 5f 69 6e 74 65 72  meter_name_inter
9700: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
9710: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
9720: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
9730: 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53    name = UTF8ToS
9740: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
9750: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9760: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
9770: 5f 6e 61 6d 65 28 68 61 6e 64 6c 65 2c 20 69 6e  _name(handle, in
9780: 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
9790: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  if....        if
97a0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
97b0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
97c0: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
97d0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
97e0: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
97f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9800: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
9810: 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65  eIntPtr = handle
9820: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9830: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
9840: 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72  ssage(String.For
9850: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
9860: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
9870: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
9880: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9890: 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30     "Statement {0
98a0: 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20  } paramter #{1} 
98b0: 6e 61 6d 65 20 69 73 20 7b 7b 7b 32 7d 7d 7d 2e  name is {{{2}}}.
98c0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
98d0: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
98e0: 2c 20 69 6e 64 65 78 2c 20 6e 61 6d 65 29 29 3b  , index, name));
98f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
9900: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 61         return na
9910: 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  me;..    }....  
9920: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
9930: 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61 72  ide int Bind_Par
9940: 61 6d 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74  amIndex(SQLiteSt
9950: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
9960: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
9970: 61 67 73 20 66 6c 61 67 73 2c 20 73 74 72 69 6e  ags flags, strin
9980: 67 20 70 61 72 61 6d 4e 61 6d 65 29 0d 0a 20 20  g paramName)..  
9990: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
99a0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
99b0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
99c0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
99d0: 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
99e0: 78 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  x = UnsafeNative
99f0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9a00: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69  bind_parameter_i
9a10: 6e 64 65 78 28 68 61 6e 64 6c 65 2c 20 54 6f 55  ndex(handle, ToU
9a20: 54 46 38 28 70 61 72 61 6d 4e 61 6d 65 29 29 3b  TF8(paramName));
9a30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
9a40: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
9a50: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
9a60: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
9a70: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
9a80: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
9a90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9aa0: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
9ab0: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
9ac0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
9ad0: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
9ae0: 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  age(String.Forma
9af0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
9b00: 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
9b10: 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
9b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9b30: 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20   "Statement {0} 
9b40: 70 61 72 61 6d 74 65 72 20 69 6e 64 65 78 20 6f  paramter index o
9b50: 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d 7d 20 69  f name {{{1}}} i
9b60: 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20 20 20 20  s #{2}.",..     
9b70: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
9b80: 65 49 6e 74 50 74 72 2c 20 70 61 72 61 6d 4e 61  eIntPtr, paramNa
9b90: 6d 65 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20  me, index));..  
9ba0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9bb0: 20 20 20 72 65 74 75 72 6e 20 69 6e 64 65 78 3b     return index;
9bc0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
9bd0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
9be0: 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74   int ColumnCount
9bf0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
9c00: 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20   stmt)..    {.. 
9c10: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
9c20: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9c30: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
9c40: 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  ount(stmt._sqlit
9c50: 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 7d 0d  e_stmt);..    }.
9c60: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
9c70: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
9c80: 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c 69 74  ColumnName(SQLit
9c90: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
9ca0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
9cb0: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
9cc0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
9cd0: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
9ce0: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
9cf0: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
9d00: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9d10: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65  column_name_inte
9d20: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
9d30: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
9d40: 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  t len), len);..#
9d50: 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
9d60: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
9d70: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9d80: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
9d90: 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71  mn_name(stmt._sq
9da0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
9db0: 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  ), -1);..#endif.
9dc0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
9dd0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
9de0: 54 79 70 65 41 66 66 69 6e 69 74 79 20 43 6f 6c  TypeAffinity Col
9df0: 75 6d 6e 41 66 66 69 6e 69 74 79 28 53 51 4c 69  umnAffinity(SQLi
9e00: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
9e10: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
9e20: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
9e30: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
9e40: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
9e50: 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d 74 2e 5f  lumn_type(stmt._
9e60: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
9e70: 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ex);..    }.... 
9e80: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
9e90: 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75  ride string Colu
9ea0: 6d 6e 54 79 70 65 28 53 51 4c 69 74 65 53 74 61  mnType(SQLiteSta
9eb0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
9ec0: 20 69 6e 64 65 78 2c 20 6f 75 74 20 54 79 70 65   index, out Type
9ed0: 41 66 66 69 6e 69 74 79 20 6e 41 66 66 69 6e 69  Affinity nAffini
9ee0: 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ty)..    {..    
9ef0: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66 20    int len;..#if 
9f00: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
9f10: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
9f20: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
9f30: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
9f40: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f 69  olumn_decltype_i
9f50: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
9f60: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
9f70: 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73   out len);..#els
9f80: 65 0d 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d  e..      len = -
9f90: 31 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  1;..      IntPtr
9fa0: 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   p = UnsafeNativ
9fb0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9fc0: 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
9fd0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
9fe0: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e  mt, index);..#en
9ff0: 64 69 66 0d 0a 20 20 20 20 20 20 6e 41 66 66 69  dif..      nAffi
a000: 6e 69 74 79 20 3d 20 43 6f 6c 75 6d 6e 41 66 66  nity = ColumnAff
a010: 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65  inity(stmt, inde
a020: 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  x);....      if 
a030: 28 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  (p != IntPtr.Zer
a040: 6f 29 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f  o) return UTF8To
a050: 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d  String(p, len);.
a060: 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20  .      else..   
a070: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 74     {..        st
a080: 72 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74 6d 74  ring[] ar = stmt
a090: 2e 54 79 70 65 44 65 66 69 6e 69 74 69 6f 6e 73  .TypeDefinitions
a0a0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61  ;..        if (a
a0b0: 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r != null)..    
a0c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a0d0: 20 69 66 20 28 69 6e 64 65 78 20 3c 20 61 72 2e   if (index < ar.
a0e0: 4c 65 6e 67 74 68 20 26 26 20 61 72 5b 69 6e 64  Length && ar[ind
a0f0: 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ex] != null)..  
a100: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a110: 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20   ar[index];..   
a120: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a130: 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d  return String.Em
a140: 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  pty;....        
a150: 2f 2f 73 77 69 74 63 68 20 28 6e 41 66 66 69 6e  //switch (nAffin
a160: 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ity)..        //
a170: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63  {..        //  c
a180: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
a190: 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20  .Int64:..       
a1a0: 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 42   //    return "B
a1b0: 49 47 49 4e 54 22 3b 0d 0a 20 20 20 20 20 20 20  IGINT";..       
a1c0: 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41 66   //  case TypeAf
a1d0: 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a  finity.Double:..
a1e0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65          //    re
a1f0: 74 75 72 6e 20 22 44 4f 55 42 4c 45 22 3b 0d 0a  turn "DOUBLE";..
a200: 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65          //  case
a210: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c   TypeAffinity.Bl
a220: 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  ob:..        // 
a230: 20 20 20 72 65 74 75 72 6e 20 22 42 4c 4f 42 22     return "BLOB"
a240: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 64  ;..        //  d
a250: 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20  efault:..       
a260: 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 54   //    return "T
a270: 45 58 54 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f  EXT";..        /
a280: 2f 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  /}..      }..   
a290: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
a2a0: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
a2b0: 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51 4c 69  ColumnIndex(SQLi
a2c0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
a2d0: 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e  , string columnN
a2e0: 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ame)..    {..   
a2f0: 20 20 20 69 6e 74 20 78 20 3d 20 43 6f 6c 75 6d     int x = Colum
a300: 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d  nCount(stmt);...
a310: 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20  .      for (int 
a320: 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b  n = 0; n < x; n+
a330: 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  +)..      {..   
a340: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
a350: 43 6f 6d 70 61 72 65 28 63 6f 6c 75 6d 6e 4e 61  Compare(columnNa
a360: 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 73  me, ColumnName(s
a370: 74 6d 74 2c 20 6e 29 2c 20 53 74 72 69 6e 67 43  tmt, n), StringC
a380: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
a390: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20  lIgnoreCase) == 
a3a0: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  0)..          re
a3b0: 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 7d  turn n;..      }
a3c0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d  ..      return -
a3d0: 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  1;..    }....   
a3e0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a3f0: 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
a400: 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51 4c  OriginalName(SQL
a410: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
a420: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
a430: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
a440: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
a450: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
a460: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
a470: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
a480: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
a490: 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f  3_column_origin_
a4a0: 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  name_interop(stm
a4b0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
a4c0: 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c  index, out len),
a4d0: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
a4e0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
a4f0: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
a500: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a510: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
a520: 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71  in_name(stmt._sq
a530: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
a540: 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  ), -1);..#endif.
a550: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
a560: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
a570: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 44 61 74  string ColumnDat
a580: 61 62 61 73 65 4e 61 6d 65 28 53 51 4c 69 74 65  abaseName(SQLite
a590: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
a5a0: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
a5b0: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
a5c0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
a5d0: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72  nt len;..      r
a5e0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
a5f0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
a600: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
a610: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
a620: 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ame_interop(stmt
a630: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
a640: 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20  ndex, out len), 
a650: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
a660: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
a670: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
a680: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a690: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62  te3_column_datab
a6a0: 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73  ase_name(stmt._s
a6b0: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
a6c0: 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  x), -1);..#endif
a6d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
a6e0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
a6f0: 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61   string ColumnTa
a700: 62 6c 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  bleName(SQLiteSt
a710: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
a720: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
a730: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
a740: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
a750: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74   len;..      ret
a760: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
a770: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
a780: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
a790: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69  umn_table_name_i
a7a0: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
a7b0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
a7c0: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
a7d0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
a7e0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
a7f0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
a800: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
a810: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
a820: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
a830: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b  mt, index), -1);
a840: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
a850: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
a860: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6f  override void Co
a870: 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 73 74 72  lumnMetaData(str
a880: 69 6e 67 20 64 61 74 61 42 61 73 65 2c 20 73 74  ing dataBase, st
a890: 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74 72 69  ring table, stri
a8a0: 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 73  ng column, out s
a8b0: 74 72 69 6e 67 20 64 61 74 61 54 79 70 65 2c 20  tring dataType, 
a8c0: 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61  out string colla
a8d0: 74 65 53 65 71 75 65 6e 63 65 2c 20 6f 75 74 20  teSequence, out 
a8e0: 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 6f 75  bool notNull, ou
a8f0: 74 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79 4b 65  t bool primaryKe
a900: 79 2c 20 6f 75 74 20 62 6f 6f 6c 20 61 75 74 6f  y, out bool auto
a910: 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20 20 20 20  Increment)..    
a920: 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  {..      IntPtr 
a930: 64 61 74 61 54 79 70 65 50 74 72 3b 0d 0a 20 20  dataTypePtr;..  
a940: 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 53      IntPtr collS
a950: 65 71 50 74 72 3b 0d 0a 20 20 20 20 20 20 69 6e  eqPtr;..      in
a960: 74 20 6e 6e 6f 74 4e 75 6c 6c 3b 0d 0a 20 20 20  t nnotNull;..   
a970: 20 20 20 69 6e 74 20 6e 70 72 69 6d 61 72 79 4b     int nprimaryK
a980: 65 79 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  ey;..      int n
a990: 61 75 74 6f 49 6e 63 3b 0d 0a 20 20 20 20 20 20  autoInc;..      
a9a0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
a9b0: 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 64 74  n;..      int dt
a9c0: 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  Len;..      int 
a9d0: 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  csLen;....#if !S
a9e0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
a9f0: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
aa00: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
aa10: 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
aa20: 6d 6e 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74 65  mn_metadata_inte
aa30: 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  rop(_sql, ToUTF8
aa40: 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54  (dataBase), ToUT
aa50: 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46  F8(table), ToUTF
aa60: 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 64  8(column), out d
aa70: 61 74 61 54 79 70 65 50 74 72 2c 20 6f 75 74 20  ataTypePtr, out 
aa80: 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75 74 20  collSeqPtr, out 
aa90: 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e 70  nnotNull, out np
aaa0: 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20 6e  rimaryKey, out n
aab0: 61 75 74 6f 49 6e 63 2c 20 6f 75 74 20 64 74 4c  autoInc, out dtL
aac0: 65 6e 2c 20 6f 75 74 20 63 73 4c 65 6e 29 3b 0d  en, out csLen);.
aad0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 64 74  .#else..      dt
aae0: 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  Len = -1;..     
aaf0: 20 63 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a   csLen = -1;....
ab00: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
ab10: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ab20: 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
ab30: 6d 6e 5f 6d 65 74 61 64 61 74 61 28 5f 73 71 6c  mn_metadata(_sql
ab40: 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42 61 73  , ToUTF8(dataBas
ab50: 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65  e), ToUTF8(table
ab60: 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e  ), ToUTF8(column
ab70: 29 2c 20 6f 75 74 20 64 61 74 61 54 79 70 65 50  ), out dataTypeP
ab80: 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71 50  tr, out collSeqP
ab90: 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c 6c  tr, out nnotNull
aba0: 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72 79 4b 65  , out nprimaryKe
abb0: 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e 63 29  y, out nautoInc)
abc0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
abd0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
abe0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
abf0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
ac00: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
ac10: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
ac20: 20 20 20 20 20 64 61 74 61 54 79 70 65 20 3d 20       dataType = 
ac30: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 64 61 74  UTF8ToString(dat
ac40: 61 54 79 70 65 50 74 72 2c 20 64 74 4c 65 6e 29  aTypePtr, dtLen)
ac50: 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 65  ;..      collate
ac60: 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54  Sequence = UTF8T
ac70: 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 53 65 71 50  oString(collSeqP
ac80: 74 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20  tr, csLen);.... 
ac90: 20 20 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28       notNull = (
aca0: 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d  nnotNull == 1);.
acb0: 0a 20 20 20 20 20 20 70 72 69 6d 61 72 79 4b 65  .      primaryKe
acc0: 79 20 3d 20 28 6e 70 72 69 6d 61 72 79 4b 65 79  y = (nprimaryKey
acd0: 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 61   == 1);..      a
ace0: 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 28  utoIncrement = (
acf0: 6e 61 75 74 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d  nautoInc == 1);.
ad00: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
ad10: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
ad20: 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65  double GetDouble
ad30: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
ad40: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
ad50: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
ad60: 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23  double value;..#
ad70: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
ad80: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
ad90: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73       value = Uns
ada0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
adb0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
adc0: 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c  double(stmt._sql
add0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
ade0: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
adf0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
ae00: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ae10: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
ae20: 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  umn_double_inter
ae30: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
ae40: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74  stmt, index, out
ae50: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
ae60: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
ae70: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
ae80: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
ae90: 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72  dif..      retur
aea0: 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d  n value;..    }.
aeb0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
aec0: 6f 76 65 72 72 69 64 65 20 73 62 79 74 65 20 47  override sbyte G
aed0: 65 74 53 42 79 74 65 28 53 51 4c 69 74 65 53 74  etSByte(SQLiteSt
aee0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
aef0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
af00: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e  .      return un
af10: 63 68 65 63 6b 65 64 28 28 73 62 79 74 65 29 28  checked((sbyte)(
af20: 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69  GetInt32(stmt, i
af30: 6e 64 65 78 29 20 26 20 62 79 74 65 2e 4d 61 78  ndex) & byte.Max
af40: 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d  Value));..    }.
af50: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
af60: 6f 76 65 72 72 69 64 65 20 62 79 74 65 20 47 65  override byte Ge
af70: 74 42 79 74 65 28 53 51 4c 69 74 65 53 74 61 74  tByte(SQLiteStat
af80: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
af90: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
afa0: 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68       return unch
afb0: 65 63 6b 65 64 28 28 62 79 74 65 29 28 47 65 74  ecked((byte)(Get
afc0: 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
afd0: 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c  x) & byte.MaxVal
afe0: 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
aff0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
b000: 72 72 69 64 65 20 73 68 6f 72 74 20 47 65 74 49  rride short GetI
b010: 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61 74 65  nt16(SQLiteState
b020: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
b030: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
b040: 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65      return unche
b050: 63 6b 65 64 28 28 73 68 6f 72 74 29 28 47 65 74  cked((short)(Get
b060: 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
b070: 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61 78 56  x) & ushort.MaxV
b080: 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  alue));..    }..
b090: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
b0a0: 76 65 72 72 69 64 65 20 75 73 68 6f 72 74 20 47  verride ushort G
b0b0: 65 74 55 49 6e 74 31 36 28 53 51 4c 69 74 65 53  etUInt16(SQLiteS
b0c0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
b0d0: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
b0e0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75  ..      return u
b0f0: 6e 63 68 65 63 6b 65 64 28 28 75 73 68 6f 72 74  nchecked((ushort
b100: 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  )(GetInt32(stmt,
b110: 20 69 6e 64 65 78 29 20 26 20 75 73 68 6f 72 74   index) & ushort
b120: 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20  .MaxValue));..  
b130: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
b140: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
b150: 20 47 65 74 49 6e 74 33 32 28 53 51 4c 69 74 65   GetInt32(SQLite
b160: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
b170: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
b180: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
b190: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
b1a0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
b1b0: 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c  mn_int(stmt._sql
b1c0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
b1d0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
b1e0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
b1f0: 65 20 75 69 6e 74 20 47 65 74 55 49 6e 74 33 32  e uint GetUInt32
b200: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
b210: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
b220: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
b230: 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
b240: 28 28 75 69 6e 74 29 47 65 74 49 6e 74 33 32 28  ((uint)GetInt32(
b250: 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
b260: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
b270: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
b280: 6f 6e 67 20 47 65 74 49 6e 74 36 34 28 53 51 4c  ong GetInt64(SQL
b290: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
b2a0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
b2b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c 6f 6e 67     {..      long
b2c0: 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c   value;..#if !PL
b2d0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
b2e0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76  AMEWORK..      v
b2f0: 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74  alue = UnsafeNat
b300: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b310: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28  e3_column_int64(
b320: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
b330: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 69  t, index);..#eli
b340: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
b350: 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RD..      Unsafe
b360: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b370: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
b380: 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  64_interop(stmt.
b390: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
b3a0: 64 65 78 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b  dex, out value);
b3b0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
b3c0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
b3d0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
b3e0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
b3f0: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b     return value;
b400: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
b410: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
b420: 20 75 6c 6f 6e 67 20 47 65 74 55 49 6e 74 36 34   ulong GetUInt64
b430: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
b440: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
b450: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
b460: 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
b470: 28 28 75 6c 6f 6e 67 29 47 65 74 49 6e 74 36 34  ((ulong)GetInt64
b480: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d  (stmt, index));.
b490: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
b4a0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
b4b0: 73 74 72 69 6e 67 20 47 65 74 54 65 78 74 28 53  string GetText(S
b4c0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
b4d0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
b4e0: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
b4f0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
b500: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20      int len;..  
b510: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
b520: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
b530: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b540: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f  te3_column_text_
b550: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
b560: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
b570: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
b580: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
b590: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
b5a0: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
b5b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b5c0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74  column_text(stmt
b5d0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
b5e0: 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20 20 20 20  ndex),..        
b5f0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
b600: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
b610: 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73  mn_bytes(stmt._s
b620: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
b630: 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  x));..#endif..  
b640: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
b650: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 44 61 74  nal override Dat
b660: 65 54 69 6d 65 20 47 65 74 44 61 74 65 54 69 6d  eTime GetDateTim
b670: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
b680: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
b690: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
b6a0: 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46 6f   if (_datetimeFo
b6b0: 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44 61  rmat == SQLiteDa
b6c0: 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73 29  teFormats.Ticks)
b6d0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
b6e0: 20 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74 49   ToDateTime(GetI
b6f0: 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt64(stmt, index
b700: 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64  ), _datetimeKind
b710: 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69  );..      else i
b720: 66 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d  f (_datetimeForm
b730: 61 74 20 3d 3d 20 53 51 4c 69 74 65 44 61 74 65  at == SQLiteDate
b740: 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61  Formats.JulianDa
b750: 79 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  y)..        retu
b760: 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 47 65  rn ToDateTime(Ge
b770: 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e  tDouble(stmt, in
b780: 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b  dex), _datetimeK
b790: 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73  ind);..      els
b7a0: 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46  e if (_datetimeF
b7b0: 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44  ormat == SQLiteD
b7c0: 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78 45  ateFormats.UnixE
b7d0: 70 6f 63 68 29 0d 0a 20 20 20 20 20 20 20 20 72  poch)..        r
b7e0: 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65  eturn ToDateTime
b7f0: 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20  (GetInt32(stmt, 
b800: 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d  index), _datetim
b810: 65 4b 69 6e 64 29 3b 0d 0a 0d 0a 23 69 66 20 21  eKind);....#if !
b820: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
b830: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
b840: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f  .      return To
b850: 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e  DateTime(UnsafeN
b860: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
b870: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
b880: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
b890: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
b8a0: 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e  x, out len), len
b8b0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
b8c0: 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69   return ToDateTi
b8d0: 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  me(UnsafeNativeM
b8e0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
b8f0: 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e  olumn_text(stmt.
b900: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
b910: 64 65 78 29 2c 0d 0a 20 20 20 20 20 20 20 20 55  dex),..        U
b920: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b930: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
b940: 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71  n_bytes(stmt._sq
b950: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
b960: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
b970: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
b980: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
b990: 20 47 65 74 42 79 74 65 73 28 53 51 4c 69 74 65   GetBytes(SQLite
b9a0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
b9b0: 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e  int index, int n
b9c0: 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65  DataOffset, byte
b9d0: 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53  [] bDest, int nS
b9e0: 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74  tart, int nLengt
b9f0: 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  h)..    {..     
ba00: 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61   int nlen = Unsa
ba10: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
ba20: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
ba30: 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74  ytes(stmt._sqlit
ba40: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
ba50: 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e  ...      // If n
ba60: 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75  o destination bu
ba70: 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65  ffer, return the
ba80: 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20   size needed... 
ba90: 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d       if (bDest =
baa0: 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e  = null) return n
bab0: 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e  len;....      in
bac0: 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e  t nCopied = nLen
bad0: 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  gth;....      if
bae0: 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61   (nCopied + nSta
baf0: 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74  rt > bDest.Lengt
bb00: 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65  h) nCopied = bDe
bb10: 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61  st.Length - nSta
bb20: 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  rt;..      if (n
bb30: 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66  Copied + nDataOf
bb40: 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f  fset > nlen) nCo
bb50: 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44  pied = nlen - nD
bb60: 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20  ataOffset;....  
bb70: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
bb80: 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  > 0)..      {.. 
bb90: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74         IntPtr pt
bba0: 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  r = UnsafeNative
bbb0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
bbc0: 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74 6d 74  column_blob(stmt
bbd0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
bbe0: 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
bbf0: 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28    Marshal.Copy((
bc00: 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e  IntPtr)(ptr.ToIn
bc10: 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66  t64() + nDataOff
bc20: 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74  set), bDest, nSt
bc30: 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a  art, nCopied);..
bc40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65        }..      e
bc50: 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  lse..      {..  
bc60: 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20        nCopied = 
bc70: 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  0;..      }.... 
bc80: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70       return nCop
bc90: 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ied;..    }.... 
bca0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
bcb0: 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 43 68 61  ride long GetCha
bcc0: 72 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  rs(SQLiteStateme
bcd0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
bce0: 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66  ex, int nDataOff
bcf0: 73 65 74 2c 20 63 68 61 72 5b 5d 20 62 44 65 73  set, char[] bDes
bd00: 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69  t, int nStart, i
bd10: 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20  nt nLength)..   
bd20: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c   {..      int nl
bd30: 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  en;..      int n
bd40: 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68  Copied = nLength
bd50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 74 72 69 6e  ;....      strin
bd60: 67 20 73 74 72 20 3d 20 47 65 74 54 65 78 74 28  g str = GetText(
bd70: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
bd80: 20 20 20 20 20 6e 6c 65 6e 20 3d 20 73 74 72 2e       nlen = str.
bd90: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
bda0: 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75   if (bDest == nu
bdb0: 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b  ll) return nlen;
bdc0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
bdd0: 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e  opied + nStart >
bde0: 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e   bDest.Length) n
bdf0: 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c  Copied = bDest.L
be00: 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d  ength - nStart;.
be10: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
be20: 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74  ed + nDataOffset
be30: 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64   > nlen) nCopied
be40: 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f   = nlen - nDataO
be50: 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ffset;....      
be60: 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29  if (nCopied > 0)
be70: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 2e 43 6f  ..        str.Co
be80: 70 79 54 6f 28 6e 44 61 74 61 4f 66 66 73 65 74  pyTo(nDataOffset
be90: 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c  , bDest, nStart,
bea0: 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20   nCopied);..    
beb0: 20 20 65 6c 73 65 20 6e 43 6f 70 69 65 64 20 3d    else nCopied =
bec0: 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74   0;....      ret
bed0: 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20  urn nCopied;..  
bee0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
bef0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
bf00: 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65 53  l IsNull(SQLiteS
bf10: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
bf20: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
bf30: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28  ..      return (
bf40: 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73  ColumnAffinity(s
bf50: 74 6d 74 2c 20 69 6e 64 65 78 29 20 3d 3d 20 54  tmt, index) == T
bf60: 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c  ypeAffinity.Null
bf70: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
bf80: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
bf90: 64 65 20 69 6e 74 20 41 67 67 72 65 67 61 74 65  de int Aggregate
bfa0: 43 6f 75 6e 74 28 49 6e 74 50 74 72 20 63 6f 6e  Count(IntPtr con
bfb0: 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  text)..    {..  
bfc0: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
bfd0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
bfe0: 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65  qlite3_aggregate
bff0: 5f 63 6f 75 6e 74 28 63 6f 6e 74 65 78 74 29 3b  _count(context);
c000: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
c010: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
c020: 20 76 6f 69 64 20 43 72 65 61 74 65 46 75 6e 63   void CreateFunc
c030: 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 46  tion(string strF
c040: 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e 41 72  unction, int nAr
c050: 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c  gs, bool needCol
c060: 6c 53 65 71 2c 20 53 51 4c 69 74 65 43 61 6c 6c  lSeq, SQLiteCall
c070: 62 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c 69 74  back func, SQLit
c080: 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 73 74  eCallback funcst
c090: 65 70 2c 20 53 51 4c 69 74 65 46 69 6e 61 6c 43  ep, SQLiteFinalC
c0a0: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e 61  allback funcfina
c0b0: 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  l)..    {..     
c0c0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
c0d0: 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49   n;....#if !SQLI
c0e0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
c0f0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
c100: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
c110: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
c120: 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c  on_interop(_sql,
c130: 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74   ToUTF8(strFunct
c140: 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20  ion), nArgs, 4, 
c150: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
c160: 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e  c, funcstep, fun
c170: 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c  cfinal, (needCol
c180: 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20  lSeq == true) ? 
c190: 31 20 3a 20 30 29 3b 0d 0a 20 20 20 20 20 20 69  1 : 0);..      i
c1a0: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
c1b0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20  rorCode.Ok) n = 
c1c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
c1d0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
c1e0: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65  te_function_inte
c1f0: 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  rop(_sql, ToUTF8
c200: 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e  (strFunction), n
c210: 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e  Args, 1, IntPtr.
c220: 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63  Zero, func, func
c230: 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c  step, funcfinal,
c240: 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d   (needCollSeq ==
c250: 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b   true) ? 1 : 0);
c260: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e  ..#else..      n
c270: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
c280: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
c290: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f  reate_function(_
c2a0: 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46  sql, ToUTF8(strF
c2b0: 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c  unction), nArgs,
c2c0: 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   4, IntPtr.Zero,
c2d0: 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c   func, funcstep,
c2e0: 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20 20   funcfinal);..  
c2f0: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
c300: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
c310: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
c320: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c330: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
c340: 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
c350: 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67  rFunction), nArg
c360: 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72  s, 1, IntPtr.Zer
c370: 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65  o, func, funcste
c380: 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a  p, funcfinal);..
c390: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66  #endif..      if
c3a0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
c3b0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
c3c0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
c3d0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
c3e0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
c3f0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
c400: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 72  override void Cr
c410: 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74  eateCollation(st
c420: 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f  ring strCollatio
c430: 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69  n, SQLiteCollati
c440: 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43  on func, SQLiteC
c450: 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36 29  ollation func16)
c460: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
c470: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
c480: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
c490: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
c4a0: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
c4b0: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
c4c0: 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c 20 49  Collation), 2, I
c4d0: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
c4e0: 31 36 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  16);..      if (
c4f0: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
c500: 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73  Code.Ok) n = Uns
c510: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c520: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
c530: 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20  collation(_sql, 
c540: 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74  ToUTF8(strCollat
c550: 69 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74 72 2e  ion), 1, IntPtr.
c560: 5a 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20 20  Zero, func);..  
c570: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
c580: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
c590: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
c5a0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
c5b0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
c5c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
c5d0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
c5e0: 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74  nt ContextCollat
c5f0: 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69  eCompare(Collati
c600: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65  onEncodingEnum e
c610: 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65  nc, IntPtr conte
c620: 78 74 2c 20 73 74 72 69 6e 67 20 73 31 2c 20 73  xt, string s1, s
c630: 74 72 69 6e 67 20 73 32 29 0d 0a 20 20 20 20 7b  tring s2)..    {
c640: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
c650: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79  ANDARD..      by
c660: 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20  te[] b1;..      
c670: 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20  byte[] b2;..    
c680: 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e    System.Text.En
c690: 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72  coding converter
c6a0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
c6b0: 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a    switch (enc)..
c6c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c6d0: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
c6e0: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38  ncodingEnum.UTF8
c6f0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
c700: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
c710: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54  Text.Encoding.UT
c720: 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  F8;..          b
c730: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
c740: 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
c750: 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c  odingEnum.UTF16L
c760: 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
c770: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
c780: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
c790: 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20  nicode;..       
c7a0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
c7b0: 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
c7c0: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
c7d0: 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16BE:..        
c7e0: 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
c7f0: 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
c800: 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63  ng.BigEndianUnic
c810: 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ode;..          
c820: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d  break;..      }.
c830: 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f  ...      b1 = co
c840: 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
c850: 28 73 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20  (s1);..      b2 
c860: 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
c870: 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20 20  ytes(s2);....   
c880: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
c890: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c8a0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f  lite3_context_co
c8b0: 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f  llcompare_intero
c8c0: 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62  p(context, b1, b
c8d0: 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32  1.Length, b2, b2
c8e0: 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65  .Length);..#else
c8f0: 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
c900: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
c910: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
c920: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
c930: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
c940: 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74  ride int Context
c950: 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43  CollateCompare(C
c960: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
c970: 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72  Enum enc, IntPtr
c980: 20 63 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b 5d   context, char[]
c990: 20 63 31 2c 20 63 68 61 72 5b 5d 20 63 32 29 0d   c1, char[] c2).
c9a0: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
c9b0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
c9c0: 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a      byte[] b1;..
c9d0: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b        byte[] b2;
c9e0: 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54  ..      System.T
c9f0: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e  ext.Encoding con
ca00: 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a  verter = null;..
ca10: 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28  ..      switch (
ca20: 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  enc)..      {.. 
ca30: 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
ca40: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
ca50: 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20  m.UTF8:..       
ca60: 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
ca70: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
ca80: 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20  ing.UTF8;..     
ca90: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
caa0: 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
cab0: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
cac0: 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20  UTF16LE:..      
cad0: 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
cae0: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
caf0: 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20  ding.Unicode;.. 
cb00: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
cb10: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
cb20: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
cb30: 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20  num.UTF16BE:..  
cb40: 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
cb50: 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
cb60: 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69  Encoding.BigEndi
cb70: 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20  anUnicode;..    
cb80: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
cb90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62      }....      b
cba0: 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65  1 = converter.Ge
cbb0: 74 42 79 74 65 73 28 63 31 29 3b 0d 0a 20 20 20  tBytes(c1);..   
cbc0: 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65     b2 = converte
cbd0: 72 2e 47 65 74 42 79 74 65 73 28 63 32 29 3b 0d  r.GetBytes(c2);.
cbe0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
cbf0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
cc00: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ods.sqlite3_cont
cc10: 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f  ext_collcompare_
cc20: 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c  interop(context,
cc30: 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20   b1, b1.Length, 
cc40: 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d  b2, b2.Length);.
cc50: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
cc60: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
cc70: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
cc80: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
cc90: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
cca0: 6c 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c 61  l override Colla
ccb0: 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 47 65 74  tionSequence Get
ccc0: 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  CollationSequenc
ccd0: 65 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  e(SQLiteFunction
cce0: 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f   func, IntPtr co
ccf0: 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 23  ntext)..    {..#
cd00: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
cd10: 41 52 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c 61  ARD..      Colla
cd20: 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 73 65 71  tionSequence seq
cd30: 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f 6e   = new Collation
cd40: 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20 20  Sequence();..   
cd50: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
cd60: 20 20 20 69 6e 74 20 74 79 70 65 3b 0d 0a 20 20     int type;..  
cd70: 20 20 20 20 69 6e 74 20 65 6e 63 3b 0d 0a 20 20      int enc;..  
cd80: 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55      IntPtr p = U
cd90: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
cda0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ds.sqlite3_conte
cdb0: 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74 65 72  xt_collseq_inter
cdc0: 6f 70 28 63 6f 6e 74 65 78 74 2c 20 6f 75 74 20  op(context, out 
cdd0: 74 79 70 65 2c 20 6f 75 74 20 65 6e 63 2c 20 6f  type, out enc, o
cde0: 75 74 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20  ut len);....    
cdf0: 20 20 69 66 20 28 70 20 21 3d 20 6e 75 6c 6c 29    if (p != null)
ce00: 20 73 65 71 2e 4e 61 6d 65 20 3d 20 55 54 46 38   seq.Name = UTF8
ce10: 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29  ToString(p, len)
ce20: 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 54 79 70  ;..      seq.Typ
ce30: 65 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 54 79  e = (CollationTy
ce40: 70 65 45 6e 75 6d 29 74 79 70 65 3b 0d 0a 20 20  peEnum)type;..  
ce50: 20 20 20 20 73 65 71 2e 5f 66 75 6e 63 20 3d 20      seq._func = 
ce60: 66 75 6e 63 3b 0d 0a 20 20 20 20 20 20 73 65 71  func;..      seq
ce70: 2e 45 6e 63 6f 64 69 6e 67 20 3d 20 28 43 6f 6c  .Encoding = (Col
ce80: 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
ce90: 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20 20 20 20  um)enc;....     
cea0: 20 72 65 74 75 72 6e 20 73 65 71 3b 0d 0a 23 65   return seq;..#e
ceb0: 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
cec0: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
ced0: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
cee0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
cef0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
cf00: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
cf10: 50 61 72 61 6d 56 61 6c 75 65 42 79 74 65 73 28  ParamValueBytes(
cf20: 49 6e 74 50 74 72 20 70 2c 20 69 6e 74 20 6e 44  IntPtr p, int nD
cf30: 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65 5b  ataOffset, byte[
cf40: 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74  ] bDest, int nSt
cf50: 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68  art, int nLength
cf60: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
cf70: 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66  int nlen = Unsaf
cf80: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
cf90: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
cfa0: 65 73 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  es(p);....      
cfb0: 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61  // If no destina
cfc0: 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74  tion buffer, ret
cfd0: 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65  urn the size nee
cfe0: 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28  ded...      if (
cff0: 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72  bDest == null) r
d000: 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20  eturn nlen;.... 
d010: 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64       int nCopied
d020: 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20   = nLength;.... 
d030: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
d040: 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73   + nStart > bDes
d050: 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65  t.Length) nCopie
d060: 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  d = bDest.Length
d070: 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20   - nStart;..    
d080: 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20    if (nCopied + 
d090: 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c  nDataOffset > nl
d0a0: 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c  en) nCopied = nl
d0b0: 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74  en - nDataOffset
d0c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
d0d0: 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20  Copied > 0)..   
d0e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
d0f0: 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66  tPtr ptr = Unsaf
d100: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
d110: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f  qlite3_value_blo
d120: 62 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  b(p);....       
d130: 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28 49   Marshal.Copy((I
d140: 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e 74  ntPtr)(ptr.ToInt
d150: 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66 73  64() + nDataOffs
d160: 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74 61  et), bDest, nSta
d170: 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20  rt, nCopied);.. 
d180: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c       }..      el
d190: 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  se..      {..   
d1a0: 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20 30       nCopied = 0
d1b0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
d1c0: 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69      return nCopi
d1d0: 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ed;..    }....  
d1e0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
d1f0: 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74 50 61  ide double GetPa
d200: 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65 28 49  ramValueDouble(I
d210: 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
d220: 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20  {..      double 
d230: 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41  value;..#if !PLA
d240: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
d250: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61  MEWORK..      va
d260: 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  lue = UnsafeNati
d270: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d280: 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 70  3_value_double(p
d290: 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  tr);..#elif !SQL
d2a0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
d2b0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
d2c0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
d2d0: 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74  value_double_int
d2e0: 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 76 61  erop(ptr, out va
d2f0: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
d300: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
d310: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
d320: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
d330: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
d340: 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alue;..    }....
d350: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d360: 72 72 69 64 65 20 69 6e 74 20 47 65 74 50 61 72  rride int GetPar
d370: 61 6d 56 61 6c 75 65 49 6e 74 33 32 28 49 6e 74  amValueInt32(Int
d380: 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
d390: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
d3a0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d3b0: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
d3c0: 69 6e 74 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d  int(ptr);..    }
d3d0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
d3e0: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
d3f0: 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 36  etParamValueInt6
d400: 34 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  4(IntPtr ptr).. 
d410: 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 36     {..      Int6
d420: 34 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50  4 value;..#if !P
d430: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
d440: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
d450: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
d460: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d470: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28  te3_value_int64(
d480: 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  ptr);..#elif !SQ
d490: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
d4a0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
d4b0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
d4c0: 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74  _value_int64_int
d4d0: 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 76 61  erop(ptr, out va
d4e0: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
d4f0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
d500: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
d510: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
d520: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
d530: 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alue;..    }....
d540: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d550: 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74  rride string Get
d560: 50 61 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49  ParamValueText(I
d570: 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
d580: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
d590: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
d5a0: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72  nt len;..      r
d5b0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
d5c0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
d5d0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
d5e0: 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f  alue_text_intero
d5f0: 70 28 70 74 72 2c 20 6f 75 74 20 6c 65 6e 29 2c  p(ptr, out len),
d600: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
d610: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
d620: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
d630: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d640: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
d650: 70 74 72 29 2c 0d 0a 20 20 20 20 20 20 20 20 55  ptr),..        U
d660: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
d670: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
d680: 5f 62 79 74 65 73 28 70 74 72 29 29 3b 0d 0a 23  _bytes(ptr));..#
d690: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
d6a0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d6b0: 72 72 69 64 65 20 54 79 70 65 41 66 66 69 6e 69  rride TypeAffini
d6c0: 74 79 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  ty GetParamValue
d6d0: 54 79 70 65 28 49 6e 74 50 74 72 20 70 74 72 29  Type(IntPtr ptr)
d6e0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
d6f0: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
d700: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d710: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 74 72  3_value_type(ptr
d720: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
d730: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
d740: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 42 6c  de void ReturnBl
d750: 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  ob(IntPtr contex
d760: 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29  t, byte[] value)
d770: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
d780: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
d790: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
d7a0: 74 5f 62 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20  t_blob(context, 
d7b0: 76 61 6c 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e  value, value.Len
d7c0: 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31  gth, (IntPtr)(-1
d7d0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
d7e0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
d7f0: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 44  ide void ReturnD
d800: 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 63 6f 6e  ouble(IntPtr con
d810: 74 65 78 74 2c 20 64 6f 75 62 6c 65 20 76 61 6c  text, double val
d820: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ue)..    {..#if 
d830: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
d840: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
d850: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
d860: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
d870: 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74  sult_double(cont
d880: 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  ext, value);..#e
d890: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
d8a0: 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61  DARD..      Unsa
d8b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
d8c0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64  sqlite3_result_d
d8d0: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 63 6f  ouble_interop(co
d8e0: 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65  ntext, ref value
d8f0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
d900: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
d910: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
d920: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
d930: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d940: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
d950: 69 64 20 52 65 74 75 72 6e 45 72 72 6f 72 28 49  id ReturnError(I
d960: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73  ntPtr context, s
d970: 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20  tring value)..  
d980: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
d990: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
d9a0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
d9b0: 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55  ror(context, ToU
d9c0: 54 46 38 28 76 61 6c 75 65 29 2c 20 76 61 6c 75  TF8(value), valu
d9d0: 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20  e.Length);..    
d9e0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
d9f0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
da00: 52 65 74 75 72 6e 49 6e 74 33 32 28 49 6e 74 50  ReturnInt32(IntP
da10: 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20  tr context, int 
da20: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
da30: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
da40: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
da50: 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74  _result_int(cont
da60: 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  ext, value);..  
da70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
da80: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
da90: 64 20 52 65 74 75 72 6e 49 6e 74 36 34 28 49 6e  d ReturnInt64(In
daa0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 6c 6f  tPtr context, lo
dab0: 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
dac0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
dad0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
dae0: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
daf0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
db00: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34  te3_result_int64
db10: 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29  (context, value)
db20: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
db30: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
db40: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
db50: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
db60: 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ult_int64_intero
db70: 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76  p(context, ref v
db80: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
db90: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
dba0: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
dbb0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
dbc0: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
dbd0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
dbe0: 65 20 76 6f 69 64 20 52 65 74 75 72 6e 4e 75 6c  e void ReturnNul
dbf0: 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  l(IntPtr context
dc00: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
dc10: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
dc20: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
dc30: 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74 29  lt_null(context)
dc40: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
dc50: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
dc60: 65 20 76 6f 69 64 20 52 65 74 75 72 6e 54 65 78  e void ReturnTex
dc70: 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  t(IntPtr context
dc80: 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d  , string value).
dc90: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 62 79  .    {..      by
dca0: 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28  te[] b = ToUTF8(
dcb0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 55  value);..      U
dcc0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
dcd0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
dce0: 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20  t_text(context, 
dcf0: 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20 62  ToUTF8(value), b
dd00: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e  .Length - 1, (In
dd10: 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20  tPtr)(-1));..   
dd20: 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f   }....#if INTERO
dd30: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
dd40: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
dd50: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c  y>..    /// Call
dd60: 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c  s the native SQL
dd70: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
dd80: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 72 65   in order to cre
dd90: 61 74 65 20 61 20 64 69 73 70 6f 73 61 62 6c 65  ate a disposable
dda0: 0d 0a 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65  ..    /// module
ddb0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
ddc0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
ddd0: 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
dde0: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
ddf0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
de00: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64  <param name="mod
de10: 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ule">..    /// T
de20: 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74  he module object
de30: 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
de40: 20 63 72 65 61 74 69 6e 67 20 74 68 65 20 6e 61   creating the na
de50: 74 69 76 65 20 64 69 73 70 6f 73 61 62 6c 65 20  tive disposable 
de60: 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f  module...    ///
de70: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
de80: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
de90: 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f  flags">..    ///
dea0: 20 54 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74   The flags for t
deb0: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 3c 73  he associated <s
dec0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
ded0: 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62  onnection" /> ob
dee0: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
def0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
df00: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
df10: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 72 65  verride void Cre
df20: 61 74 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65  ateModule(SQLite
df30: 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 53  Module module, S
df40: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
df50: 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20  lags flags)..   
df60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
df70: 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
df80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
df90: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
dfa0: 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f  ullException("mo
dfb0: 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dule");....     
dfc0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
dfd0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
dfe0: 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c  Flags.NoLogModul
dff0: 65 29 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  e) != SQLiteConn
e000: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f  ectionFlags.NoLo
e010: 67 4d 6f 64 75 6c 65 29 0d 0a 20 20 20 20 20 20  gModule)..      
e020: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e030: 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 72 72 6f 72   module.LogError
e040: 73 20 3d 20 28 28 66 6c 61 67 73 20 26 20 53 51  s = ((flags & SQ
e050: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
e060: 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 72 72  ags.LogModuleErr
e070: 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  or) == SQLiteCon
e080: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
e090: 4d 6f 64 75 6c 65 45 72 72 6f 72 29 3b 0d 0a 20  ModuleError);.. 
e0a0: 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
e0b0: 65 2e 4c 6f 67 45 78 63 65 70 74 69 6f 6e 73 20  e.LogExceptions 
e0c0: 3d 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  = ((flags & SQLi
e0d0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
e0e0: 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70  s.LogModuleExcep
e0f0: 74 69 6f 6e 29 20 3d 3d 20 53 51 4c 69 74 65 43  tion) == SQLiteC
e100: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
e110: 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70 74 69 6f  ogModuleExceptio
e120: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  n);..        }..
e130: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73  ..        if (_s
e140: 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql == null)..   
e150: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
e160: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
e170: 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  on("connection h
e180: 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
e190: 6e 64 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndle");....     
e1a0: 20 20 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73     SetLoadExtens
e1b0: 69 6f 6e 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ion(true);..    
e1c0: 20 20 20 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f      LoadExtensio
e1d0: 6e 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n(UnsafeNativeMe
e1e0: 74 68 6f 64 73 2e 53 51 4c 49 54 45 5f 44 4c 4c  thods.SQLITE_DLL
e1f0: 2c 20 22 73 71 6c 69 74 65 33 5f 76 74 73 68 69  , "sqlite3_vtshi
e200: 6d 5f 69 6e 69 74 22 29 3b 0d 0a 0d 0a 20 20 20  m_init");....   
e210: 20 20 20 20 20 49 6e 74 50 74 72 20 70 4e 61 6d       IntPtr pNam
e220: 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  e = IntPtr.Zero;
e230: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
e240: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e250: 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d 20          pName = 
e260: 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66  SQLiteString.Utf
e270: 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e  8IntPtrFromStrin
e280: 67 28 6d 6f 64 75 6c 65 2e 4e 61 6d 65 29 3b 0d  g(module.Name);.
e290: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  ...            U
e2a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
e2b0: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ds.sqlite3_modul
e2c0: 65 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 20 3d  e nativeModule =
e2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e2e0: 20 20 6d 6f 64 75 6c 65 2e 43 72 65 61 74 65 4e    module.CreateN
e2f0: 61 74 69 76 65 4d 6f 64 75 6c 65 28 29 3b 0d 0a  ativeModule();..
e300: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
e310: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
e320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
e330: 20 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65   (UnsafeNativeMe
e340: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
e350: 65 61 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f  eate_disposable_
e360: 6d 6f 64 75 6c 65 28 0d 0a 20 20 20 20 20 20 20  module(..       
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71               _sq
e380: 6c 2c 20 70 4e 61 6d 65 2c 20 72 65 66 20 6e 61  l, pName, ref na
e390: 74 69 76 65 4d 6f 64 75 6c 65 2c 20 49 6e 74 50  tiveModule, IntP
e3a0: 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20 20 20 20  tr.Zero,..      
e3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75                nu
e3c0: 6c 6c 29 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  ll) != IntPtr.Ze
e3d0: 72 6f 29 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  ro)..#elif !SQLI
e3e0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
e3f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 55 6e 73           if (Uns
e400: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
e410: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
e420: 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c  disposable_modul
e430: 65 5f 69 6e 74 65 72 6f 70 28 0d 0a 20 20 20 20  e_interop(..    
e440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e450: 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c 20 6d 6f 64  _sql, pName, mod
e460: 75 6c 65 2e 43 72 65 61 74 65 4e 61 74 69 76 65  ule.CreateNative
e470: 4d 6f 64 75 6c 65 49 6e 74 65 72 6f 70 28 29 2c  ModuleInterop(),
e480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e490: 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
e4a0: 6c 65 2e 69 56 65 72 73 69 6f 6e 2c 20 6e 61 74  le.iVersion, nat
e4b0: 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
e4c0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
e4d0: 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
e4e0: 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 2c 20 6e  dule.xConnect, n
e4f0: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73  ativeModule.xBes
e500: 74 49 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20  tIndex,..       
e510: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
e520: 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63 6f  iveModule.xDisco
e530: 6e 6e 65 63 74 2c 20 6e 61 74 69 76 65 4d 6f 64  nnect, nativeMod
e540: 75 6c 65 2e 78 44 65 73 74 72 6f 79 2c 0d 0a 20  ule.xDestroy,.. 
e550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e560: 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
e570: 78 4f 70 65 6e 2c 20 6e 61 74 69 76 65 4d 6f 64  xOpen, nativeMod
e580: 75 6c 65 2e 78 43 6c 6f 73 65 2c 0d 0a 20 20 20  ule.xClose,..   
e590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5a0: 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46   nativeModule.xF
e5b0: 69 6c 74 65 72 2c 20 6e 61 74 69 76 65 4d 6f 64  ilter, nativeMod
e5c0: 75 6c 65 2e 78 4e 65 78 74 2c 0d 0a 20 20 20 20  ule.xNext,..    
e5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5e0: 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f  nativeModule.xEo
e5f0: 66 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  f, nativeModule.
e600: 78 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20 20 20 20  xColumn,..      
e610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
e620: 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49  tiveModule.xRowI
e630: 64 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  d, nativeModule.
e640: 78 55 70 64 61 74 65 2c 0d 0a 20 20 20 20 20 20  xUpdate,..      
e650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
e660: 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67 69  tiveModule.xBegi
e670: 6e 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  n, nativeModule.
e680: 78 53 79 6e 63 2c 0d 0a 20 20 20 20 20 20 20 20  xSync,..        
e690: 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
e6a0: 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74  veModule.xCommit
e6b0: 2c 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  , nativeModule.x
e6c0: 52 6f 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Rollback,..     
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
e6e0: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e  ativeModule.xFin
e6f0: 64 46 75 6e 63 74 69 6f 6e 2c 20 6e 61 74 69 76  dFunction, nativ
e700: 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 2c  eModule.xRename,
e710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e720: 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
e730: 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 2c 20 6e  le.xSavepoint, n
e740: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6c  ativeModule.xRel
e750: 65 61 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ease,..         
e760: 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
e770: 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63  eModule.xRollbac
e780: 6b 54 6f 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  kTo, IntPtr.Zero
e790: 2c 20 6e 75 6c 6c 29 20 21 3d 20 49 6e 74 50 74  , null) != IntPt
e7a0: 72 2e 5a 65 72 6f 29 0d 0a 23 65 6c 73 65 0d 0a  r.Zero)..#else..
e7b0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
e7c0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
e7d0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
e7e0: 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 20 21 50  ..#endif..#if !P
e7f0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
e800: 52 41 4d 45 57 4f 52 4b 20 7c 7c 20 21 53 51 4c  RAMEWORK || !SQL
e810: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
e820: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e830: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e840: 28 5f 6d 6f 64 75 6c 65 73 20 3d 3d 20 6e 75 6c  (_modules == nul
e850: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
e860: 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73          _modules
e870: 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72   = new Dictionar
e880: 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65  y<string, SQLite
e890: 4d 6f 64 75 6c 65 3e 28 29 3b 0d 0a 0d 0a 20 20  Module>();....  
e8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d                _m
e8b0: 6f 64 75 6c 65 73 2e 41 64 64 28 6d 6f 64 75 6c  odules.Add(modul
e8c0: 65 2e 4e 61 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b  e.Name, module);
e8d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e8e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
e8f0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
e900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e910: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
e920: 74 65 45 78 63 65 70 74 69 6f 6e 28 47 65 74 4c  teException(GetL
e930: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
e940: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
e950: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
e960: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
e970: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e980: 20 20 20 20 20 20 20 20 69 66 20 28 70 4e 61 6d          if (pNam
e990: 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  e != IntPtr.Zero
e9a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e9c0: 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46    SQLiteMemory.F
e9d0: 72 65 65 28 70 4e 61 6d 65 29 3b 0d 0a 20 20 20  ree(pName);..   
e9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4e 61               pNa
e9f0: 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  me = IntPtr.Zero
ea00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
ea10: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
ea20: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
ea30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
ea40: 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76   Calls the nativ
ea50: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
ea60: 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74  brary in order t
ea70: 6f 20 63 6c 65 61 6e 75 70 20 74 68 65 20 72 65  o cleanup the re
ea80: 73 6f 75 72 63 65 73 0d 0a 20 20 20 20 2f 2f 2f  sources..    ///
ea90: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
eaa0: 20 61 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69   a module contai
eab0: 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65  ning the impleme
eac0: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72  ntation of a vir
ead0: 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
eae0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
eaf0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
eb00: 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
eb10: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75      /// The modu
eb20: 6c 65 20 6f 62 6a 65 63 74 20 70 72 65 76 69 6f  le object previo
eb30: 75 73 6c 79 20 70 61 73 73 65 64 20 74 6f 20 74  usly passed to t
eb40: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43 72  he <see cref="Cr
eb50: 65 61 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a  eateModule" />..
eb60: 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d      /// method..
eb70: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
eb80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
eb90: 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d  m name="flags">.
eba0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61  .    /// The fla
ebb0: 67 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63  gs for the assoc
ebc0: 69 61 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d  iated <see cref=
ebd0: 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  "SQLiteConnectio
ebe0: 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  n" /> object ins
ebf0: 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  tance...    /// 
ec00: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
ec10: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
ec20: 76 6f 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75  void DisposeModu
ec30: 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20  le(SQLiteModule 
ec40: 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f  module, SQLiteCo
ec50: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
ec60: 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ags)..    {..   
ec70: 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
ec80: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
ec90: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
eca0: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
ecb0: 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b  ption("module");
ecc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6d 6f 64 75  ....        modu
ecd0: 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20  le.Dispose();.. 
ece0: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
ecf0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
ed00: 72 72 69 64 65 20 49 6e 74 50 74 72 20 41 67 67  rride IntPtr Agg
ed10: 72 65 67 61 74 65 43 6f 6e 74 65 78 74 28 49 6e  regateContext(In
ed20: 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20  tPtr context).. 
ed30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
ed40: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
ed50: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61  ethods.sqlite3_a
ed60: 67 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74  ggregate_context
ed70: 28 63 6f 6e 74 65 78 74 2c 20 31 29 3b 0d 0a 20  (context, 1);.. 
ed80: 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45     }....#if INTE
ed90: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
eda0: 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  E..    /// <summ
edb0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61  ary>..    /// Ca
edc0: 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53  lls the native S
edd0: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
ede0: 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 64  ry in order to d
edf0: 65 63 6c 61 72 65 20 61 20 76 69 72 74 75 61 6c  eclare a virtual
ee00: 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20   table..    /// 
ee10: 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61  in response to a
ee20: 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c   call into the <
ee30: 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
ee40: 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
ee50: 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f  reate" />..    /
ee60: 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72 65 66 3d  // or <see cref=
ee70: 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
ee80: 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f  dule.xConnect" /
ee90: 3e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  > virtual table 
eea0: 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f  methods...    //
eeb0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
eec0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
eed0: 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20  e="module">..   
eee0: 20 2f 2f 2f 20 54 68 65 20 76 69 72 74 75 61 6c   /// The virtual
eef0: 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68   table module th
ef00: 61 74 20 69 73 20 74 6f 20 62 65 20 72 65 73 70  at is to be resp
ef10: 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20  onsible for the 
ef20: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
ef30: 20 20 20 2f 2f 2f 20 62 65 69 6e 67 20 64 65 63     /// being dec
ef40: 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lared...    /// 
ef50: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
ef60: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
ef70: 74 72 53 71 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f  trSql">..    ///
ef80: 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6e 74   The string cont
ef90: 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73  aining the SQL s
efa0: 74 61 74 65 6d 65 6e 74 20 64 65 73 63 72 69 62  tatement describ
efb0: 69 6e 67 20 74 68 65 20 76 69 72 74 75 61 6c 20  ing the virtual 
efc0: 74 61 62 6c 65 20 74 6f 0d 0a 20 20 20 20 2f 2f  table to..    //
efd0: 2f 20 62 65 20 64 65 63 6c 61 72 65 64 2e 0d 0a  / be declared...
efe0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
eff0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
f000: 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a   name="error">..
f010: 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63      /// Upon suc
f020: 63 65 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e  cess, the conten
f030: 74 73 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d  ts of this param
f040: 65 74 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e  eter are undefin
f050: 65 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72  ed.  Upon failur
f060: 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73  e,..    /// it s
f070: 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e  hould contain an
f080: 20 61 70 70 72 6f 70 72 69 61 74 65 20 65 72 72   appropriate err
f090: 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20  or message...   
f0a0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
f0b0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
f0c0: 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e  ..    /// A stan
f0d0: 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
f0e0: 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f  rn code...    //
f0f0: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
f100: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
f110: 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
f120: 6f 64 65 20 44 65 63 6c 61 72 65 56 69 72 74 75  ode DeclareVirtu
f130: 61 6c 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20  alTable(..      
f140: 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d    SQLiteModule m
f150: 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  odule,..        
f160: 73 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 0d 0a  string strSql,..
f170: 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
f180: 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
f190: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
f1a0: 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20      if (_sql == 
f1b0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
f1c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 72  ..            er
f1d0: 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f  ror = "connectio
f1e0: 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  n has an invalid
f1f0: 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20   handle";..     
f200: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
f210: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
f220: 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ror;..        }.
f230: 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
f240: 72 20 70 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e  r pSql = IntPtr.
f250: 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
f260: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
f270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 53 71  .            pSq
f280: 6c 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67  l = SQLiteString
f290: 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53  .Utf8IntPtrFromS
f2a0: 74 72 69 6e 67 28 73 74 72 53 71 6c 29 3b 0d 0a  tring(strSql);..
f2b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
f2c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
f2d0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
f2e0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 65  thods.sqlite3_de
f2f0: 63 6c 61 72 65 5f 76 74 61 62 28 0d 0a 20 20 20  clare_vtab(..   
f300: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71               _sq
f310: 6c 2c 20 70 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20  l, pSql);....   
f320: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20           if ((n 
f330: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
f340: 64 65 2e 4f 6b 29 20 26 26 20 28 6d 6f 64 75 6c  de.Ok) && (modul
f350: 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20  e != null))..   
f360: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
f370: 75 6c 65 2e 44 65 63 6c 61 72 65 64 20 3d 20 74  ule.Declared = t
f380: 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
f390: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
f3a0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
f3b0: 20 65 72 72 6f 72 20 3d 20 47 65 74 4c 61 73 74   error = GetLast
f3c0: 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20  Error();....    
f3d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
f3e0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
f3f0: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
f400: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f410: 20 20 20 20 20 20 69 66 20 28 70 53 71 6c 20 21        if (pSql !
f420: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
f430: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
f440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
f450: 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65  QLiteMemory.Free
f460: 28 70 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20  (pSql);..       
f470: 20 20 20 20 20 20 20 20 20 70 53 71 6c 20 3d 20           pSql = 
f480: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
f490: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
f4a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
f4b0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
f4c0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c  y>..    /// Call
f4d0: 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c  s the native SQL
f4e0: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
f4f0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63   in order to dec
f500: 6c 61 72 65 20 61 20 76 69 72 74 75 61 6c 20 74  lare a virtual t
f510: 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75  able..    /// fu
f520: 6e 63 74 69 6f 6e 20 69 6e 20 72 65 73 70 6f 6e  nction in respon
f530: 73 65 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74  se to a call int
f540: 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  o the <see cref=
f550: 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
f560: 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e  dule.xCreate" />
f570: 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65  ..    /// or <se
f580: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
f590: 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
f5a0: 6e 65 63 74 22 20 2f 3e 20 76 69 72 74 75 61 6c  nect" /> virtual
f5b0: 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d   table methods..
f5c0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
f5d0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
f5e0: 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65  ram name="module
f5f0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
f600: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f  virtual table mo
f610: 64 75 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20  dule that is to 
f620: 62 65 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66  be responsible f
f630: 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  or the virtual t
f640: 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75  able..    /// fu
f650: 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63  nction being dec
f660: 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lared...    /// 
f670: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
f680: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
f690: 72 67 75 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d 0a  rgumentCount">..
f6a0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
f6b0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
f6c0: 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  to the function 
f6d0: 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d  being declared..
f6e0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
f6f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
f700: 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a  m name="name">..
f710: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65      /// The name
f720: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
f730: 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e   being declared.
f740: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
f750: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
f760: 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e  am name="error">
f770: 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73  ..    /// Upon s
f780: 75 63 63 65 73 73 2c 20 74 68 65 20 63 6f 6e 74  uccess, the cont
f790: 65 6e 74 73 20 6f 66 20 74 68 69 73 20 70 61 72  ents of this par
f7a0: 61 6d 65 74 65 72 20 61 72 65 20 75 6e 64 65 66  ameter are undef
f7b0: 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c  ined.  Upon fail
f7c0: 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74  ure,..    /// it
f7d0: 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20   should contain 
f7e0: 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 65  an appropriate e
f7f0: 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20  rror message... 
f800: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
f810: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
f820: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74  s>..    /// A st
f830: 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
f840: 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
f850: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
f860: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
f870: 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
f880: 72 43 6f 64 65 20 44 65 63 6c 61 72 65 56 69 72  rCode DeclareVir
f890: 74 75 61 6c 46 75 6e 63 74 69 6f 6e 28 0d 0a 20  tualFunction(.. 
f8a0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64         SQLiteMod
f8b0: 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20  ule module,..   
f8c0: 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d 65 6e       int argumen
f8d0: 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20  tCount,..       
f8e0: 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
f8f0: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
f900: 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
f910: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
f920: 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
f930: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ull)..        {.
f940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72  .            err
f950: 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e  or = "connection
f960: 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
f970: 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20  handle";..      
f980: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
f990: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72  iteErrorCode.Err
f9a0: 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  or;..        }..
f9b0: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
f9c0: 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e   pName = IntPtr.
f9d0: 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
f9e0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
f9f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 4e 61  .            pNa
fa00: 6d 65 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e  me = SQLiteStrin
fa10: 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d  g.Utf8IntPtrFrom
fa20: 53 74 72 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d  String(name);...
fa30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
fa40: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
fa50: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
fa60: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 76 65  hods.sqlite3_ove
fa70: 72 6c 6f 61 64 5f 66 75 6e 63 74 69 6f 6e 28 0d  rload_function(.
fa80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fa90: 20 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c 20 61 72   _sql, pName, ar
faa0: 67 75 6d 65 6e 74 43 6f 75 6e 74 29 3b 0d 0a 0d  gumentCount);...
fab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
fac0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
fad0: 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20  rCode.Ok) error 
fae0: 3d 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  = GetLastError()
faf0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
fb00: 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20   return n;..    
fb10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
fb20: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
fb30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
fb40: 66 20 28 70 4e 61 6d 65 20 21 3d 20 49 6e 74 50  f (pName != IntP
fb50: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
fb60: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
fb70: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
fb80: 65 6d 6f 72 79 2e 46 72 65 65 28 70 4e 61 6d 65  emory.Free(pName
fb90: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
fba0: 20 20 20 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50      pName = IntP
fbb0: 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
fbc0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
fbd0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69   }..    }..#endi
fbe0: 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  f....    /// <su
fbf0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
fc00: 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62  Enables or disab
fc10: 6c 65 64 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f  led extension lo
fc20: 61 64 69 6e 67 20 62 79 20 53 51 4c 69 74 65 2e  ading by SQLite.
fc30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
fc40: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
fc50: 61 72 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66  aram name="bOnOf
fc60: 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75  f">..    /// Tru
fc70: 65 20 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64  e to enable load
fc80: 69 6e 67 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e  ing of extension
fc90: 73 2c 20 66 61 6c 73 65 20 74 6f 20 64 69 73 61  s, false to disa
fca0: 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ble...    /// </
fcb0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
fcc0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
fcd0: 69 64 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73  id SetLoadExtens
fce0: 69 6f 6e 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29  ion(bool bOnOff)
fcf0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
fd00: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
fd10: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
fd20: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
fd30: 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74  _enable_load_ext
fd40: 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ension(..       
fd50: 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f       _sql, (bOnO
fd60: 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a  ff ? -1 : 0));..
fd70: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
fd80: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
fd90: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
fda0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
fdb0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
fdc0: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
fdd0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
fde0: 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20  ..    /// Loads 
fdf0: 61 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69  a SQLite extensi
fe00: 6f 6e 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 20  on library from 
fe10: 74 68 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d  the named file..
fe20: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
fe30: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
fe40: 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61  ram name="fileNa
fe50: 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  me">..    /// Th
fe60: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 79  e name of the dy
fe70: 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61  namic link libra
fe80: 72 79 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69  ry file containi
fe90: 6e 67 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  ng the extension
fea0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
feb0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
fec0: 72 61 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61  ram name="procNa
fed0: 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  me">..    /// Th
fee0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 65 78  e name of the ex
fef0: 70 6f 72 74 65 64 20 66 75 6e 63 74 69 6f 6e 20  ported function 
ff00: 75 73 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69  used to initiali
ff10: 7a 65 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  ze the extension
ff20: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75  ...    /// If nu
ff30: 6c 6c 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20  ll, the default 
ff40: 22 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69  "sqlite3_extensi
ff50: 6f 6e 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62 65  on_init" will be
ff60: 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20   used...    /// 
ff70: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
ff80: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
ff90: 76 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e 73 69  void LoadExtensi
ffa0: 6f 6e 28 73 74 72 69 6e 67 20 66 69 6c 65 4e 61  on(string fileNa
ffb0: 6d 65 2c 20 73 74 72 69 6e 67 20 70 72 6f 63 4e  me, string procN
ffc0: 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ame)..    {..   
ffd0: 20 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61 6d       if (fileNam
ffe0: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
fff0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
10000 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
10010 63 65 70 74 69 6f 6e 28 22 66 69 6c 65 4e 61 6d  ception("fileNam
10020 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
10030 49 6e 74 50 74 72 20 70 45 72 72 6f 72 20 3d 20  IntPtr pError = 
10040 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
10050 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
10060 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10070 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38 46      byte[] utf8F
10080 69 6c 65 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e  ileName = UTF8En
10090 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42  coding.UTF8.GetB
100a0 79 74 65 73 28 66 69 6c 65 4e 61 6d 65 20 2b 20  ytes(fileName + 
100b0 27 5c 30 27 29 3b 0d 0a 20 20 20 20 20 20 20 20  '\0');..        
100c0 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38 50      byte[] utf8P
100d0 72 6f 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d  rocName = null;.
100e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
100f0 66 20 28 70 72 6f 63 4e 61 6d 65 20 21 3d 20 6e  f (procName != n
10100 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
10110 20 20 20 20 20 20 75 74 66 38 50 72 6f 63 4e 61        utf8ProcNa
10120 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e  me = UTF8Encodin
10130 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73 28  g.UTF8.GetBytes(
10140 70 72 6f 63 4e 61 6d 65 20 2b 20 27 5c 30 27 29  procName + '\0')
10150 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10160 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
10170 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
10180 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10190 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  _load_extension(
101a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
101b0 20 20 5f 73 71 6c 2c 20 75 74 66 38 46 69 6c 65    _sql, utf8File
101c0 4e 61 6d 65 2c 20 75 74 66 38 50 72 6f 63 4e 61  Name, utf8ProcNa
101d0 6d 65 2c 20 72 65 66 20 70 45 72 72 6f 72 29 3b  me, ref pError);
101e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
101f0 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
10200 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
10210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10220 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
10230 63 65 70 74 69 6f 6e 28 6e 2c 20 55 54 46 38 54  ception(n, UTF8T
10240 6f 53 74 72 69 6e 67 28 70 45 72 72 6f 72 2c 20  oString(pError, 
10250 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  -1));..        }
10260 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
10270 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
10280 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 45            if (pE
10290 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a  rror != IntPtr.Z
102a0 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
102b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
102c0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
102d0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
102e0 5f 66 72 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a  _free(pError);..
102f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10300 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e  pError = IntPtr.
10310 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
10320 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
10330 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
10340 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73  / Enables or dis
10350 61 62 6c 65 64 20 65 78 74 65 6e 64 65 64 20 72  abled extended r
10360 65 73 75 6c 74 20 63 6f 64 65 73 20 72 65 74 75  esult codes retu
10370 72 6e 65 64 20 62 79 20 53 51 4c 69 74 65 0d 0a  rned by SQLite..
10380 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10390 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 45 78  rride void SetEx
103a0 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65  tendedResultCode
103b0 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a  s(bool bOnOff)..
103c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
103d0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
103e0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
103f0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74  hods.sqlite3_ext
10400 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64  ended_result_cod
10410 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 5f  es(..          _
10420 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d  sql, (bOnOff ? -
10430 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20  1 : 0));....    
10440 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
10450 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
10460 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
10470 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
10480 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
10490 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74    }..    /// Get
104a0 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74  s the last SQLit
104b0 65 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20  e error code..  
104c0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
104d0 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
104e0 6f 64 65 20 52 65 73 75 6c 74 43 6f 64 65 28 29  ode ResultCode()
104f0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
10500 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
10510 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10520 33 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b  3_errcode(_sql);
10530 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f  ..    }..    ///
10540 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20 53   Gets the last S
10550 51 4c 69 74 65 20 65 78 74 65 6e 64 65 64 20 65  QLite extended e
10560 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69  rror code..    i
10570 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
10580 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
10590 20 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43   ExtendedResultC
105a0 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ode()..    {..  
105b0 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
105c0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
105d0 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
105e0 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a  errcode(_sql);..
105f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
10600 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61   Add a log messa
10610 67 65 20 76 69 61 20 74 68 65 20 53 51 4c 69 74  ge via the SQLit
10620 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e  e sqlite3_log in
10630 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e  terface...    in
10640 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10650 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67 65 28  void LogMessage(
10660 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
10670 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67  iErrCode, string
10680 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20   zMessage)..    
10690 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
106a0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
106b0 69 74 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f 64  ite3_log(iErrCod
106c0 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65 73 73 61  e, ToUTF8(zMessa
106d0 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ge));..    }....
106e0 23 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45  #if INTEROP_CODE
106f0 43 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  C..    internal 
10700 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
10710 74 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d  tPassword(byte[]
10720 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d   passwordBytes).
10730 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
10740 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
10750 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
10760 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6b 65  thods.sqlite3_ke
10770 79 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f 72 64  y(_sql, password
10780 42 79 74 65 73 2c 20 70 61 73 73 77 6f 72 64 42  Bytes, passwordB
10790 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20  ytes.Length);.. 
107a0 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
107b0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
107c0 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
107d0 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
107e0 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
107f0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
10800 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10810 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73 73 77  void ChangePassw
10820 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77 50 61  ord(byte[] newPa
10830 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20  sswordBytes)..  
10840 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
10850 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
10860 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10870 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 6b 65 79  ds.sqlite3_rekey
10880 28 5f 73 71 6c 2c 20 6e 65 77 50 61 73 73 77 6f  (_sql, newPasswo
10890 72 64 42 79 74 65 73 2c 20 28 6e 65 77 50 61 73  rdBytes, (newPas
108a0 73 77 6f 72 64 42 79 74 65 73 20 3d 3d 20 6e 75  swordBytes == nu
108b0 6c 6c 29 20 3f 20 30 20 3a 20 6e 65 77 50 61 73  ll) ? 0 : newPas
108c0 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74  swordBytes.Lengt
108d0 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  h);..      if (n
108e0 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
108f0 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
10900 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
10910 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
10920 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65  r());..    }..#e
10930 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ndif....    inte
10940 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
10950 69 64 20 53 65 74 55 70 64 61 74 65 48 6f 6f 6b  id SetUpdateHook
10960 28 53 51 4c 69 74 65 55 70 64 61 74 65 43 61 6c  (SQLiteUpdateCal
10970 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20  lback func)..   
10980 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
10990 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
109a0 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f  lite3_update_hoo
109b0 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e  k(_sql, func, In
109c0 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
109d0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
109e0 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
109f0 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53   SetCommitHook(S
10a00 51 4c 69 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62  QLiteCommitCallb
10a10 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
10a20 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
10a30 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10a40 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28  te3_commit_hook(
10a50 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
10a60 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
10a70 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
10a80 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
10a90 65 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28  etTraceCallback(
10aa0 53 51 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62  SQLiteTraceCallb
10ab0 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
10ac0 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
10ad0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10ae0 74 65 33 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20  te3_trace(_sql, 
10af0 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
10b00 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
10b10 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
10b20 69 64 65 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c  ide void SetRoll
10b30 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52  backHook(SQLiteR
10b40 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20  ollbackCallback 
10b50 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
10b60 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
10b70 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10b80 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73  rollback_hook(_s
10b90 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
10ba0 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
10bb0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
10bc0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c  ry>..    /// All
10bd0 6f 77 73 20 74 68 65 20 73 65 74 74 69 6e 67 20  ows the setting 
10be0 6f 66 20 61 20 6c 6f 67 67 69 6e 67 20 63 61 6c  of a logging cal
10bf0 6c 62 61 63 6b 20 69 6e 76 6f 6b 65 64 20 62 79  lback invoked by
10c00 20 53 51 4c 69 74 65 20 77 68 65 6e 20 61 0d 0a   SQLite when a..
10c10 20 20 20 20 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e      /// log even
10c20 74 20 6f 63 63 75 72 73 2e 20 20 4f 6e 6c 79 20  t occurs.  Only 
10c30 6f 6e 65 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79  one callback may
10c40 20 62 65 20 73 65 74 2e 20 20 49 66 20 4e 55 4c   be set.  If NUL
10c50 4c 20 69 73 20 70 61 73 73 65 64 2c 0d 0a 20 20  L is passed,..  
10c60 20 20 2f 2f 2f 20 74 68 65 20 6c 6f 67 67 69 6e    /// the loggin
10c70 67 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 75 6e  g callback is un
10c80 72 65 67 69 73 74 65 72 65 64 2e 0d 0a 20 20 20  registered...   
10c90 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10ca0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
10cb0 6e 61 6d 65 3d 22 66 75 6e 63 22 3e 54 68 65 20  name="func">The 
10cc0 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f  callback functio
10cd0 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61  n to invoke.</pa
10ce0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
10cf0 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
10d00 20 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65   result code</re
10d10 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
10d20 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
10d30 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65  LiteErrorCode Se
10d40 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 53 51 4c  tLogCallback(SQL
10d50 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 66  iteLogCallback f
10d60 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  unc)..    {..   
10d70 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
10d80 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
10d90 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10da0 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67  lite3_config_log
10db0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
10dc0 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e  QLiteConfigOpsEn
10dd0 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  um.SQLITE_CONFIG
10de0 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _LOG, func, IntP
10df0 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20  tr.Zero);....   
10e00 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d       return rc;.
10e10 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
10e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
10e80 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
10e90 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61  y>..    /// Crea
10ea0 74 65 73 20 61 20 6e 65 77 20 53 51 4c 69 74 65  tes a new SQLite
10eb0 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 62   backup object b
10ec0 61 73 65 64 20 6f 6e 20 74 68 65 20 70 72 6f 76  ased on the prov
10ed0 69 64 65 64 20 64 65 73 74 69 6e 61 74 69 6f 6e  ided destination
10ee0 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61  ..    /// databa
10ef0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
10f00 54 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  The source datab
10f10 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
10f20 73 20 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20 2f  s the one..    /
10f30 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  // associated wi
10f40 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20  th this object. 
10f50 20 54 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20   The source and 
10f60 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61  destination data
10f70 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f  base..    /// co
10f80 6e 6e 65 63 74 69 6f 6e 73 20 63 61 6e 6e 6f 74  nnections cannot
10f90 20 62 65 20 74 68 65 20 73 61 6d 65 2e 0d 0a 20   be the same... 
10fa0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
10fb0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
10fc0 6d 20 6e 61 6d 65 3d 22 64 65 73 74 43 6e 6e 22  m name="destCnn"
10fd0 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e  >The destination
10fe0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
10ff0 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  tion.</param>.. 
11000 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
11010 6d 65 3d 22 64 65 73 74 4e 61 6d 65 22 3e 54 68  me="destName">Th
11020 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61  e destination da
11030 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61  tabase name.</pa
11040 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
11050 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63  aram name="sourc
11060 65 4e 61 6d 65 22 3e 54 68 65 20 73 6f 75 72 63  eName">The sourc
11070 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e  e database name.
11080 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
11090 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e  / <returns>The n
110a0 65 77 6c 79 20 63 72 65 61 74 65 64 20 62 61 63  ewly created bac
110b0 6b 75 70 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74  kup object.</ret
110c0 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
110d0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
110e0 69 74 65 42 61 63 6b 75 70 20 49 6e 69 74 69 61  iteBackup Initia
110f0 6c 69 7a 65 42 61 63 6b 75 70 28 0d 0a 20 20 20  lizeBackup(..   
11100 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
11110 63 74 69 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a  ction destCnn,..
11120 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
11130 65 73 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  estName,..      
11140 20 20 73 74 72 69 6e 67 20 73 6f 75 72 63 65 4e    string sourceN
11150 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ame..        )..
11160 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
11170 66 20 28 64 65 73 74 43 6e 6e 20 3d 3d 20 6e 75  f (destCnn == nu
11180 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
11190 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
111a0 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
111b0 28 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a  ("destCnn");....
111c0 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74          if (dest
111d0 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Name == null).. 
111e0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
111f0 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
11200 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74  lException("dest
11210 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name");....     
11220 20 20 20 69 66 20 28 73 6f 75 72 63 65 4e 61 6d     if (sourceNam
11230 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
11240 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
11250 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
11260 63 65 70 74 69 6f 6e 28 22 73 6f 75 72 63 65 4e  ception("sourceN
11270 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ame");....      
11280 20 20 53 51 4c 69 74 65 33 20 64 65 73 74 53 71    SQLite3 destSq
11290 6c 69 74 65 33 20 3d 20 64 65 73 74 43 6e 6e 2e  lite3 = destCnn.
112a0 5f 73 71 6c 20 61 73 20 53 51 4c 69 74 65 33 3b  _sql as SQLite3;
112b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
112c0 64 65 73 74 53 71 6c 69 74 65 33 20 3d 3d 20 6e  destSqlite3 == n
112d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
112e0 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
112f0 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a  mentException(..
11300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11310 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e  "Destination con
11320 6e 65 63 74 69 6f 6e 20 68 61 73 20 6e 6f 20 77  nection has no w
11330 72 61 70 70 65 72 2e 22 2c 0d 0a 20 20 20 20 20  rapper.",..     
11340 20 20 20 20 20 20 20 20 20 20 20 22 64 65 73 74             "dest
11350 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Cnn");....      
11360 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
11370 6f 6e 48 61 6e 64 6c 65 20 64 65 73 74 48 61 6e  onHandle destHan
11380 64 6c 65 20 3d 20 64 65 73 74 53 71 6c 69 74 65  dle = destSqlite
11390 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20  3._sql;....     
113a0 20 20 20 69 66 20 28 64 65 73 74 48 61 6e 64 6c     if (destHandl
113b0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
113c0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
113d0 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74  w ArgumentExcept
113e0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
113f0 20 20 20 20 20 20 22 44 65 73 74 69 6e 61 74 69        "Destinati
11400 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  on connection ha
11410 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
11420 64 6c 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  dle.",..        
11430 20 20 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e          "destCnn
11440 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
11450 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
11460 61 6e 64 6c 65 20 73 6f 75 72 63 65 48 61 6e 64  andle sourceHand
11470 6c 65 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20  le = _sql;....  
11480 20 20 20 20 20 20 69 66 20 28 73 6f 75 72 63 65        if (source
11490 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  Handle == null).
114a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
114b0 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
114c0 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
114d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
114e0 20 20 20 22 53 6f 75 72 63 65 20 63 6f 6e 6e 65     "Source conne
114f0 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76  ction has an inv
11500 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
11510 0a 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b  ...        byte[
11520 5d 20 7a 44 65 73 74 4e 61 6d 65 20 3d 20 54 6f  ] zDestName = To
11530 55 54 46 38 28 64 65 73 74 4e 61 6d 65 29 3b 0d  UTF8(destName);.
11540 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20  .        byte[] 
11550 7a 53 6f 75 72 63 65 4e 61 6d 65 20 3d 20 54 6f  zSourceName = To
11560 55 54 46 38 28 73 6f 75 72 63 65 4e 61 6d 65 29  UTF8(sourceName)
11570 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
11580 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20  iteBackupHandle 
11590 62 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e  backupHandle = n
115a0 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
115b0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
115c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
115d0 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
115e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
115f0 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20  inally /* NOTE: 
11600 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70  Thread.Abort() p
11610 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20  rotection. */.. 
11620 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11630 20 20 20 20 20 20 49 6e 74 50 74 72 20 62 61 63        IntPtr bac
11640 6b 75 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  kup = UnsafeNati
11650 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
11660 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74 28 0d 0a  3_backup_init(..
11670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11680 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73  destHandle, zDes
11690 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e  tName, sourceHan
116a0 64 6c 65 2c 20 7a 53 6f 75 72 63 65 4e 61 6d 65  dle, zSourceName
116b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
116c0 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
116d0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
116e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
11700 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 65 73  iteErrorCode res
11710 75 6c 74 43 6f 64 65 20 3d 20 52 65 73 75 6c 74  ultCode = Result
11720 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Code();....     
11730 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
11740 65 73 75 6c 74 43 6f 64 65 20 21 3d 20 53 51 4c  esultCode != SQL
11750 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
11760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11770 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
11780 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
11790 72 65 73 75 6c 74 43 6f 64 65 2c 20 47 65 74 4c  resultCode, GetL
117a0 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
117b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
117c0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
117d0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
117e0 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
117f0 6e 28 22 66 61 69 6c 65 64 20 74 6f 20 69 6e 69  n("failed to ini
11800 74 69 61 6c 69 7a 65 20 62 61 63 6b 75 70 22 29  tialize backup")
11810 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
11820 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11830 62 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e  backupHandle = n
11840 65 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48  ew SQLiteBackupH
11850 61 6e 64 6c 65 28 64 65 73 74 48 61 6e 64 6c 65  andle(destHandle
11860 2c 20 62 61 63 6b 75 70 29 3b 0d 0a 20 20 20 20  , backup);..    
11870 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
11880 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69   return new SQLi
11890 74 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  teBackup(..     
118a0 20 20 20 20 20 20 20 74 68 69 73 2c 20 62 61 63         this, bac
118b0 6b 75 70 48 61 6e 64 6c 65 2c 20 64 65 73 74 48  kupHandle, destH
118c0 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65  andle, zDestName
118d0 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 0d  , sourceHandle,.
118e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 53 6f  .            zSo
118f0 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  urceName);..    
11900 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
11910 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
11920 43 6f 70 69 65 73 20 75 70 20 74 6f 20 4e 20 70  Copies up to N p
11930 61 67 65 73 20 66 72 6f 6d 20 74 68 65 20 73 6f  ages from the so
11940 75 72 63 65 20 64 61 74 61 62 61 73 65 20 74 6f  urce database to
11950 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e   the destination
11960 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61  ..    /// databa
11970 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  se associated wi
11980 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
11990 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d   backup object..
119a0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
119b0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
119c0 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
119d0 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
119e0 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72  ect to use.</par
119f0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
11a00 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22  ram name="nPage"
11a10 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
11a20 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
11a30 6f 20 63 6f 70 79 2c 20 6e 65 67 61 74 69 76 65  o copy, negative
11a40 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20 72 65 6d   to copy all rem
11a50 61 69 6e 69 6e 67 20 70 61 67 65 73 2e 0d 0a 20  aining pages... 
11a60 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
11a70 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
11a80 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e 0d 0a 20  name="retry">.. 
11a90 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f 20 74 72     /// Set to tr
11aa0 75 65 20 69 66 20 74 68 65 20 6f 70 65 72 61 74  ue if the operat
11ab0 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ion needs to be 
11ac0 72 65 74 72 69 65 64 20 64 75 65 20 74 6f 20 64  retried due to d
11ad0 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f  atabase..    ///
11ae0 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75 65 73 3b   locking issues;
11af0 20 6f 74 68 65 72 77 69 73 65 2c 20 73 65 74 20   otherwise, set 
11b00 74 6f 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f  to false...    /
11b10 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
11b20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
11b30 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20      /// True if 
11b40 74 68 65 72 65 20 61 72 65 20 6d 6f 72 65 20 70  there are more p
11b50 61 67 65 73 20 74 6f 20 62 65 20 63 6f 70 69 65  ages to be copie
11b60 64 2c 20 66 61 6c 73 65 20 6f 74 68 65 72 77 69  d, false otherwi
11b70 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  se...    /// </r
11b80 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
11b90 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
11ba0 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75 70 28 0d  ool StepBackup(.
11bb0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
11bc0 61 63 6b 75 70 20 62 61 63 6b 75 70 2c 0d 0a 20  ackup backup,.. 
11bd0 20 20 20 20 20 20 20 69 6e 74 20 6e 50 61 67 65         int nPage
11be0 2c 0d 0a 20 20 20 20 20 20 20 20 6f 75 74 20 62  ,..        out b
11bf0 6f 6f 6c 20 72 65 74 72 79 0d 0a 20 20 20 20 20  ool retry..     
11c00 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
11c10 20 20 20 20 20 72 65 74 72 79 20 3d 20 66 61 6c       retry = fal
11c20 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  se;....        i
11c30 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c  f (backup == nul
11c40 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
11c50 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
11c60 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
11c70 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20  "backup");....  
11c80 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
11c90 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  upHandle handle 
11ca0 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65  = backup._sqlite
11cb0 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20  _backup;....    
11cc0 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d      if (handle =
11cd0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
11ce0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
11cf0 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
11d00 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
11d10 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
11d20 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
11d30 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
11d40 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49  ");....        I
11d50 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20  ntPtr handlePtr 
11d60 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
11d70 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50       if (handleP
11d80 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tr == IntPtr.Zer
11d90 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
11da0 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
11db0 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
11dc0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
11dd0 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
11de0 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
11df0 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74  lid handle point
11e00 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  er.");....      
11e10 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
11e20 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
11e30 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
11e40 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28 68 61  3_backup_step(ha
11e50 6e 64 6c 65 50 74 72 2c 20 6e 50 61 67 65 29 3b  ndlePtr, nPage);
11e60 0d 0a 20 20 20 20 20 20 20 20 62 61 63 6b 75 70  ..        backup
11e70 2e 5f 73 74 65 70 52 65 73 75 6c 74 20 3d 20 6e  ._stepResult = n
11e80 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 76 65 20  ; /* NOTE: Save 
11e90 66 6f 72 20 75 73 65 20 62 79 20 46 69 6e 69 73  for use by Finis
11ea0 68 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20  hBackup. */.... 
11eb0 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
11ec0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
11ed0 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  Ok)..        {..
11ee0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
11ef0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
11f00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
11f10 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
11f20 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29  eErrorCode.Busy)
11f30 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
11f40 20 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d           retry =
11f50 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
11f60 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
11f70 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
11f80 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
11f90 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
11fa0 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20 20 20  de.Locked)..    
11fb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11fc0 20 20 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b     retry = true;
11fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
11fe0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
11ff0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
12000 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  lse if (n == SQL
12010 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e  iteErrorCode.Don
12020 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  e)..        {.. 
12030 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
12040 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
12050 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
12060 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
12070 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
12080 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
12090 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
120a0 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
120b0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
120c0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
120d0 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
120e0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
120f0 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f  ges remaining to
12100 20 62 65 20 63 6f 70 69 65 64 20 66 72 6f 6d 20   be copied from 
12110 74 68 65 20 73 6f 75 72 63 65 0d 0a 20 20 20 20  the source..    
12120 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 74 6f 20  /// database to 
12130 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  the destination 
12140 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
12150 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65  ted with the spe
12160 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  cified..    /// 
12170 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a  backup object...
12180 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
12190 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
121a0 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22  am name="backup"
121b0 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65  >The backup obje
121c0 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61  ct to check.</pa
121d0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
121e0 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65  eturns>The numbe
121f0 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69  r of pages remai
12200 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65  ning to be copie
12210 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  d.</returns>..  
12220 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
12230 69 64 65 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e  ide int Remainin
12240 67 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  gBackup(..      
12250 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62    SQLiteBackup b
12260 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29  ackup..        )
12270 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
12280 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e   if (backup == n
12290 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
122a0 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
122b0 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
122c0 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a  n("backup");....
122d0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
122e0 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c  ckupHandle handl
122f0 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69  e = backup._sqli
12300 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20  te_backup;....  
12310 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
12320 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
12330 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
12340 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
12350 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
12360 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
12370 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
12380 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
12390 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
123a0 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74   IntPtr handlePt
123b0 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
123c0 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
123d0 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  ePtr == IntPtr.Z
123e0 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
123f0 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
12400 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
12410 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
12420 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
12430 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
12440 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69  valid handle poi
12450 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  nter.");....    
12460 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
12470 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12480 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 72 65  qlite3_backup_re
12490 6d 61 69 6e 69 6e 67 28 68 61 6e 64 6c 65 50 74  maining(handlePt
124a0 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  r);..    }....  
124b0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
124c0 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
124d0 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
124e0 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
124f0 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
12500 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20  e associated..  
12510 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 65 20 73    /// with the s
12520 70 65 63 69 66 69 65 64 20 62 61 63 6b 75 70 20  pecified backup 
12530 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
12540 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
12550 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
12560 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61  ="backup">The ba
12570 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63  ckup object to c
12580 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  heck.</param>.. 
12590 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
125a0 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  The total number
125b0 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
125c0 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
125d0 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
125e0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
125f0 64 65 20 69 6e 74 20 50 61 67 65 43 6f 75 6e 74  de int PageCount
12600 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
12610 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61   SQLiteBackup ba
12620 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d  ckup..        ).
12630 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
12640 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75  if (backup == nu
12650 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
12660 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
12670 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
12680 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20  ("backup");.... 
12690 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
126a0 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  kupHandle handle
126b0 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74   = backup._sqlit
126c0 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20  e_backup;....   
126d0 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20       if (handle 
126e0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
126f0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
12700 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
12710 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
12720 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
12730 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
12740 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
12750 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
12760 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72  IntPtr handlePtr
12770 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
12780 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
12790 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  Ptr == IntPtr.Ze
127a0 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
127b0 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
127c0 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
127d0 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
127e0 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
127f0 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
12800 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e  alid handle poin
12810 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ter.");....     
12820 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
12830 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
12840 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 70 61 67  lite3_backup_pag
12850 65 63 6f 75 6e 74 28 68 61 6e 64 6c 65 50 74 72  ecount(handlePtr
12860 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
12870 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
12880 20 20 20 20 2f 2f 2f 20 44 65 73 74 72 6f 79 73      /// Destroys
12890 20 74 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65   the backup obje
128a0 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62 61 63 6b  ct, rolling back
128b0 20 61 6e 79 20 62 61 63 6b 75 70 20 74 68 61 74   any backup that
128c0 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20 20 20 20   may be in..    
128d0 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d 0a 20 20  /// progess...  
128e0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
128f0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
12900 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54   name="backup">T
12910 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
12920 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c 2f 70 61   to destroy.</pa
12930 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
12940 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
12950 20 46 69 6e 69 73 68 42 61 63 6b 75 70 28 0d 0a   FinishBackup(..
12960 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
12970 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20  ckup backup..   
12980 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
12990 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75         if (backu
129a0 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  p == null)..    
129b0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
129c0 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
129d0 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22  ception("backup"
129e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
129f0 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
12a00 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70   handle = backup
12a10 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b  ._sqlite_backup;
12a20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
12a30 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  handle == null).
12a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
12a50 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
12a60 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
12a70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12a80 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
12a90 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
12aa0 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
12ab0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
12ac0 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65  ndlePtr = handle
12ad0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
12ae0 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e  (handlePtr == In
12af0 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
12b00 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
12b10 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
12b20 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
12b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
12b40 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
12b50 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
12b60 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a  le pointer.");..
12b70 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
12b80 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
12b90 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
12ba0 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
12bb0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
12bc0 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e  backup_finish_in
12bd0 74 65 72 6f 70 28 68 61 6e 64 6c 65 50 74 72 29  terop(handlePtr)
12be0 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
12bf0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
12c00 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
12c10 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
12c20 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28  3_backup_finish(
12c30 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6e  handlePtr);..#en
12c40 64 69 66 0d 0a 20 20 20 20 20 20 20 20 68 61 6e  dif..        han
12c50 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65 41 73 49  dle.SetHandleAsI
12c60 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a 23 69 66  nvalid();....#if
12c70 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 0d 0a 20   COUNT_HANDLE.. 
12c80 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d         if ((n ==
12c90 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12ca0 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d 3d 20 62 61  .Ok) || (n == ba
12cb0 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74  ckup._stepResult
12cc0 29 29 20 68 61 6e 64 6c 65 2e 57 61 73 52 65 6c  )) handle.WasRel
12cd0 65 61 73 65 64 4f 6b 28 29 3b 0d 0a 23 65 6e 64  easedOk();..#end
12ce0 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  if....        if
12cf0 20 28 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72   ((n != SQLiteEr
12d00 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28  rorCode.Ok) && (
12d10 6e 20 21 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65  n != backup._ste
12d20 70 52 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20  pResult))..     
12d30 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
12d40 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
12d50 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
12d60 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
12d70 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
12d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12dd0 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  //....    /// <s
12de0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
12df0 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74   Determines if t
12e00 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
12e10 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 20  ibrary has been 
12e20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
12e30 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72  the..    /// cur
12e40 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process... 
12e50 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
12e60 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
12e70 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20  rns>..    /// A 
12e80 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69  boolean indicati
12e90 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
12ea0 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  t the SQLite cor
12eb0 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
12ec0 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74  en..    /// init
12ed0 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 20  ialized for the 
12ee0 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
12ef0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
12f00 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
12f10 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
12f20 20 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29   IsInitialized()
12f30 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
12f40 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 49 73   return StaticIs
12f50 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 3b 0d 0a  Initialized();..
12f60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
12f70 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
12f80 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69  /// Determines i
12f90 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
12fa0 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
12fb0 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  en initialized f
12fc0 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  or the..    /// 
12fd0 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
12fe0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
12ff0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
13000 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
13010 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63   A boolean indic
13020 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
13030 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20   not the SQLite 
13040 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
13050 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69   been..    /// i
13060 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74  nitialized for t
13070 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
13080 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ss...    /// </r
13090 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
130a0 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f 6f  ernal static boo
130b0 6c 20 53 74 61 74 69 63 49 73 49 6e 69 74 69 61  l StaticIsInitia
130c0 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a  lized()..    {..
130d0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
130e0 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 50      // BUGFIX: P
130f0 72 65 76 65 6e 74 20 72 61 63 65 73 20 77 69 74  revent races wit
13100 68 20 6f 74 68 65 72 20 74 68 72 65 61 64 73 20  h other threads 
13110 66 6f 72 20 74 68 69 73 20 65 6e 74 69 72 65 20  for this entire 
13120 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20 20 20 20  block, due..    
13130 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 74      //         t
13140 6f 20 74 68 65 20 74 72 79 2f 66 69 6e 61 6c 6c  o the try/finall
13150 79 20 73 65 6d 61 6e 74 69 63 73 2e 20 20 53 65  y semantics.  Se
13160 65 20 74 69 63 6b 65 74 20 5b 37 32 39 30 35 63  e ticket [72905c
13170 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20 20 20 20  9a77]...        
13180 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b  //..        lock
13190 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20   (syncRoot)..   
131a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
131b0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
131c0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 61 76      // NOTE: Sav
131d0 65 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74  e the state of t
131e0 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c 61 73 73  he logging class
131f0 20 61 6e 64 20 74 68 65 6e 20 72 65 73 74 6f 72   and then restor
13200 65 20 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  e it..          
13210 20 20 2f 2f 20 20 20 20 20 20 20 61 66 74 65 72    //       after
13220 20 77 65 20 61 72 65 20 64 6f 6e 65 20 74 6f 20   we are done to 
13230 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67 20 74 6f  avoid logging to
13240 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20 65 72 72  o many false err
13250 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ors...          
13260 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
13270 20 20 62 6f 6f 6c 20 73 61 76 65 64 45 6e 61 62    bool savedEnab
13280 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c 6f 67 2e  led = SQLiteLog.
13290 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20  Enabled;..      
132a0 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
132b0 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c 73 65 3b  Enabled = false;
132c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
132d0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
132e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
132f0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
13300 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
13310 20 54 68 69 73 20 6d 65 74 68 6f 64 20 5b 61 62   This method [ab
13320 5d 75 73 65 73 20 74 68 65 20 66 61 63 74 20 74  ]uses the fact t
13330 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 20  hat SQLite will 
13340 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20  always..        
13350 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
13360 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
13370 52 52 4f 52 20 66 6f 72 20 61 6e 79 20 75 6e 6b  RROR for any unk
13380 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  nown configurati
13390 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20  on option..     
133a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
133b0 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20 74 68 65      *unless* the
133c0 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20   SQLite library 
133d0 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
133e0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0d 0a 20   initialized... 
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13400 2f 20 20 20 20 20 20 20 49 6e 20 74 68 61 74 20  /       In that 
13410 63 61 73 65 20 69 74 20 77 69 6c 6c 20 61 6c 77  case it will alw
13420 61 79 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ays return SQLIT
13430 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20 20 20 20  E_MISUSE...     
13440 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
13450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
13460 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
13470 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
13480 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
13490 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20 20  config_none(..  
134a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134b0 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70    SQLiteConfigOp
134c0 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e  sEnum.SQLITE_CON
134d0 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20 20  FIG_NONE);....  
134e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
134f0 74 75 72 6e 20 28 72 63 20 3d 3d 20 53 51 4c 69  turn (rc == SQLi
13500 74 65 45 72 72 6f 72 43 6f 64 65 2e 4d 69 73 75  teErrorCode.Misu
13510 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
13520 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
13530 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
13540 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13550 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
13560 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 73 61 76  og.Enabled = sav
13570 65 64 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20  edEnabled;..    
13580 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
13590 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
135a0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
135b0 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72  ..    /// Helper
135c0 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74   function to ret
135d0 72 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f  rieve a column o
135e0 66 20 64 61 74 61 20 66 72 6f 6d 20 61 6e 20 61  f data from an a
135f0 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 2e  ctive statement.
13600 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
13610 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
13620 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22  aram name="stmt"
13630 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62  >The statement b
13640 65 69 6e 67 20 73 74 65 70 28 29 27 64 20 74 68  eing step()'d th
13650 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20  rough</param>.. 
13660 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
13670 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68 65 20 66  me="flags">The f
13680 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
13690 77 69 74 68 20 74 68 65 20 63 6f 6e 6e 65 63 74  with the connect
136a0 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ion.</param>..  
136b0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
136c0 65 3d 22 69 6e 64 65 78 22 3e 54 68 65 20 63 6f  e="index">The co
136d0 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72 65  lumn index to re
136e0 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a  trieve</param>..
136f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
13700 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74 79  ame="typ">The ty
13710 70 65 20 6f 66 20 64 61 74 61 20 63 6f 6e 74 61  pe of data conta
13720 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75  ined in the colu
13730 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74 69 61  mn.  If Uninitia
13740 6c 69 7a 65 64 2c 20 74 68 69 73 20 66 75 6e 63  lized, this func
13750 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69 65  tion will retrie
13760 76 65 20 74 68 65 20 64 61 74 61 74 79 70 65 20  ve the datatype 
13770 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61  information.</pa
13780 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
13790 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 74  eturns>Returns t
137a0 68 65 20 64 61 74 61 20 69 6e 20 74 68 65 20 63  he data in the c
137b0 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d  olumn</returns>.
137c0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
137d0 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65  erride object Ge
137e0 74 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61  tValue(SQLiteSta
137f0 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
13800 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
13810 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
13820 64 65 78 2c 20 53 51 4c 69 74 65 54 79 70 65 20  dex, SQLiteType 
13830 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  typ)..    {..   
13840 20 20 20 69 66 20 28 49 73 4e 75 6c 6c 28 73 74     if (IsNull(st
13850 6d 74 2c 20 69 6e 64 65 78 29 29 20 72 65 74 75  mt, index)) retu
13860 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b  rn DBNull.Value;
13870 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69  ..      TypeAffi
13880 6e 69 74 79 20 61 66 66 20 3d 20 74 79 70 2e 41  nity aff = typ.A
13890 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20  ffinity;..      
138a0 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c 3b 0d 0a  Type t = null;..
138b0 0d 0a 20 20 20 20 20 20 69 66 20 28 74 79 70 2e  ..      if (typ.
138c0 54 79 70 65 20 21 3d 20 44 62 54 79 70 65 2e 4f  Type != DbType.O
138d0 62 6a 65 63 74 29 0d 0a 20 20 20 20 20 20 7b 0d  bject)..      {.
138e0 0a 20 20 20 20 20 20 20 20 74 20 3d 20 53 51 4c  .        t = SQL
138f0 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74  iteConvert.SQLit
13900 65 54 79 70 65 54 6f 54 79 70 65 28 74 79 70 29  eTypeToType(typ)
13910 3b 0d 0a 20 20 20 20 20 20 20 20 61 66 66 20 3d  ;..        aff =
13920 20 54 79 70 65 54 6f 41 66 66 69 6e 69 74 79 28   TypeToAffinity(
13930 74 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  t);..      }....
13940 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
13950 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
13960 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41  ionFlags.GetAllA
13970 73 54 65 78 74 29 20 3d 3d 20 53 51 4c 69 74 65  sText) == SQLite
13980 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
13990 47 65 74 41 6c 6c 41 73 54 65 78 74 29 0d 0a 20  GetAllAsText).. 
139a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
139b0 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
139c0 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 73  dex);....      s
139d0 77 69 74 63 68 20 28 61 66 66 29 0d 0a 20 20 20  witch (aff)..   
139e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61     {..        ca
139f0 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
13a00 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 20  Blob:..         
13a10 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d   if (typ.Type ==
13a20 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26 20   DbType.Guid && 
13a30 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20  typ.Affinity == 
13a40 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78  TypeAffinity.Tex
13a50 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
13a60 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28  return new Guid(
13a70 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
13a80 64 65 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dex));....      
13a90 20 20 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74      int n = (int
13aa0 29 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20  )GetBytes(stmt, 
13ab0 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20  index, 0, null, 
13ac0 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 20 20  0, 0);..        
13ad0 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 6e 65 77    byte[] b = new
13ae0 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20   byte[n];..     
13af0 20 20 20 20 20 47 65 74 42 79 74 65 73 28 73 74       GetBytes(st
13b00 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62 2c  mt, index, 0, b,
13b10 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20   0, n);....     
13b20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70       if (typ.Typ
13b30 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64  e == DbType.Guid
13b40 20 26 26 20 6e 20 3d 3d 20 31 36 29 0d 0a 20 20   && n == 16)..  
13b50 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
13b60 20 6e 65 77 20 47 75 69 64 28 62 29 3b 0d 0a 0d   new Guid(b);...
13b70 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
13b80 6e 20 62 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  n b;..        ca
13b90 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
13ba0 44 61 74 65 54 69 6d 65 3a 0d 0a 20 20 20 20 20  DateTime:..     
13bb0 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 44       return GetD
13bc0 61 74 65 54 69 6d 65 28 73 74 6d 74 2c 20 69 6e  ateTime(stmt, in
13bd0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 63  dex);..        c
13be0 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
13bf0 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20  .Double:..      
13c00 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c      if (t == nul
13c10 6c 29 20 72 65 74 75 72 6e 20 47 65 74 44 6f 75  l) return GetDou
13c20 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ble(stmt, index)
13c30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ;..          ret
13c40 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e  urn Convert.Chan
13c50 67 65 54 79 70 65 28 47 65 74 44 6f 75 62 6c 65  geType(GetDouble
13c60 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74  (stmt, index), t
13c70 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
13c80 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
13c90 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20  ity.Int64:..    
13ca0 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e        if (t == n
13cb0 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74 49  ull) return GetI
13cc0 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt64(stmt, index
13cd0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
13ce0 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 53 42   (t == typeof(SB
13cf0 79 74 65 29 29 20 72 65 74 75 72 6e 20 47 65 74  yte)) return Get
13d00 53 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64 65  SByte(stmt, inde
13d10 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
13d20 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 42  f (t == typeof(B
13d30 79 74 65 29 29 20 72 65 74 75 72 6e 20 47 65 74  yte)) return Get
13d40 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  Byte(stmt, index
13d50 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
13d60 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e   (t == typeof(In
13d70 74 31 36 29 29 20 72 65 74 75 72 6e 20 47 65 74  t16)) return Get
13d80 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e 64 65  Int16(stmt, inde
13d90 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
13da0 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55  f (t == typeof(U
13db0 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20 47  Int16)) return G
13dc0 65 74 55 49 6e 74 31 36 28 73 74 6d 74 2c 20 69  etUInt16(stmt, i
13dd0 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
13de0 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
13df0 66 28 49 6e 74 33 32 29 29 20 72 65 74 75 72 6e  f(Int32)) return
13e00 20 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20   GetInt32(stmt, 
13e10 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
13e20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
13e30 6f 66 28 55 49 6e 74 33 32 29 29 20 72 65 74 75  of(UInt32)) retu
13e40 72 6e 20 47 65 74 55 49 6e 74 33 32 28 73 74 6d  rn GetUInt32(stm
13e50 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
13e60 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
13e70 79 70 65 6f 66 28 55 49 6e 74 36 34 29 29 20 72  ypeof(UInt64)) r
13e80 65 74 75 72 6e 20 47 65 74 55 49 6e 74 36 34 28  eturn GetUInt64(
13e90 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
13ea0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
13eb0 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79  Convert.ChangeTy
13ec0 70 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d 74  pe(GetInt64(stmt
13ed0 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c  , index), t, nul
13ee0 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 64 65 66  l);..        def
13ef0 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20  ault:..         
13f00 20 72 65 74 75 72 6e 20 47 65 74 54 65 78 74 28   return GetText(
13f10 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
13f20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
13f30 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
13f40 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 43 75  erride int GetCu
13f50 72 73 6f 72 46 6f 72 54 61 62 6c 65 28 53 51 4c  rsorForTable(SQL
13f60 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
13f70 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e 74 20 72  t, int db, int r
13f80 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20 20 7b 0d  ootPage)..    {.
13f90 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
13fa0 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 72 65 74  NDARD..      ret
13fb0 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
13fc0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
13fd0 74 61 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74  table_cursor_int
13fe0 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
13ff0 65 5f 73 74 6d 74 2c 20 64 62 2c 20 72 6f 6f 74  e_stmt, db, root
14000 50 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  Page);..#else.. 
14010 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d       return -1;.
14020 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
14030 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
14040 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
14050 52 6f 77 49 64 46 6f 72 43 75 72 73 6f 72 28 53  RowIdForCursor(S
14060 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
14070 74 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f 72 29  tmt, int cursor)
14080 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
14090 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
140a0 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 69 64 3b       long rowid;
140b0 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
140c0 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
140d0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
140e0 2e 73 71 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f  .sqlite3_cursor_
140f0 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28 73 74  rowid_interop(st
14100 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
14110 20 63 75 72 73 6f 72 2c 20 6f 75 74 20 72 6f 77   cursor, out row
14120 69 64 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  id);..      if (
14130 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc == SQLiteErro
14140 72 43 6f 64 65 2e 4f 6b 29 20 72 65 74 75 72 6e  rCode.Ok) return
14150 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20 20 20 20 20   rowid;....     
14160 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6c 73   return 0;..#els
14170 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
14180 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  0;..#endif..    
14190 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
141a0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
141b0 47 65 74 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78  GetIndexColumnEx
141c0 74 65 6e 64 65 64 49 6e 66 6f 28 73 74 72 69 6e  tendedInfo(strin
141d0 67 20 64 61 74 61 62 61 73 65 2c 20 73 74 72 69  g database, stri
141e0 6e 67 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67  ng index, string
141f0 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 69 6e 74   column, out int
14200 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74 20 69   sortMode, out i
14210 6e 74 20 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20  nt onError, out 
14220 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e  string collation
14230 53 65 71 75 65 6e 63 65 29 0d 0a 20 20 20 20 7b  Sequence)..    {
14240 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
14250 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 49 6e  ANDARD..      In
14260 74 50 74 72 20 63 6f 6c 6c 3b 0d 0a 20 20 20 20  tPtr coll;..    
14270 20 20 69 6e 74 20 63 6f 6c 6c 6c 65 6e 3b 0d 0a    int colllen;..
14280 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
14290 72 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20  rCode rc;....   
142a0 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61     rc = UnsafeNa
142b0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
142c0 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e  te3_index_column
142d0 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73  _info_interop(_s
142e0 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 62  ql, ToUTF8(datab
142f0 61 73 65 29 2c 20 54 6f 55 54 46 38 28 69 6e 64  ase), ToUTF8(ind
14300 65 78 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75  ex), ToUTF8(colu
14310 6d 6e 29 2c 20 6f 75 74 20 73 6f 72 74 4d 6f 64  mn), out sortMod
14320 65 2c 20 6f 75 74 20 6f 6e 45 72 72 6f 72 2c 20  e, out onError, 
14330 6f 75 74 20 63 6f 6c 6c 2c 20 6f 75 74 20 63 6f  out coll, out co
14340 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69  lllen);..      i
14350 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45  f (rc != SQLiteE
14360 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
14370 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
14380 65 70 74 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29  eption(rc, null)
14390 3b 0d 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61  ;....      colla
143a0 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 55  tionSequence = U
143b0 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c  TF8ToString(coll
143c0 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c  , colllen);..#el
143d0 73 65 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f  se..      sortMo
143e0 64 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f  de = 0;..      o
143f0 6e 45 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20  nError = 2;..   
14400 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75     collationSequ
14410 65 6e 63 65 20 3d 20 22 42 49 4e 41 52 59 22 3b  ence = "BINARY";
14420 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
14430 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
14440 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
14450 72 72 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e  rrorCode FileCon
14460 74 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e  trol(string zDbN
14470 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74  ame, int op, Int
14480 50 74 72 20 70 41 72 67 29 0d 0a 20 20 20 20 7b  Ptr pArg)..    {
14490 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
144a0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
144b0 64 73 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f  ds.sqlite3_file_
144c0 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a  control(_sql, (z
144d0 44 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20  DbName != null) 
144e0 3f 20 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65  ? ToUTF8(zDbName
144f0 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41  ) : null, op, pA
14500 72 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d  rg);..    }..  }
14510 0d 0a 7d 0d 0a                                   ..}..