System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 15d0548a314c99603963d98c4ab3be4a3ea6d074:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 20 0d 0a  soft.com).. * ..
00b0: 20 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74   * Released to t
00c0: 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e  he public domain
00d0: 2c 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77  , use at your ow
00e0: 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a  n risk!.. ******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65  **/....namespace
0130: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
0140: 69 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20  ite..{..  using 
0150: 53 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67  System;..  using
0160: 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69   System.Collecti
0170: 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 0d 0a  ons.Generic;....
0180: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
0190: 5f 32 30 20 26 26 20 28 54 52 41 43 45 5f 43 4f  _20 && (TRACE_CO
01a0: 4e 4e 45 43 54 49 4f 4e 20 7c 7c 20 54 52 41 43  NNECTION || TRAC
01b0: 45 5f 53 54 41 54 45 4d 45 4e 54 29 0d 0a 20 20  E_STATEMENT)..  
01c0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61  using System.Dia
01d0: 67 6e 6f 73 74 69 63 73 3b 0d 0a 23 65 6e 64 69  gnostics;..#endi
01e0: 66 0d 0a 0d 0a 20 20 75 73 69 6e 67 20 53 79 73  f....  using Sys
01f0: 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f  tem.Globalizatio
0200: 6e 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  n;..  using Syst
0210: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0220: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 20 20 75  opServices;..  u
0230: 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74  sing System.Text
0240: 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;....  /// <summ
0250: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  ary>..  /// This
0260: 20 69 73 20 74 68 65 20 6d 65 74 68 6f 64 20 73   is the method s
0270: 69 67 6e 61 74 75 72 65 20 66 6f 72 20 74 68 65  ignature for the
0280: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
0290: 72 61 72 79 20 6c 6f 67 67 69 6e 67 20 63 61 6c  rary logging cal
02a0: 6c 62 61 63 6b 0d 0a 20 20 2f 2f 2f 20 66 75 6e  lback..  /// fun
02b0: 63 74 69 6f 6e 20 66 6f 72 20 75 73 65 20 77 69  ction for use wi
02c0: 74 68 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  th sqlite3_log()
02d0: 20 61 6e 64 20 74 68 65 20 53 51 4c 49 54 45 5f   and the SQLITE_
02e0: 43 4f 4e 46 49 47 5f 4c 4f 47 2e 0d 0a 20 20 2f  CONFIG_LOG...  /
02f0: 2f 2f 0d 0a 20 20 2f 2f 2f 20 57 41 52 4e 49 4e  //..  /// WARNIN
0300: 47 3a 20 54 68 69 73 20 64 65 6c 65 67 61 74 65  G: This delegate
0310: 20 69 73 20 75 73 65 64 20 6d 6f 72 65 2d 6f 72   is used more-or
0320: 2d 6c 65 73 73 20 64 69 72 65 63 74 6c 79 20 62  -less directly b
0330: 79 20 6e 61 74 69 76 65 20 63 6f 64 65 2c 20 64  y native code, d
0340: 6f 0d 0a 20 20 2f 2f 2f 20 20 20 20 20 20 20 20  o..  ///        
0350: 20 20 6e 6f 74 20 6d 6f 64 69 66 79 20 69 74 73    not modify its
0360: 20 74 79 70 65 20 73 69 67 6e 61 74 75 72 65 2e   type signature.
0370: 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
0380: 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  y>..  /// <param
0390: 20 6e 61 6d 65 3d 22 70 55 73 65 72 44 61 74 61   name="pUserData
03a0: 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 65 78  ">..  /// The ex
03b0: 74 72 61 20 64 61 74 61 20 61 73 73 6f 63 69 61  tra data associa
03c0: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6d 65  ted with this me
03d0: 73 73 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d 0a  ssage, if any...
03e0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
03f0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
0400: 65 3d 22 65 72 72 6f 72 43 6f 64 65 22 3e 0d 0a  e="errorCode">..
0410: 20 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72 20    /// The error 
0420: 63 6f 64 65 20 61 73 73 6f 63 69 61 74 65 64 20  code associated 
0430: 77 69 74 68 20 74 68 69 73 20 6d 65 73 73 61 67  with this messag
0440: 65 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  e...  /// </para
0450: 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  m>..  /// <param
0460: 20 6e 61 6d 65 3d 22 70 4d 65 73 73 61 67 65 22   name="pMessage"
0470: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 6d 65 73  >..  /// The mes
0480: 73 61 67 65 20 73 74 72 69 6e 67 20 74 6f 20 62  sage string to b
0490: 65 20 6c 6f 67 67 65 64 2e 0d 0a 20 20 2f 2f 2f  e logged...  ///
04a0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 23 69 66 20 21   </param>..#if !
04b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
04c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 5b 55 6e  FRAMEWORK..  [Un
04d0: 6d 61 6e 61 67 65 64 46 75 6e 63 74 69 6f 6e 50  managedFunctionP
04e0: 6f 69 6e 74 65 72 28 43 61 6c 6c 69 6e 67 43 6f  ointer(CallingCo
04f0: 6e 76 65 6e 74 69 6f 6e 2e 43 64 65 63 6c 29 5d  nvention.Cdecl)]
0500: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 69 6e 74 65  ..#endif..  inte
0510: 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f  rnal delegate vo
0520: 69 64 20 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c  id SQLiteLogCall
0530: 62 61 63 6b 28 49 6e 74 50 74 72 20 70 55 73 65  back(IntPtr pUse
0540: 72 44 61 74 61 2c 20 69 6e 74 20 65 72 72 6f 72  rData, int error
0550: 43 6f 64 65 2c 20 49 6e 74 50 74 72 20 70 4d 65  Code, IntPtr pMe
0560: 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f  ssage);....  ///
0570: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f   <summary>..  //
0580: 2f 20 54 68 69 73 20 63 6c 61 73 73 20 69 6d 70  / This class imp
0590: 6c 65 6d 65 6e 74 73 20 53 51 4c 69 74 65 42 61  lements SQLiteBa
05a0: 73 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2c 20 61  se completely, a
05b0: 6e 64 20 69 73 20 74 68 65 20 67 75 74 73 20 6f  nd is the guts o
05c0: 66 20 74 68 65 20 63 6f 64 65 20 74 68 61 74 20  f the code that 
05d0: 69 6e 74 65 72 6f 70 27 73 20 53 51 4c 69 74 65  interop's SQLite
05e0: 20 77 69 74 68 20 2e 4e 45 54 0d 0a 20 20 2f 2f   with .NET..  //
05f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0600: 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 53  internal class S
0610: 51 4c 69 74 65 33 20 3a 20 53 51 4c 69 74 65 42  QLite3 : SQLiteB
0620: 61 73 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 70 72  ase..  {..    pr
0630: 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a  ivate static obj
0640: 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e  ect syncRoot = n
0650: 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 0d 0a  ew object();....
0660: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 2f 2f 20 4e      //..    // N
0670: 4f 54 45 3a 20 54 68 69 73 20 69 73 20 74 68 65  OTE: This is the
0680: 20 70 75 62 6c 69 63 20 6b 65 79 20 66 6f 72 20   public key for 
0690: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
06a0: 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 2e  SQLite assembly.
06b0: 20 20 49 66 20 79 6f 75 20 63 68 61 6e 67 65 20    If you change 
06c0: 74 68 65 0d 0a 20 20 20 20 2f 2f 20 20 20 20 20  the..    //     
06d0: 20 20 53 4e 4b 20 66 69 6c 65 2c 20 79 6f 75 20    SNK file, you 
06e0: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 63 68 61  will need to cha
06f0: 6e 67 65 20 74 68 69 73 20 61 73 20 77 65 6c 6c  nge this as well
0700: 2e 0d 0a 20 20 20 20 2f 2f 0d 0a 20 20 20 20 69  ...    //..    i
0710: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74  nternal const st
0720: 72 69 6e 67 20 50 75 62 6c 69 63 4b 65 79 20 3d  ring PublicKey =
0730: 0d 0a 20 20 20 20 20 20 20 20 22 30 30 32 34 30  ..        "00240
0740: 30 30 30 30 34 38 30 30 30 30 30 39 34 30 30 30  0000480000094000
0750: 30 30 30 30 36 30 32 30 30 30 30 30 30 32 34 30  0000602000000240
0760: 30 30 30 35 32 35 33 34 31 33 31 30 30 30 34 30  0005253413100040
0770: 30 30 30 30 31 30 30 30 31 30 30 30 35 61 32 38  0000100010005a28
0780: 38 64 65 35 36 38 37 63 34 65 31 22 20 2b 0d 0a  8de5687c4e1" +..
0790: 20 20 20 20 20 20 20 20 22 62 36 32 31 64 64 66          "b621ddf
07a0: 66 35 64 38 34 34 37 32 37 34 31 38 39 35 36 39  f5d8447274189569
07b0: 39 37 66 34 37 35 65 62 38 32 39 34 32 39 65 34  97f475eb829429e4
07c0: 31 31 61 66 66 33 65 39 33 66 39 37 62 37 30 64  11aff3e93f97b70d
07d0: 65 36 39 38 62 39 37 32 36 34 30 39 32 35 62 64  e698b972640925bd
07e0: 64 34 34 32 38 30 64 66 30 22 20 2b 0d 0a 20 20  d44280df0" +..  
07f0: 20 20 20 20 20 20 22 61 32 35 61 38 34 33 32 36        "a25a84326
0800: 36 39 37 33 37 30 34 31 33 37 63 62 62 30 65 37  6973704137cbb0e7
0810: 34 34 31 63 31 66 65 37 63 61 65 34 65 32 34 34  441c1fe7cae4e244
0820: 30 61 65 39 31 61 62 38 63 64 65 33 39 33 33 66  0ae91ab8cde3933f
0830: 65 62 63 62 31 61 63 34 38 64 64 33 33 62 34 30  ebcb1ac48dd33b40
0840: 65 31 33 63 34 32 31 22 20 2b 0d 0a 20 20 20 20  e13c421" +..    
0850: 20 20 20 20 22 64 38 32 31 35 63 31 38 61 34 33      "d8215c18a43
0860: 34 39 61 34 33 36 64 64 34 39 39 65 33 63 33 38  49a436dd499e3c38
0870: 35 63 63 36 38 33 30 31 35 66 38 38 36 66 36 63  5cc683015f886f6c
0880: 31 30 62 64 39 30 31 31 35 65 62 32 62 64 36 31  10bd90115eb2bd61
0890: 62 36 37 37 35 30 38 33 39 65 33 61 31 39 39 34  b67750839e3a1994
08a0: 31 64 63 39 63 22 3b 0d 0a 0d 0a 23 69 66 20 21  1dc9c";....#if !
08b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
08c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 69  FRAMEWORK..    i
08d0: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74  nternal const st
08e0: 72 69 6e 67 20 44 65 73 69 67 6e 65 72 56 65 72  ring DesignerVer
08f0: 73 69 6f 6e 20 3d 20 22 31 2e 30 2e 38 37 2e 30  sion = "1.0.87.0
0900: 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  ";..#endif....  
0910: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0920: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 70 61  .    /// The opa
0930: 71 75 65 20 70 6f 69 6e 74 65 72 20 72 65 74 75  que pointer retu
0940: 72 6e 65 64 20 74 6f 20 75 73 20 62 79 20 74 68  rned to us by th
0950: 65 20 73 71 6c 69 74 65 20 70 72 6f 76 69 64 65  e sqlite provide
0960: 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  r..    /// </sum
0970: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0980: 63 74 65 64 20 69 6e 74 65 72 6e 61 6c 20 53 51  cted internal SQ
0990: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
09a0: 6e 64 6c 65 20 5f 73 71 6c 3b 0d 0a 20 20 20 20  ndle _sql;..    
09b0: 70 72 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67  protected string
09c0: 20 5f 66 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20   _fileName;..   
09d0: 20 70 72 6f 74 65 63 74 65 64 20 62 6f 6f 6c 20   protected bool 
09e0: 5f 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 70  _usePool;..    p
09f0: 72 6f 74 65 63 74 65 64 20 69 6e 74 20 5f 70 6f  rotected int _po
0a00: 6f 6c 56 65 72 73 69 6f 6e 3b 0d 0a 0d 0a 23 69  olVersion;....#i
0a10: 66 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54  f (NET_35 || NET
0a20: 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 29 20 26  _40 || NET_45) &
0a30: 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  & !PLATFORM_COMP
0a40: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
0a50: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 5f    private bool _
0a60: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 3b 0d  buildingSchema;.
0a70: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
0a80: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0a90: 20 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64    /// This field
0aa0: 20 77 69 6c 6c 20 62 65 20 6e 6f 6e 2d 7a 65 72   will be non-zer
0ab0: 6f 20 69 66 20 74 68 69 73 20 69 6e 73 74 61 6e  o if this instan
0ac0: 63 65 20 6f 77 6e 73 20 74 68 65 20 6e 61 74 69  ce owns the nati
0ad0: 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20  ve connection.. 
0ae0: 20 20 20 2f 2f 2f 20 68 61 6e 64 6c 65 20 61 6e     /// handle an
0af0: 64 20 73 68 6f 75 6c 64 20 64 69 73 70 6f 73 65  d should dispose
0b00: 20 6f 66 20 69 74 20 77 68 65 6e 20 69 74 20 69   of it when it i
0b10: 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 6e 65 65 64  s no longer need
0b20: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ed...    /// </s
0b30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f  ummary>..    pro
0b40: 74 65 63 74 65 64 20 62 6f 6f 6c 20 5f 6f 77 6e  tected bool _own
0b50: 48 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 2f  Handle;....    /
0b60: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0b70: 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72 2d 64    /// The user-d
0b80: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
0b90: 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e 20 74   registered on t
0ba0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  his connection..
0bb0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0bc0: 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  y>..    protecte
0bd0: 64 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  d SQLiteFunction
0be0: 5b 5d 20 5f 66 75 6e 63 74 69 6f 6e 73 41 72 72  [] _functionsArr
0bf0: 61 79 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ay;....    /////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
0c60: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
0c70: 65 33 28 53 51 4c 69 74 65 44 61 74 65 46 6f 72  e3(SQLiteDateFor
0c80: 6d 61 74 73 20 66 6d 74 2c 20 44 61 74 65 54 69  mats fmt, DateTi
0c90: 6d 65 4b 69 6e 64 20 6b 69 6e 64 2c 20 73 74 72  meKind kind, str
0ca0: 69 6e 67 20 66 6d 74 53 74 72 69 6e 67 2c 20 62  ing fmtString, b
0cb0: 6f 6f 6c 20 6f 77 6e 48 61 6e 64 6c 65 29 0d 0a  ool ownHandle)..
0cc0: 20 20 20 20 20 20 3a 20 62 61 73 65 28 66 6d 74        : base(fmt
0cd0: 2c 20 6b 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e  , kind, fmtStrin
0ce0: 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  g)..    {..     
0cf0: 20 20 20 5f 6f 77 6e 48 61 6e 64 6c 65 20 3d 20     _ownHandle = 
0d00: 6f 77 6e 48 61 6e 64 6c 65 3b 0d 0a 20 20 20 20  ownHandle;..    
0d10: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
0d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d70: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
0d80: 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
0d90: 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65  ble "Pattern" Me
0da0: 6d 62 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61  mbers..    priva
0db0: 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64  te bool disposed
0dc0: 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76  ;..    private v
0dd0: 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65  oid CheckDispose
0de0: 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  d() /* throw */.
0df0: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f  .    {..#if THRO
0e00: 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20  W_ON_DISPOSED.. 
0e10: 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f         if (dispo
0e20: 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  sed)..          
0e30: 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65    throw new Obje
0e40: 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74  ctDisposedExcept
0e50: 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c 69 74  ion(typeof(SQLit
0e60: 65 33 29 2e 4e 61 6d 65 29 3b 0d 0a 23 65 6e 64  e3).Name);..#end
0e70: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
0e80: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
0e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ee0: 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ....    protecte
0ef0: 64 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  d override void 
0f00: 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73  Dispose(bool dis
0f10: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a  posing)..    {..
0f20: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
0f30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
0f40: 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65      if (!dispose
0f50: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
0f60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
0f70: 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69     //if (disposi
0f80: 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng)..           
0f90: 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20       //{..      
0fa0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
0fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fd0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
0fe0: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64        //    // d
0ff0: 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72  ispose managed r
1000: 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
1010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1020: 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f    //    ////////
1030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
1050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1060: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1070: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
10a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
10b0: 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65  release unmanage
10c0: 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
10d0: 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
10e0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1120: 6c 6f 73 65 28 66 61 6c 73 65 29 3b 20 2f 2a 20  lose(false); /* 
1130: 44 69 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e 6f  Disposing, canno
1140: 74 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a 0d 0a 20  t throw. */.... 
1150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1160: 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d  isposed = true;.
1170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1180: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1190: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
11a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11b0: 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28     base.Dispose(
11c0: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 20 20 20  disposing);..   
11d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
11e0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
11f0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
1200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1250: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49  ////....    // I
1260: 74 20 69 73 6e 27 74 20 6e 65 63 65 73 73 61 72  t isn't necessar
1270: 79 20 74 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79  y to cleanup any
1280: 20 66 75 6e 63 74 69 6f 6e 73 20 77 65 27 76 65   functions we've
1290: 20 72 65 67 69 73 74 65 72 65 64 2e 20 20 49 66   registered.  If
12a0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d   the connection.
12b0: 0a 20 20 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20  .    // goes to 
12c0: 74 68 65 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20  the pool and is 
12d0: 72 65 73 75 72 72 65 63 74 65 64 20 6c 61 74 65  resurrected late
12e0: 72 2c 20 72 65 2d 72 65 67 69 73 74 65 72 65 64  r, re-registered
12f0: 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20   functions will 
1300: 6f 76 65 72 77 72 69 74 65 20 74 68 65 0d 0a 20  overwrite the.. 
1310: 20 20 20 2f 2f 20 70 72 65 76 69 6f 75 73 20 66     // previous f
1320: 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 53  unctions.  The S
1330: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f  QLiteFunctionCoo
1340: 6b 69 65 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74  kieHandle will t
1350: 61 6b 65 20 63 61 72 65 20 6f 66 20 66 72 65 65  ake care of free
1360: 69 6e 67 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20  ing unmanaged.. 
1370: 20 20 20 2f 2f 20 72 65 73 6f 75 72 63 65 73 20     // resources 
1380: 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65  belonging to the
1390: 20 70 72 65 76 69 6f 75 73 6c 79 2d 72 65 67 69   previously-regi
13a0: 73 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73  stered functions
13b0: 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
13c0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c  override void Cl
13d0: 6f 73 65 28 62 6f 6f 6c 20 63 61 6e 54 68 72 6f  ose(bool canThro
13e0: 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  w)..    {..     
13f0: 20 69 66 20 28 21 5f 6f 77 6e 48 61 6e 64 6c 65   if (!_ownHandle
1400: 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  )..        retur
1410: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  n;....      if (
1420: 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql != null).. 
1430: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1440: 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d    if (_usePool).
1450: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
1460: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1470: 53 51 4c 69 74 65 42 61 73 65 2e 52 65 73 65 74  SQLiteBase.Reset
1480: 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f 73 71 6c 2c  Connection(_sql,
1490: 20 5f 73 71 6c 2c 20 63 61 6e 54 68 72 6f 77 29   _sql, canThrow)
14a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14c0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
14d0: 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41 64 64 28 5f  ectionPool.Add(_
14e0: 66 69 6c 65 4e 61 6d 65 2c 20 5f 73 71 6c 2c 20  fileName, _sql, 
14f0: 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a  _poolVersion);..
1500: 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
1510: 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
1520: 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1540: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72  ce.WriteLine(Str
1550: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 43 6c 6f 73  ing.Format("Clos
1560: 65 20 28 50 6f 6f 6c 29 20 53 75 63 63 65 73 73  e (Pool) Success
1570: 3a 20 7b 30 7d 22 2c 20 5f 73 71 6c 29 29 3b 0d  : {0}", _sql));.
1580: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
1590: 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e         }..#if !N
15a0: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
15b0: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
15c0: 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N..             
15d0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
15e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15f0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
1600: 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67  WriteLine(String
1610: 2e 46 6f 72 6d 61 74 28 22 43 6c 6f 73 65 20 28  .Format("Close (
1620: 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20 7b  Pool) Failure: {
1630: 30 7d 22 2c 20 5f 73 71 6c 29 29 3b 0d 0a 20 20  0}", _sql));..  
1640: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
1650: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
1660: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c   }..          el
1670: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  se..          {.
1680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
1690: 73 71 6c 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a  sql.Dispose();..
16a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
16b0: 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75         _sql = nu
16c0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ll;..      }..  
16d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1740: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
1750: 69 64 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28  ide void Cancel(
1760: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1770: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1780: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 74 65  ods.sqlite3_inte
1790: 72 72 75 70 74 28 5f 73 71 6c 29 3b 0d 0a 20 20  rrupt(_sql);..  
17a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
17b0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
17c0: 69 6e 67 20 56 65 72 73 69 6f 6e 0d 0a 20 20 20  ing Version..   
17d0: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
17e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17f0: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 33 2e 53  return SQLite3.S
1800: 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d 0a 20  QLiteVersion;.. 
1810: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
1820: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1830: 65 72 72 69 64 65 20 69 6e 74 20 56 65 72 73 69  erride int Versi
1840: 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d  onNumber..    {.
1850: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
1860: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
1870: 75 72 6e 20 53 51 4c 69 74 65 33 2e 53 51 4c 69  urn SQLite3.SQLi
1880: 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b  teVersionNumber;
1890: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
18a0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
18b0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
18c0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a  efineConstants..
18d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
18e0: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
18f0: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
1900: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
1910: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
1920: 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  der();..        
1930: 20 20 20 20 49 4c 69 73 74 3c 73 74 72 69 6e 67      IList<string
1940: 3e 20 6c 69 73 74 20 3d 20 53 51 4c 69 74 65 44  > list = SQLiteD
1950: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 2e 4f  efineConstants.O
1960: 70 74 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20  ptionList;....  
1970: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 69            if (li
1980: 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st != null)..   
1990: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19a0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
19b0: 61 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d  ach (string elem
19c0: 65 6e 74 20 69 6e 20 6c 69 73 74 29 0d 0a 20 20  ent in list)..  
19d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
19e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19f0: 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74       if (element
1a00: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a20: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a40: 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c      if (result.L
1a50: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
1a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a70: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
1a80: 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  d(' ');....     
1a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1aa0: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 65 6c 65  esult.Append(ele
1ab0: 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  ment);..        
1ac0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1ad0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1ae0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
1af0: 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29  esult.ToString()
1b00: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1b10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1b20: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
1b30: 67 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d  g SQLiteVersion.
1b40: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
1b50: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
1b60: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
1b70: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
1b80: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1b90: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29  te3_libversion()
1ba0: 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  , -1);..      }.
1bb0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
1bc0: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 69 6e  ternal static in
1bd0: 74 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e  t SQLiteVersionN
1be0: 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  umber..    {..  
1bf0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
1c00: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1c10: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1c20: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62  hods.sqlite3_lib
1c30: 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29  version_number()
1c40: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
1c50: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
1c60: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  l static string 
1c70: 53 51 4c 69 74 65 53 6f 75 72 63 65 49 64 0d 0a  SQLiteSourceId..
1c80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
1c90: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
1ca0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
1cb0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
1cc0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1cd0: 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d  e3_sourceid(), -
1ce0: 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  1);..      }..  
1cf0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1d00: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
1d10: 6c 20 41 75 74 6f 43 6f 6d 6d 69 74 0d 0a 20 20  l AutoCommit..  
1d20: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
1d30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d40: 20 72 65 74 75 72 6e 20 49 73 41 75 74 6f 63 6f   return IsAutoco
1d50: 6d 6d 69 74 28 5f 73 71 6c 2c 20 5f 73 71 6c 29  mmit(_sql, _sql)
1d60: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
1d70: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
1d80: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
1d90: 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64 0d  LastInsertRowId.
1da0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
1db0: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  t..      {..#if 
1dc0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
1dd0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
1de0: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
1df0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1e00: 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
1e10: 72 74 5f 72 6f 77 69 64 28 5f 73 71 6c 29 3b 0d  rt_rowid(_sql);.
1e20: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
1e30: 6c 6f 6e 67 20 72 6f 77 49 64 20 3d 20 30 3b 0d  long rowId = 0;.
1e40: 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e  .        UnsafeN
1e50: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1e60: 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
1e70: 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28 5f  _rowid_interop(_
1e80: 73 71 6c 2c 20 72 65 66 20 72 6f 77 49 64 29 3b  sql, ref rowId);
1e90: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1ea0: 20 72 6f 77 49 64 3b 0d 0a 23 65 6e 64 69 66 0d   rowId;..#endif.
1eb0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
1ec0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1ed0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 68 61  override int Cha
1ee0: 6e 67 65 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  nges..    {..   
1ef0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
1f00: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
1f10: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 72  NDARD..        r
1f20: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
1f30: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1f40: 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f  3_changes_intero
1f50: 70 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 73 65 0d  p(_sql);..#else.
1f60: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
1f70: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1f80: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e  ods.sqlite3_chan
1f90: 67 65 73 28 5f 73 71 6c 29 3b 0d 0a 23 65 6e 64  ges(_sql);..#end
1fa0: 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  if..      }..   
1fb0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
1fc0: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
1fd0: 20 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20   MemoryUsed..   
1fe0: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
1ff0: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
2000: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
2010: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
2020: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
2030: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2040: 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 28 29  e3_memory_used()
2050: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
2060: 20 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20 30    long bytes = 0
2070: 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  ;..        Unsaf
2080: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
2090: 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73  qlite3_memory_us
20a0: 65 64 5f 69 6e 74 65 72 6f 70 28 72 65 66 20 62  ed_interop(ref b
20b0: 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  ytes);..        
20c0: 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23  return bytes;..#
20d0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a  endif..      }..
20e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
20f0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
2100: 6f 6e 67 20 4d 65 6d 6f 72 79 48 69 67 68 77 61  ong MemoryHighwa
2110: 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ter..    {..    
2120: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
2130: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
2140: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
2150: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
2160: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2170: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  ds.sqlite3_memor
2180: 79 5f 68 69 67 68 77 61 74 65 72 28 30 29 3b 0d  y_highwater(0);.
2190: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
21a0: 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20 30 3b 0d  long bytes = 0;.
21b0: 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e  .        UnsafeN
21c0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
21d0: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68  ite3_memory_high
21e0: 77 61 74 65 72 5f 69 6e 74 65 72 6f 70 28 30 2c  water_interop(0,
21f0: 20 72 65 66 20 62 79 74 65 73 29 3b 0d 0a 20 20   ref bytes);..  
2200: 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74        return byt
2210: 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  es;..#endif..   
2220: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
2230: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
2240: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
2250: 43 6f 64 65 20 53 65 74 4d 65 6d 6f 72 79 53 74  Code SetMemorySt
2260: 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29  atus(bool value)
2270: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
2280: 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 53 65   return StaticSe
2290: 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 76 61  tMemoryStatus(va
22a0: 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  lue);..    }....
22b0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
22c0: 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  tic SQLiteErrorC
22d0: 6f 64 65 20 53 74 61 74 69 63 53 65 74 4d 65 6d  ode StaticSetMem
22e0: 6f 72 79 53 74 61 74 75 73 28 62 6f 6f 6c 20 76  oryStatus(bool v
22f0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
2300: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
2310: 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
2320: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
2330: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 69 6e  qlite3_config_in
2340: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2350: 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
2360: 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
2370: 47 5f 4d 45 4d 53 54 41 54 55 53 2c 20 76 61 6c  G_MEMSTATUS, val
2380: 75 65 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 0d 0a  ue ? 1 : 0);....
2390: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
23a0: 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  c;..    }....   
23b0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
23c0: 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e      /// Shutdown
23d0: 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69   the SQLite engi
23e0: 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ne so that it ca
23f0: 6e 20 62 65 20 72 65 73 74 61 72 74 65 64 20 77  n be restarted w
2400: 69 74 68 20 64 69 66 66 65 72 65 6e 74 20 63 6f  ith different co
2410: 6e 66 69 67 20 6f 70 74 69 6f 6e 73 2e 0d 0a 20  nfig options... 
2420: 20 20 20 2f 2f 2f 20 57 65 20 64 65 70 65 6e 64     /// We depend
2430: 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69 61 6c   on auto initial
2440: 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76  ization to recov
2450: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  er...    /// </s
2460: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2470: 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
2480: 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64 65 3c  s a result code<
2490: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
24a0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
24b0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
24c0: 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a 20 20 20   Shutdown()..   
24d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
24e0: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
24f0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2500: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 68 75  hods.sqlite3_shu
2510: 74 64 6f 77 6e 28 29 3b 0d 0a 20 20 20 20 20 20  tdown();..      
2520: 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20    return rc;..  
2530: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
2540: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
2550: 6c 20 49 73 4f 70 65 6e 28 29 0d 0a 20 20 20 20  l IsOpen()..    
2560: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
2570: 6e 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  n (_sql != null)
2580: 20 26 26 20 21 5f 73 71 6c 2e 49 73 49 6e 76 61   && !_sql.IsInva
2590: 6c 69 64 20 26 26 20 21 5f 73 71 6c 2e 49 73 43  lid && !_sql.IsC
25a0: 6c 6f 73 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  losed;..    }...
25b0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
25c0: 65 72 72 69 64 65 20 76 6f 69 64 20 4f 70 65 6e  erride void Open
25d0: 28 73 74 72 69 6e 67 20 73 74 72 46 69 6c 65 6e  (string strFilen
25e0: 61 6d 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ame, SQLiteConne
25f0: 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e 65  ctionFlags conne
2600: 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51 4c 69  ctionFlags, SQLi
2610: 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d 20  teOpenFlagsEnum 
2620: 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74 20 6d  openFlags, int m
2630: 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f 6c  axPoolSize, bool
2640: 20 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 7b   usePool)..    {
2650: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c  ..      if (_sql
2660: 20 21 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   != null) return
2670: 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 75 73 65 50  ;....      _useP
2680: 6f 6f 6c 20 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a  ool = usePool;..
2690: 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20        _fileName 
26a0: 3d 20 73 74 72 46 69 6c 65 6e 61 6d 65 3b 0d 0a  = strFilename;..
26b0: 0d 0a 20 20 20 20 20 20 69 66 20 28 75 73 65 50  ..      if (useP
26c0: 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ool)..      {.. 
26d0: 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 53 51         _sql = SQ
26e0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f  LiteConnectionPo
26f0: 6f 6c 2e 52 65 6d 6f 76 65 28 73 74 72 46 69 6c  ol.Remove(strFil
2700: 65 6e 61 6d 65 2c 20 6d 61 78 50 6f 6f 6c 53 69  ename, maxPoolSi
2710: 7a 65 2c 20 6f 75 74 20 5f 70 6f 6f 6c 56 65 72  ze, out _poolVer
2720: 73 69 6f 6e 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e  sion);....#if !N
2730: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
2740: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
2750: 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63 65  N..        Trace
2760: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
2770: 67 2e 46 6f 72 6d 61 74 28 22 4f 70 65 6e 20 28  g.Format("Open (
2780: 50 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 28 5f 73  Pool): {0}", (_s
2790: 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 5f 73  ql != null) ? _s
27a0: 71 6c 2e 54 6f 53 74 72 69 6e 67 28 29 20 3a 20  ql.ToString() : 
27b0: 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 23 65 6e  "<null>"));..#en
27c0: 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  dif..      }....
27d0: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
27e0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b  = null)..      {
27f0: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
2800: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2810: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
2820: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
2830: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
2840: 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64   /* NOTE: Thread
2850: 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74  .Abort() protect
2860: 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ion. */..       
2870: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 49 6e   {..          In
2880: 74 50 74 72 20 64 62 3b 0d 0a 20 20 20 20 20 20  tPtr db;..      
2890: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
28a0: 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  ode n;....#if !S
28b0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
28c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
28d0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 26  onnectionFlags &
28e0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
28f0: 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69  nFlags.NoExtensi
2900: 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20  onFunctions) != 
2910: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
2920: 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f  Flags.NoExtensio
2930: 6e 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20  nFunctions)..   
2940: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2950: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
2960: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
2970: 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72  lite3_open_inter
2980: 6f 70 28 54 6f 55 54 46 38 28 73 74 72 46 69 6c  op(ToUTF8(strFil
2990: 65 6e 61 6d 65 29 2c 20 6f 70 65 6e 46 6c 61 67  ename), openFlag
29a0: 73 2c 20 6f 75 74 20 64 62 29 3b 0d 0a 20 20 20  s, out db);..   
29b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
29c0: 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66      else..#endif
29d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
29e0: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
29f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
2a00: 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  ds.sqlite3_open_
2a10: 76 32 28 54 6f 55 54 46 38 28 73 74 72 46 69 6c  v2(ToUTF8(strFil
2a20: 65 6e 61 6d 65 29 2c 20 6f 75 74 20 64 62 2c 20  ename), out db, 
2a30: 6f 70 65 6e 46 6c 61 67 73 2c 20 49 6e 74 50 74  openFlags, IntPt
2a40: 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 20 20  r.Zero);..      
2a50: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 4e 45      }....#if !NE
2a60: 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
2a70: 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
2a80: 0d 0a 20 20 20 20 20 20 20 20 20 20 54 72 61 63  ..          Trac
2a90: 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69  e.WriteLine(Stri
2aa0: 6e 67 2e 46 6f 72 6d 61 74 28 22 4f 70 65 6e 3a  ng.Format("Open:
2ab0: 20 7b 30 7d 22 2c 20 64 62 29 29 3b 0d 0a 23 65   {0}", db));..#e
2ac0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
2ad0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
2ae0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
2af0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
2b00: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c  xception(n, null
2b10: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 6f  );..          _o
2b20: 77 6e 48 61 6e 64 6c 65 20 3d 20 74 72 75 65 3b  wnHandle = true;
2b30: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c  ..          _sql
2b40: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e   = new SQLiteCon
2b50: 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28 64 62  nectionHandle(db
2b60: 2c 20 5f 6f 77 6e 48 61 6e 64 6c 65 29 3b 0d 0a  , _ownHandle);..
2b70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2b80: 20 20 20 6c 6f 63 6b 20 28 5f 73 71 6c 29 20 7b     lock (_sql) {
2b90: 20 2f 2a 20 48 41 43 4b 3a 20 46 6f 72 63 65 20   /* HACK: Force 
2ba0: 74 68 65 20 53 79 6e 63 42 6c 6f 63 6b 20 74 6f  the SyncBlock to
2bb0: 20 62 65 20 22 63 72 65 61 74 65 64 22 20 6e 6f   be "created" no
2bc0: 77 2e 20 2a 2f 20 7d 0d 0a 20 20 20 20 20 20 7d  w. */ }..      }
2bd0: 0d 0a 20 20 20 20 20 20 2f 2f 20 42 69 6e 64 20  ..      // Bind 
2be0: 66 75 6e 63 74 69 6f 6e 73 20 74 6f 20 74 68 69  functions to thi
2bf0: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49  s connection.  I
2c00: 66 20 61 6e 79 20 70 72 65 76 69 6f 75 73 20 66  f any previous f
2c10: 75 6e 63 74 69 6f 6e 73 20 6f 66 20 74 68 65 20  unctions of the 
2c20: 73 61 6d 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20  same name..     
2c30: 20 2f 2f 20 77 65 72 65 20 61 6c 72 65 61 64 79   // were already
2c40: 20 62 6f 75 6e 64 2c 20 74 68 65 6e 20 74 68 65   bound, then the
2c50: 20 6e 65 77 20 62 69 6e 64 69 6e 67 73 20 72 65   new bindings re
2c60: 70 6c 61 63 65 20 74 68 65 20 6f 6c 64 2e 0d 0a  place the old...
2c70: 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73        _functions
2c80: 41 72 72 61 79 20 3d 20 53 51 4c 69 74 65 46 75  Array = SQLiteFu
2c90: 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74  nction.BindFunct
2ca0: 69 6f 6e 73 28 74 68 69 73 2c 20 63 6f 6e 6e 65  ions(this, conne
2cb0: 63 74 69 6f 6e 46 6c 61 67 73 29 3b 0d 0a 20 20  ctionFlags);..  
2cc0: 20 20 20 20 53 65 74 54 69 6d 65 6f 75 74 28 30      SetTimeout(0
2cd0: 29 3b 0d 0a 20 20 20 20 20 20 47 43 2e 4b 65 65  );..      GC.Kee
2ce0: 70 41 6c 69 76 65 28 5f 73 71 6c 29 3b 0d 0a 20  pAlive(_sql);.. 
2cf0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
2d00: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
2d10: 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28 29 0d 0a  id ClearPool()..
2d20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
2d30: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f  iteConnectionPoo
2d40: 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f 66 69 6c  l.ClearPool(_fil
2d50: 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  eName);..    }..
2d60: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
2d70: 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 75 6e  verride int Coun
2d80: 74 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a  tPool()..    {..
2d90: 20 20 20 20 20 20 20 20 44 69 63 74 69 6f 6e 61          Dictiona
2da0: 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e 20  ry<string, int> 
2db0: 63 6f 75 6e 74 73 20 3d 20 6e 75 6c 6c 3b 0d 0a  counts = null;..
2dc0: 20 20 20 20 20 20 20 20 69 6e 74 20 6f 70 65 6e          int open
2dd0: 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20  Count = 0;..    
2de0: 20 20 20 20 69 6e 74 20 63 6c 6f 73 65 43 6f 75      int closeCou
2df0: 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  nt = 0;..       
2e00: 20 69 6e 74 20 74 6f 74 61 6c 43 6f 75 6e 74 20   int totalCount 
2e10: 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 0;....        
2e20: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
2e30: 50 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74 73 28 5f  Pool.GetCounts(_
2e40: 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
2e50: 20 20 20 20 20 20 20 72 65 66 20 63 6f 75 6e 74         ref count
2e60: 73 2c 20 72 65 66 20 6f 70 65 6e 43 6f 75 6e 74  s, ref openCount
2e70: 2c 20 72 65 66 20 63 6c 6f 73 65 43 6f 75 6e 74  , ref closeCount
2e80: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
2e90: 65 66 20 74 6f 74 61 6c 43 6f 75 6e 74 29 3b 0d  ef totalCount);.
2ea0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
2eb0: 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 3b 0d 0a 20  n totalCount;.. 
2ec0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
2ed0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
2ee0: 69 64 20 53 65 74 54 69 6d 65 6f 75 74 28 69 6e  id SetTimeout(in
2ef0: 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29 0d 0a 20  t nTimeoutMS).. 
2f00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
2f10: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
2f20: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
2f30: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 75 73 79  ods.sqlite3_busy
2f40: 5f 74 69 6d 65 6f 75 74 28 5f 73 71 6c 2c 20 6e  _timeout(_sql, n
2f50: 54 69 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20 20 20  TimeoutMS);..   
2f60: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
2f70: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
2f80: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
2f90: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
2fa0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
2fb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
2fc0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
2fd0: 6f 6c 20 53 74 65 70 28 53 51 4c 69 74 65 53 74  ol Step(SQLiteSt
2fe0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20  atement stmt).. 
2ff0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
3000: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a  teErrorCode n;..
3010: 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64        Random rnd
3020: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
3030: 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d  uint starttick =
3040: 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65   (uint)Environme
3050: 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 20  nt.TickCount;.. 
3060: 20 20 20 20 20 75 69 6e 74 20 74 69 6d 65 6f 75       uint timeou
3070: 74 20 3d 20 28 75 69 6e 74 29 28 73 74 6d 74 2e  t = (uint)(stmt.
3080: 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e  _command._comman
3090: 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29  dTimeout * 1000)
30a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c 65  ;....      while
30b0: 20 28 74 72 75 65 29 0d 0a 20 20 20 20 20 20 7b   (true)..      {
30c0: 0d 0a 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e  ..        n = Un
30d0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
30e0: 73 2e 73 71 6c 69 74 65 33 5f 73 74 65 70 28 73  s.sqlite3_step(s
30f0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
3100: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
3110: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
3120: 6f 72 43 6f 64 65 2e 52 6f 77 29 20 72 65 74 75  orCode.Row) retu
3130: 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
3140: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
3150: 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29  eErrorCode.Done)
3160: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
3170: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
3180: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
3190: 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
31a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  {..          SQL
31b0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 3b 0d  iteErrorCode r;.
31c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  ...          // 
31d0: 41 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  An error occurre
31e0: 64 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65  d, attempt to re
31f0: 73 65 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e  set the statemen
3200: 74 2e 20 20 49 66 20 74 68 65 20 72 65 73 65 74  t.  If the reset
3210: 20 77 6f 72 6b 65 64 20 62 65 63 61 75 73 65 20   worked because 
3220: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 2f  the..          /
3230: 2f 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61  / schema has cha
3240: 6e 67 65 64 2c 20 72 65 2d 74 72 79 20 74 68 65  nged, re-try the
3250: 20 73 74 65 70 20 61 67 61 69 6e 2e 20 20 49 66   step again.  If
3260: 20 69 74 20 65 72 72 6f 72 65 64 20 6f 75 72 20   it errored our 
3270: 62 65 63 61 75 73 65 20 74 68 65 20 64 61 74 61  because the data
3280: 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  base..          
3290: 2f 2f 20 69 73 20 6c 6f 63 6b 65 64 2c 20 74 68  // is locked, th
32a0: 65 6e 20 6b 65 65 70 20 72 65 74 72 79 69 6e 67  en keep retrying
32b0: 20 75 6e 74 69 6c 20 74 68 65 20 63 6f 6d 6d 61   until the comma
32c0: 6e 64 20 74 69 6d 65 6f 75 74 20 6f 63 63 75 72  nd timeout occur
32d0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 72 20  s...          r 
32e0: 3d 20 52 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a  = Reset(stmt);..
32f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
3300: 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  r == SQLiteError
3310: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
3320: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
3330: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
3340: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
3350: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
3360: 20 65 6c 73 65 20 69 66 20 28 28 72 20 3d 3d 20   else if ((r == 
3370: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
3380: 4c 6f 63 6b 65 64 20 7c 7c 20 72 20 3d 3d 20 53  Locked || r == S
3390: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42  QLiteErrorCode.B
33a0: 75 73 79 29 20 26 26 20 73 74 6d 74 2e 5f 63 6f  usy) && stmt._co
33b0: 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a  mmand != null)..
33c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
33d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70           // Keep
33e0: 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20   trying..       
33f0: 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20       if (rnd == 
3400: 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74  null) // First t
3410: 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e  ime we've encoun
3420: 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a  tered the lock..
3430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6e                rn
3440: 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29  d = new Random()
3450: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3460: 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78 63   // If we've exc
3470: 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e  eeded the comman
3480: 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76  d's timeout, giv
3490: 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61  e up and throw a
34a0: 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  n error..       
34b0: 20 20 20 20 20 69 66 20 28 28 75 69 6e 74 29 45       if ((uint)E
34c0: 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43  nvironment.TickC
34d0: 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b  ount - starttick
34e0: 20 3e 20 74 69 6d 65 6f 75 74 29 0d 0a 20 20 20   > timeout)..   
34f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3500: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
3510: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
3520: 69 6f 6e 28 72 2c 20 47 65 74 4c 61 73 74 45 72  ion(r, GetLastEr
3530: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
3540: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
3550: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
3560: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3570: 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72 77         // Otherw
3580: 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61 20  ise sleep for a 
3590: 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66  random amount of
35a0: 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30 6d   time up to 150m
35b0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
35c0: 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e   System.Threadin
35d0: 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28 72  g.Thread.Sleep(r
35e0: 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29 29  nd.Next(1, 150))
35f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3600: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
3610: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3620: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
3630: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
3640: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
3650: 65 20 52 65 73 65 74 28 53 51 4c 69 74 65 53 74  e Reset(SQLiteSt
3660: 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20  atement stmt).. 
3670: 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
3680: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a  teErrorCode n;..
3690: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
36a0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20  ANDARD..      n 
36b0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
36c0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
36d0: 73 65 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  set_interop(stmt
36e0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
36f0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20  .#else..      n 
3700: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
3710: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
3720: 73 65 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  set(stmt._sqlite
3730: 5f 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d  _stmt);..#endif.
3740: 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 74  ...      // If t
3750: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
3760: 64 2c 20 74 72 79 20 61 6e 64 20 72 65 2d 70 72  d, try and re-pr
3770: 65 70 61 72 65 20 69 74 0d 0a 20 20 20 20 20 20  epare it..      
3780: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
3790: 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 29  rrorCode.Schema)
37a0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
37b0: 20 20 20 2f 2f 20 52 65 63 72 65 61 74 65 20 61     // Recreate a
37c0: 20 64 75 6d 6d 79 20 73 74 61 74 65 6d 65 6e 74   dummy statement
37d0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
37e0: 20 73 74 72 3b 0d 0a 20 20 20 20 20 20 20 20 75   str;..        u
37f0: 73 69 6e 67 20 28 53 51 4c 69 74 65 53 74 61 74  sing (SQLiteStat
3800: 65 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72 65 70  ement tmp = Prep
3810: 61 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f  are(null, stmt._
3820: 73 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e 75  sqlStatement, nu
3830: 6c 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d 74 2e  ll, (uint)(stmt.
3840: 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e  _command._comman
3850: 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29  dTimeout * 1000)
3860: 2c 20 6f 75 74 20 73 74 72 29 29 0d 0a 20 20 20  , out str))..   
3870: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3880: 20 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74 68    // Finalize th
3890: 65 20 65 78 69 73 74 69 6e 67 20 73 74 61 74 65  e existing state
38a0: 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20  ment..          
38b0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
38c0: 74 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20  t.Dispose();..  
38d0: 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61 73 73          // Reass
38e0: 69 67 6e 20 61 20 6e 65 77 20 73 74 61 74 65 6d  ign a new statem
38f0: 65 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ent pointer to t
3900: 68 65 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e 74  he old statement
3910: 20 61 6e 64 20 63 6c 65 61 72 20 74 68 65 20 74   and clear the t
3920: 65 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20 20  emporary one..  
3930: 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71          stmt._sq
3940: 6c 69 74 65 5f 73 74 6d 74 20 3d 20 74 6d 70 2e  lite_stmt = tmp.
3950: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20  _sqlite_stmt;.. 
3960: 20 20 20 20 20 20 20 20 20 74 6d 70 2e 5f 73 71           tmp._sq
3970: 6c 69 74 65 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c  lite_stmt = null
3980: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f  ;....          /
3990: 2f 20 52 65 61 70 70 6c 79 20 70 61 72 61 6d 65  / Reapply parame
39a0: 74 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ters..          
39b0: 73 74 6d 74 2e 42 69 6e 64 50 61 72 61 6d 65 74  stmt.BindParamet
39c0: 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ers();..        
39d0: 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
39e0: 6e 20 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  n (SQLiteErrorCo
39f0: 64 65 29 28 2d 31 29 3b 20 2f 2f 20 52 65 73 65  de)(-1); // Rese
3a00: 74 20 77 61 73 20 4f 4b 2c 20 77 69 74 68 20 73  t was OK, with s
3a10: 63 68 65 6d 61 20 63 68 61 6e 67 65 0d 0a 20 20  chema change..  
3a20: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73      }..      els
3a30: 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
3a40: 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65  eErrorCode.Locke
3a50: 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65  d || n == SQLite
3a60: 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d  ErrorCode.Busy).
3a70: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
3a80: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  n;....      if (
3a90: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
3aa0: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
3ab0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
3ac0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
3ad0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
3ae0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
3af0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
3b00: 4f 6b 3b 20 2f 2f 20 57 65 20 72 65 73 65 74 20  Ok; // We reset 
3b10: 4f 4b 2c 20 6e 6f 20 73 63 68 65 6d 61 20 63 68  OK, no schema ch
3b20: 61 6e 67 65 73 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  anges..    }....
3b30: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3b40: 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74  rride string Get
3b50: 4c 61 73 74 45 72 72 6f 72 28 29 0d 0a 20 20 20  LastError()..   
3b60: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
3b70: 20 53 51 4c 69 74 65 42 61 73 65 2e 47 65 74 4c   SQLiteBase.GetL
3b80: 61 73 74 45 72 72 6f 72 28 5f 73 71 6c 2c 20 5f  astError(_sql, _
3b90: 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  sql);..    }....
3ba0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3bb0: 72 72 69 64 65 20 53 51 4c 69 74 65 53 74 61 74  rride SQLiteStat
3bc0: 65 6d 65 6e 74 20 50 72 65 70 61 72 65 28 53 51  ement Prepare(SQ
3bd0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
3be0: 6e 6e 2c 20 73 74 72 69 6e 67 20 73 74 72 53 71  nn, string strSq
3bf0: 6c 2c 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65  l, SQLiteStateme
3c00: 6e 74 20 70 72 65 76 69 6f 75 73 2c 20 75 69 6e  nt previous, uin
3c10: 74 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74  t timeoutMS, out
3c20: 20 73 74 72 69 6e 67 20 73 74 72 52 65 6d 61 69   string strRemai
3c30: 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  n)..    {..     
3c40: 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
3c50: 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 53 71  ullOrEmpty(strSq
3c60: 6c 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  l))..      {..  
3c70: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3c80: 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 51 4c 69 74    // NOTE: SQLit
3c90: 65 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f  e does not suppo
3ca0: 72 74 20 74 68 65 20 63 6f 6e 63 65 70 74 20 6f  rt the concept o
3cb0: 66 20 73 65 70 61 72 61 74 65 20 73 63 68 65 6d  f separate schem
3cc0: 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  as..        //  
3cd0: 20 20 20 20 20 69 6e 20 6f 6e 65 20 64 61 74 61       in one data
3ce0: 62 61 73 65 3b 20 74 68 65 72 65 66 6f 72 65 2c  base; therefore,
3cf0: 20 72 65 6d 6f 76 65 20 74 68 65 20 62 61 73 65   remove the base
3d00: 20 73 63 68 65 6d 61 20 6e 61 6d 65 0d 0a 20 20   schema name..  
3d10: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75        //       u
3d20: 73 65 64 20 74 6f 20 73 6d 6f 6f 74 68 20 69 6e  sed to smooth in
3d30: 74 65 67 72 61 74 69 6f 6e 20 77 69 74 68 20 74  tegration with t
3d40: 68 65 20 62 61 73 65 20 2e 4e 45 54 20 46 72 61  he base .NET Fra
3d50: 6d 65 77 6f 72 6b 0d 0a 20 20 20 20 20 20 20 20  mework..        
3d60: 2f 2f 20 20 20 20 20 20 20 64 61 74 61 20 63 6c  //       data cl
3d70: 61 73 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20  asses...        
3d80: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  //..        stri
3d90: 6e 67 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  ng baseSchemaNam
3da0: 65 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c  e = (cnn != null
3db0: 29 20 3f 20 63 6e 6e 2e 5f 62 61 73 65 53 63 68  ) ? cnn._baseSch
3dc0: 65 6d 61 4e 61 6d 65 20 3a 20 6e 75 6c 6c 3b 0d  emaName : null;.
3dd0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 21  ...        if (!
3de0: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
3df0: 6d 70 74 79 28 62 61 73 65 53 63 68 65 6d 61 4e  mpty(baseSchemaN
3e00: 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  ame))..        {
3e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 53  ..          strS
3e20: 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c  ql = strSql.Repl
3e30: 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
3e40: 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
3e50: 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  t(CultureInfo.In
3e60: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d  variantCulture,.
3e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
3e80: 5b 7b 30 7d 5d 2e 22 2c 20 62 61 73 65 53 63 68  [{0}].", baseSch
3e90: 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67  emaName), String
3ea0: 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20  .Empty);....    
3eb0: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
3ec0: 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a  trSql.Replace(..
3ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
3ee0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74  ring.Format(Cult
3ef0: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
3f00: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
3f10: 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2e 22 2c           "{0}.",
3f20: 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29   baseSchemaName)
3f30: 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b  , String.Empty);
3f40: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
3f50: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 53 51     }....      SQ
3f60: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
3f70: 61 67 73 20 66 6c 61 67 73 20 3d 0d 0a 20 20 20  ags flags =..   
3f80: 20 20 20 20 20 20 20 28 63 6e 6e 20 21 3d 20 6e         (cnn != n
3f90: 75 6c 6c 29 20 3f 20 63 6e 6e 2e 46 6c 61 67 73  ull) ? cnn.Flags
3fa0: 20 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   : SQLiteConnect
3fb0: 69 6f 6e 46 6c 61 67 73 2e 44 65 66 61 75 6c 74  ionFlags.Default
3fc0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 28  ;....      if ((
3fd0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
3fe0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
3ff0: 67 50 72 65 70 61 72 65 29 20 3d 3d 20 53 51 4c  gPrepare) == SQL
4000: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
4010: 67 73 2e 4c 6f 67 50 72 65 70 61 72 65 29 0d 0a  gs.LogPrepare)..
4020: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4030: 20 20 20 69 66 20 28 28 73 74 72 53 71 6c 20 3d     if ((strSql =
4040: 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 74 72 53  = null) || (strS
4050: 71 6c 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 20  ql.Length == 0) 
4060: 7c 7c 20 28 73 74 72 53 71 6c 2e 54 72 69 6d 28  || (strSql.Trim(
4070: 29 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 29 0d  ).Length == 0)).
4080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
4090: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
40a0: 61 67 65 28 22 50 72 65 70 61 72 69 6e 67 20 7b  age("Preparing {
40b0: 3c 6e 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22 29 3b  <nothing>}...");
40c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
40d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
40e0: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
40f0: 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  sage(String.Form
4100: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
4110: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
4120: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
4130: 65 2c 20 22 50 72 65 70 61 72 69 6e 67 20 7b 7b  e, "Preparing {{
4140: 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72 53 71  {0}}}...", strSq
4150: 6c 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  l));..      }...
4160: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 73 74  .      IntPtr st
4170: 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  mt = IntPtr.Zero
4180: 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
4190: 70 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ptr = IntPtr.Zer
41a0: 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  o;..      int le
41b0: 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51  n = 0;..      SQ
41c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
41d0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
41e0: 65 2e 53 63 68 65 6d 61 3b 0d 0a 20 20 20 20 20  e.Schema;..     
41f0: 20 69 6e 74 20 72 65 74 72 69 65 73 20 3d 20 30   int retries = 0
4200: 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  ;..      byte[] 
4210: 62 20 3d 20 54 6f 55 54 46 38 28 73 74 72 53 71  b = ToUTF8(strSq
4220: 6c 29 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e  l);..      strin
4230: 67 20 74 79 70 65 64 65 66 73 20 3d 20 6e 75 6c  g typedefs = nul
4240: 6c 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  l;..      SQLite
4250: 53 74 61 74 65 6d 65 6e 74 20 63 6d 64 20 3d 20  Statement cmd = 
4260: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 52 61 6e  null;..      Ran
4270: 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d  dom rnd = null;.
4280: 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74 61 72  .      uint star
4290: 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e  ttick = (uint)En
42a0: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
42b0: 75 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 47 43  unt;....      GC
42c0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
42d0: 47 43 48 61 6e 64 6c 65 2e 41 6c 6c 6f 63 28 62  GCHandle.Alloc(b
42e0: 2c 20 47 43 48 61 6e 64 6c 65 54 79 70 65 2e 50  , GCHandleType.P
42f0: 69 6e 6e 65 64 29 3b 0d 0a 20 20 20 20 20 20 49  inned);..      I
4300: 6e 74 50 74 72 20 70 73 71 6c 20 3d 20 68 61 6e  ntPtr psql = han
4310: 64 6c 65 2e 41 64 64 72 4f 66 50 69 6e 6e 65 64  dle.AddrOfPinned
4320: 4f 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 20  Object();..     
4330: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
4340: 48 61 6e 64 6c 65 20 73 74 61 74 65 6d 65 6e 74  Handle statement
4350: 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  Handle = null;..
4360: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
4370: 20 7b 0d 0a 20 20 20 20 20 20 20 20 77 68 69 6c   {..        whil
4380: 65 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  e ((n == SQLiteE
4390: 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 20  rrorCode.Schema 
43a0: 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  || n == SQLiteEr
43b0: 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c  rorCode.Locked |
43c0: 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  | n == SQLiteErr
43d0: 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20  orCode.Busy) && 
43e0: 72 65 74 72 69 65 73 20 3c 20 33 29 0d 0a 20 20  retries < 3)..  
43f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4400: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
4410: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4420: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
4430: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
4440: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20          finally 
4450: 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e  /* NOTE: Thread.
4460: 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69  Abort() protecti
4470: 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  on. */..        
4480: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
4490: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
44a0: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
44b0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
44c0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69  qlite3_prepare_i
44d0: 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 70 73 71  nterop(_sql, psq
44e0: 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c  l, b.Length - 1,
44f0: 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75 74 20 70   out stmt, out p
4500: 74 72 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23  tr, out len);..#
4510: 65 6c 73 65 0d 0a 23 69 66 20 55 53 45 5f 50 52  else..#if USE_PR
4520: 45 50 41 52 45 5f 56 32 0d 0a 20 20 20 20 20 20  EPARE_V2..      
4530: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
4540: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
4550: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
4560: 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c  (_sql, psql, b.L
4570: 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20 73  ength - 1, out s
4580: 74 6d 74 2c 20 6f 75 74 20 70 74 72 29 3b 0d 0a  tmt, out ptr);..
4590: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
45a0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
45b0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
45c0: 65 33 5f 70 72 65 70 61 72 65 28 5f 73 71 6c 2c  e3_prepare(_sql,
45d0: 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20   psql, b.Length 
45e0: 2d 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f  - 1, out stmt, o
45f0: 75 74 20 70 74 72 29 3b 0d 0a 23 65 6e 64 69 66  ut ptr);..#endif
4600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65  ..            le
4610: 6e 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d  n = -1;..#endif.
4620: 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  ...#if !NET_COMP
4630: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
4640: 53 54 41 54 45 4d 45 4e 54 0d 0a 20 20 20 20 20  STATEMENT..     
4650: 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
4660: 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f  teLine(String.Fo
4670: 72 6d 61 74 28 22 50 72 65 70 61 72 65 20 28 7b  rmat("Prepare ({
4680: 30 7d 29 3a 20 7b 31 7d 22 2c 20 6e 2c 20 73 74  0}): {1}", n, st
4690: 6d 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  mt));..#endif...
46a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
46b0: 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
46c0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 73  orCode.Ok) && (s
46d0: 74 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  tmt != IntPtr.Ze
46e0: 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ro))..          
46f0: 20 20 20 20 73 74 61 74 65 6d 65 6e 74 48 61 6e      statementHan
4700: 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  dle = new SQLite
4710: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 28  StatementHandle(
4720: 5f 73 71 6c 2c 20 73 74 6d 74 29 3b 0d 0a 20 20  _sql, stmt);..  
4730: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4740: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
4750: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
4760: 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 20  Schema)..       
4770: 20 20 20 20 20 72 65 74 72 69 65 73 2b 2b 3b 0d       retries++;.
4780: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20  .          else 
4790: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
47a0: 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 29 0d  rrorCode.Error).
47b0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
47c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
47d0: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74  ring.Compare(Get
47e0: 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 22 6e 65  LastError(), "ne
47f0: 61 72 20 5c 22 54 59 50 45 53 5c 22 3a 20 73 79  ar \"TYPES\": sy
4800: 6e 74 61 78 20 65 72 72 6f 72 22 2c 20 53 74 72  ntax error", Str
4810: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
4820: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
4830: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
4840: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4850: 20 20 20 20 20 69 6e 74 20 70 6f 73 20 3d 20 73       int pos = s
4860: 74 72 53 71 6c 2e 49 6e 64 65 78 4f 66 28 27 3b  trSql.IndexOf(';
4870: 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ');..           
4880: 20 20 20 69 66 20 28 70 6f 73 20 3d 3d 20 2d 31     if (pos == -1
4890: 29 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 4c  ) pos = strSql.L
48a0: 65 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20  ength - 1;....  
48b0: 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
48c0: 64 65 66 73 20 3d 20 73 74 72 53 71 6c 2e 53 75  defs = strSql.Su
48d0: 62 73 74 72 69 6e 67 28 30 2c 20 70 6f 73 20 2b  bstring(0, pos +
48e0: 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   1);..          
48f0: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
4900: 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 70 6f  Sql.Substring(po
4910: 73 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20  s + 1);....     
4920: 20 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61           strRema
4930: 69 6e 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20 20 20  in = "";....    
4940: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
4950: 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20  (cmd == null && 
4960: 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20  strSql.Length > 
4970: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
4980: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4990: 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61       cmd = Prepa
49a0: 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20  re(cnn, strSql, 
49b0: 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75  previous, timeou
49c0: 74 4d 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61  tMS, out strRema
49d0: 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  in);..          
49e0: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
49f0: 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20  trRemain;..     
4a00: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4a20: 63 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  cmd != null)..  
4a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d                cm
4a40: 64 2e 53 65 74 54 79 70 65 73 28 74 79 70 65 64  d.SetTypes(typed
4a50: 65 66 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  efs);....       
4a60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d         return cm
4a70: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
4a80: 7d 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35 20 7c  }..#if (NET_35 |
4a90: 7c 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f  | NET_40 || NET_
4aa0: 34 35 29 20 26 26 20 21 50 4c 41 54 46 4f 52 4d  45) && !PLATFORM
4ab0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
4ac0: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  K..            e
4ad0: 6c 73 65 20 69 66 20 28 5f 62 75 69 6c 64 69 6e  lse if (_buildin
4ae0: 67 53 63 68 65 6d 61 20 3d 3d 20 66 61 6c 73 65  gSchema == false
4af0: 20 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61   && String.Compa
4b00: 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28  re(GetLastError(
4b10: 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68 20 74  ), 0, "no such t
4b20: 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48 45 4d  able: TEMP.SCHEM
4b30: 41 22 2c 20 30 2c 20 32 36 2c 20 53 74 72 69 6e  A", 0, 26, Strin
4b40: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
4b50: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
4b60: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
4b70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4b80: 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22     strRemain = "
4b90: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
4ba0: 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d    _buildingSchem
4bb0: 61 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  a = true;..     
4bc0: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
4bd0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
4bf0: 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65  SQLiteSchemaExte
4c00: 6e 73 69 6f 6e 73 20 65 78 74 20 3d 20 28 28 49  nsions ext = ((I
4c10: 53 65 72 76 69 63 65 50 72 6f 76 69 64 65 72 29  ServiceProvider)
4c20: 53 51 4c 69 74 65 46 61 63 74 6f 72 79 2e 49 6e  SQLiteFactory.In
4c30: 73 74 61 6e 63 65 29 2e 47 65 74 53 65 72 76 69  stance).GetServi
4c40: 63 65 28 74 79 70 65 6f 66 28 49 53 51 4c 69 74  ce(typeof(ISQLit
4c50: 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e  eSchemaExtension
4c60: 73 29 29 20 61 73 20 49 53 51 4c 69 74 65 53 63  s)) as ISQLiteSc
4c70: 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 3b 0d  hemaExtensions;.
4c80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4c90: 20 20 20 69 66 20 28 65 78 74 20 21 3d 20 6e 75     if (ext != nu
4ca0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4cb0: 20 20 20 20 20 20 20 65 78 74 2e 42 75 69 6c 64         ext.Build
4cc0: 54 65 6d 70 53 63 68 65 6d 61 28 63 6e 6e 29 3b  TempSchema(cnn);
4cd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4ce0: 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d      while (cmd =
4cf0: 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c  = null && strSql
4d00: 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20  .Length > 0)..  
4d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d30: 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65     cmd = Prepare
4d40: 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72  (cnn, strSql, pr
4d50: 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d  evious, timeoutM
4d60: 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61 69 6e  S, out strRemain
4d70: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4d80: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
4d90: 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20  trRemain;..     
4da0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
4db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4dc0: 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20  return cmd;..   
4dd0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
4de0: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61              fina
4df0: 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lly..           
4e00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4e10: 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53        _buildingS
4e20: 63 68 65 6d 61 20 3d 20 66 61 6c 73 65 3b 0d 0a  chema = false;..
4e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
4e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4e50: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
4e60: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65    }..          e
4e70: 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  lse if (n == SQL
4e80: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63  iteErrorCode.Loc
4e90: 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69  ked || n == SQLi
4ea0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79  teErrorCode.Busy
4eb0: 29 20 2f 2f 20 4c 6f 63 6b 65 64 20 2d 2d 20 64  ) // Locked -- d
4ec0: 65 6c 61 79 20 61 20 73 6d 61 6c 6c 20 61 6d 6f  elay a small amo
4ed0: 75 6e 74 20 62 65 66 6f 72 65 20 72 65 74 72 79  unt before retry
4ee0: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ing..          {
4ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4f00: 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20   Keep trying..  
4f10: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6e            if (rn
4f20: 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69  d == null) // Fi
4f30: 72 73 74 20 74 69 6d 65 20 77 65 27 76 65 20 65  rst time we've e
4f40: 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c  ncountered the l
4f50: 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ock..           
4f60: 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e     rnd = new Ran
4f70: 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dom();....      
4f80: 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76        // If we'v
4f90: 65 20 65 78 63 65 65 64 65 64 20 74 68 65 20 63  e exceeded the c
4fa0: 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74  ommand's timeout
4fb0: 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20 74 68  , give up and th
4fc0: 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20  row an error..  
4fd0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 75            if ((u
4fe0: 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e  int)Environment.
4ff0: 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72  TickCount - star
5000: 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 4d  ttick > timeoutM
5010: 53 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  S)..            
5020: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5030: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
5040: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
5050: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
5060: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5070: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
5080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
50a0: 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65 70   Otherwise sleep
50b0: 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d   for a random am
50c0: 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20  ount of time up 
50d0: 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20  to 150ms..      
50e0: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54          System.T
50f0: 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e  hreading.Thread.
5100: 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31  Sleep(rnd.Next(1
5110: 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20  , 150));..      
5120: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5130: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
5140: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
5150: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
5160: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
5170: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
5180: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
5190: 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r());....       
51a0: 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 55 54 46   strRemain = UTF
51b0: 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 6c  8ToString(ptr, l
51c0: 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  en);....        
51d0: 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e  if (statementHan
51e0: 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 63 6d 64  dle != null) cmd
51f0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61   = new SQLiteSta
5200: 74 65 6d 65 6e 74 28 74 68 69 73 2c 20 66 6c 61  tement(this, fla
5210: 67 73 2c 20 73 74 61 74 65 6d 65 6e 74 48 61 6e  gs, statementHan
5220: 64 6c 65 2c 20 73 74 72 53 71 6c 2e 53 75 62 73  dle, strSql.Subs
5230: 74 72 69 6e 67 28 30 2c 20 73 74 72 53 71 6c 2e  tring(0, strSql.
5240: 4c 65 6e 67 74 68 20 2d 20 73 74 72 52 65 6d 61  Length - strRema
5250: 69 6e 2e 4c 65 6e 67 74 68 29 2c 20 70 72 65 76  in.Length), prev
5260: 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ious);....      
5270: 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20    return cmd;.. 
5280: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 66 69       }..      fi
5290: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 7b 0d 0a  nally..      {..
52a0: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 46          handle.F
52b0: 72 65 65 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ree();..      }.
52c0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
52d0: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
52e0: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
52f0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
5300: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
5310: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
5320: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
5330: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
5340: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
5350: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
5360: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
5370: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  (..            "
5380: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
5390: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
53a0: 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e 2e 22 2c  {1} as NULL...",
53b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61  ..            ha
53c0: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65  ndleIntPtr, inde
53d0: 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  x));..    }.... 
53e0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61     protected sta
53f0: 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64  tic void LogBind
5400: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
5410: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69  Handle handle, i
5420: 6e 74 20 69 6e 64 65 78 2c 20 56 61 6c 75 65 54  nt index, ValueT
5430: 79 70 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ype value)..    
5440: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
5450: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
5460: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
5470: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
5480: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
5490: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
54a0: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
54b0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
54c0: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
54d0: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
54e0: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
54f0: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
5500: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
5510: 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 2c  value.GetType(),
5520: 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d   value));..    }
5530: 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
5540: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 46 6f  static string Fo
5550: 72 6d 61 74 44 61 74 65 54 69 6d 65 28 44 61 74  rmatDateTime(Dat
5560: 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20  eTime value)..  
5570: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 74 72    {..        Str
5580: 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c  ingBuilder resul
5590: 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  t = new StringBu
55a0: 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20  ilder();....    
55b0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
55c0: 64 28 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67  d(value.ToString
55d0: 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a  ("yyyy-MM-ddTHH:
55e0: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22 29  mm:ss.FFFFFFFK")
55f0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
5600: 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d  lt.Append(' ');.
5610: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
5620: 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b 69 6e  Append(value.Kin
5630: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73  d);..        res
5640: 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b  ult.Append(' ');
5650: 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74  ..        result
5660: 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54 69  .Append(value.Ti
5670: 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  cks);....       
5680: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54   return result.T
5690: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
56a0: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
56b0: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
56c0: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
56d0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
56e0: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
56f0: 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d  DateTime value).
5700: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5710: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
5720: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
5730: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
5740: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
5750: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
5760: 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69            "Bindi
5770: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d  ng statement {0}
5780: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61   paramter #{1} a
5790: 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20  s type {2} with 
57a0: 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e  value {{{3}}}...
57b0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
57c0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
57d0: 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61 74 65  dex, typeof(Date
57e0: 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44 61 74  Time), FormatDat
57f0: 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29 3b 0d  eTime(value)));.
5800: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
5810: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
5820: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
5830: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
5840: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
5850: 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  dex, string valu
5860: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
5870: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
5880: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
5890: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
58a0: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
58b0: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
58c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69  .            "Bi
58d0: 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  nding statement 
58e0: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31  {0} paramter #{1
58f0: 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69  } as type {2} wi
5900: 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d  th value {{{3}}}
5910: 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
5920: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
5930: 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 53   index, typeof(S
5940: 74 72 69 6e 67 29 2c 20 28 76 61 6c 75 65 20 21  tring), (value !
5950: 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75 65 20  = null) ? value 
5960: 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20  : "<null>"));.. 
5970: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76     }....    priv
5980: 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
5990: 67 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c 53  g ToHexadecimalS
59a0: 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20  tring(..        
59b0: 62 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a 20 20  byte[] array..  
59c0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
59d0: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 72 61          if (arra
59e0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
59f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
5a00: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
5a10: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65  StringBuilder re
5a20: 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e  sult = new Strin
5a30: 67 42 75 69 6c 64 65 72 28 61 72 72 61 79 2e 4c  gBuilder(array.L
5a40: 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d 0a 20  ength * 2);.... 
5a50: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74         int lengt
5a60: 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74 68  h = array.Length
5a70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  ;....        for
5a80: 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
5a90: 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b   index < length;
5aa0: 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20   index++)..     
5ab0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
5ac0: 70 65 6e 64 28 61 72 72 61 79 5b 69 6e 64 65 78  pend(array[index
5ad0: 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78 32 22 29  ].ToString("x2")
5ae0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
5af0: 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74  turn result.ToSt
5b00: 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ring();..    }..
5b10: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
5b20: 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42  static void LogB
5b30: 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ind(SQLiteStatem
5b40: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
5b50: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74  , int index, byt
5b60: 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  e[] value)..    
5b70: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
5b80: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
5b90: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
5ba0: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
5bb0: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
5bc0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
5bd0: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
5be0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
5bf0: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
5c00: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
5c10: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
5c20: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
5c30: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
5c40: 74 79 70 65 6f 66 28 42 79 74 65 5b 5d 29 2c 20  typeof(Byte[]), 
5c50: 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20  (value != null) 
5c60: 3f 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c 53  ? ToHexadecimalS
5c70: 74 72 69 6e 67 28 76 61 6c 75 65 29 20 3a 20 22  tring(value) : "
5c80: 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20  <null>"));..    
5c90: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
5ca0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
5cb0: 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69  Bind_Double(SQLi
5cc0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
5cd0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
5ce0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
5cf0: 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65  nt index, double
5d00: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
5d10: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
5d20: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
5d30: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
5d40: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20  ite_stmt;....   
5d50: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
5d60: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
5d70: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
5d80: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
5d90: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
5da0: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
5db0: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
5dc0: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
5dd0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
5de0: 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c 41     }....#if !PLA
5df0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
5e00: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
5e10: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
5e20: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
5e30: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5e40: 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64  bind_double(hand
5e50: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
5e60: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
5e70: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
5e80: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
5e90: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5ea0: 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69  e3_bind_double_i
5eb0: 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69  nterop(handle, i
5ec0: 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29  ndex, ref value)
5ed0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
5ee0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
5ef0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
5f00: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
5f10: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
5f20: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
5f30: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
5f40: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
5f50: 69 64 20 42 69 6e 64 5f 49 6e 74 33 32 28 53 51  id Bind_Int32(SQ
5f60: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
5f70: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
5f80: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
5f90: 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20   int index, int 
5fa0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
5fb0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
5fc0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
5fd0: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
5fe0: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20  te_stmt;....    
5ff0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
6000: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6010: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
6020: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
6030: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
6040: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
6050: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
6060: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
6070: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
6080: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53    }....        S
6090: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
60a0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
60b0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
60c0: 69 6e 64 5f 69 6e 74 28 68 61 6e 64 6c 65 2c 20  ind_int(handle, 
60d0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
60e0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
60f0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6100: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
6110: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
6120: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
6130: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
6140: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
6150: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e  de void Bind_UIn
6160: 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t32(SQLiteStatem
6170: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
6180: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
6190: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
61a0: 2c 20 75 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20  , uint value).. 
61b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
61c0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
61d0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
61e0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
61f0: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
6200: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
6210: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
6220: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
6230: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
6240: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
6250: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6260: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
6270: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6280: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
6290: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
62a0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
62b0: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  if....        SQ
62c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b  LiteErrorCode n;
62d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
62e0: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
62f0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42  onnectionFlags.B
6300: 69 6e 64 55 49 6e 74 33 32 41 73 49 6e 74 36 34  indUInt32AsInt64
6310: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
6320: 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55  ctionFlags.BindU
6330: 49 6e 74 33 32 41 73 49 6e 74 36 34 29 0d 0a 20  Int32AsInt64).. 
6340: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6350: 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65        long value
6360: 32 20 3d 20 76 61 6c 75 65 3b 0d 0a 0d 0a 23 69  2 = value;....#i
6370: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
6380: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
6390: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
63a0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
63b0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
63c0: 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64  nt64(handle, ind
63d0: 65 78 2c 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65  ex, value2);..#e
63e0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
63f0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
6400: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6410: 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65  _bind_int64_inte
6420: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
6430: 78 2c 20 72 65 66 20 76 61 6c 75 65 32 29 3b 0d  x, ref value2);.
6440: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
6450: 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
6460: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
6470: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
6480: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6490: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69  .sqlite3_bind_ui
64a0: 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nt(handle, index
64b0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
64c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 69 66     }..        if
64d0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
64e0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
64f0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
6500: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
6510: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
6520: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
6530: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
6540: 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65 53  nd_Int64(SQLiteS
6550: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
6560: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6570: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
6580: 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c 75  index, long valu
6590: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
65a0: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
65b0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
65c0: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
65d0: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
65e0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
65f0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
6600: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
6610: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6620: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
6630: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6640: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
6650: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6660: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
6670: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
6680: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
6690: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
66a0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
66b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
66c0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
66d0: 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e  int64(handle, in
66e0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  dex, value);..#e
66f0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  lse..        SQL
6700: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
6710: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6720: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
6730: 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  d_int64_interop(
6740: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
6750: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ef value);..#end
6760: 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  if..        if (
6770: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
6780: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
6790: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
67a0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
67b0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
67c0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
67d0: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
67e0: 5f 55 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74  _UInt64(SQLiteSt
67f0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
6800: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6810: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
6820: 6e 64 65 78 2c 20 75 6c 6f 6e 67 20 76 61 6c 75  ndex, ulong valu
6830: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
6840: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
6850: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
6860: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
6870: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
6880: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
6890: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
68a0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
68b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
68c0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
68d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
68e0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
68f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6900: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
6910: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
6920: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
6930: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
6940: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
6950: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6960: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
6970: 75 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69  uint64(handle, i
6980: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
6990: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 53 51  else..        SQ
69a0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
69b0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
69c0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
69d0: 6e 64 5f 75 69 6e 74 36 34 5f 69 6e 74 65 72 6f  nd_uint64_intero
69e0: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
69f0: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
6a00: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66  ndif..        if
6a10: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
6a20: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
6a30: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
6a40: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
6a50: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
6a60: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
6a70: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
6a80: 6e 64 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74  nd_Text(SQLiteSt
6a90: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
6aa0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6ab0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
6ac0: 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c  ndex, string val
6ad0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
6ae0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
6af0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
6b00: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
6b10: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
6b20: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
6b30: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
6b40: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
6b50: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6b60: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
6b70: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6b80: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
6b90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6ba0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
6bb0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
6bc0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
6bd0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
6be0: 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54      byte[] b = T
6bf0: 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 0d  oUTF8(value);...
6c00: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
6c10: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
6c20: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
6c30: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
6c40: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
6c50: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
6c60: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
6c70: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
6c80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
6c90: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
6ca0: 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20  ndex, b);..     
6cb0: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
6cc0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
6cd0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
6ce0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6cf0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
6d00: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
6d10: 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31   b, b.Length - 1
6d20: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
6d30: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
6d40: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
6d50: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
6d60: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
6d70: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
6d80: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
6d90: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
6da0: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44  ride void Bind_D
6db0: 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74  ateTime(SQLiteSt
6dc0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
6dd0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6de0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
6df0: 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64  ndex, DateTime d
6e00: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
6e10: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
6e20: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
6e30: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
6e40: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
6e50: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
6e60: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
6e70: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
6e80: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6e90: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
6ea0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6eb0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
6ec0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6ed0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
6ee0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 64 74 29  ndle, index, dt)
6ef0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
6f00: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
6f10: 73 77 69 74 63 68 20 28 5f 64 61 74 65 74 69 6d  switch (_datetim
6f20: 65 46 6f 72 6d 61 74 29 0d 0a 20 20 20 20 20 20  eFormat)..      
6f30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6f40: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
6f50: 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a  Formats.Ticks:..
6f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6f80: 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75         long valu
6f90: 65 20 3d 20 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d  e = dt.Ticks;...
6fa0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
6fb0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
6fc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6fd0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
6fe0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
6ff0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
7000: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
7010: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
7020: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
7030: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7050: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
7060: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
7070: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7080: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 69 6e 74 36 34 28 68 61 6e 64 6c  bind_int64(handl
70e0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
70f0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
7100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
7110: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
7120: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
7130: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
7140: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
7150: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
7160: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  ref value);..#en
7170: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
7180: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
7190: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
71a0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
71b0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
71c0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
71d0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
71e0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
71f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7200: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7210: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
7220: 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79  ormats.JulianDay
7230: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
7240: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7250: 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65            double
7260: 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69 61   value = ToJulia
7270: 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 23 69 66  nDay(dt);....#if
7280: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
7290: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72b0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
72c0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
72d0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
72e0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
72f0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
7300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7310: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
7330: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
7340: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
7350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7360: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7370: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
7380: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
7390: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
73a0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
73b0: 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20  _double(handle, 
73c0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
73d0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
73e0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
73f0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
7400: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
7410: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
7420: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68  double_interop(h
7430: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
7440: 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69  f value);..#endi
7450: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
7460: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
7470: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
7480: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
7490: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
74a0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
74b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
74c0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
74d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
74e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
74f0: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
7500: 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 3a 0d  mats.UnixEpoch:.
7510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7520: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7530: 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c          long val
7540: 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49  ue = Convert.ToI
7550: 6e 74 36 34 28 64 74 2e 53 75 62 74 72 61 63 74  nt64(dt.Subtract
7560: 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f 74 61  (UnixEpoch).Tota
7570: 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a 23 69  lSeconds);....#i
7580: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
7590: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
75a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
75e0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
75f0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
7600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7610: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7630: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
7640: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
7650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7660: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7670: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
7680: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
7690: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
76a0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
76b0: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
76c0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
76d0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
76e0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
76f0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
7700: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
7710: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
7720: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61  int64_interop(ha
7730: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
7740: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
7750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7760: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
7770: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
7780: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
7790: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
77a0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
77b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
77c0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
77d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
77e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66  .            def
77f0: 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20  ault:..         
7800: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79                by
7820: 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28  te[] b = ToUTF8(
7830: 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  dt);....#if !PLA
7840: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
7850: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
7860: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7870: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
7880: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
7890: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
78a0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
78b0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
78c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
78d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
78e0: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
78f0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
7900: 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   b);..          
7910: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
7920: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  dif....         
7930: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
7940: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
7950: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
7960: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
7970: 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64  text(handle, ind
7980: 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20  ex, b, b.Length 
7990: 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31  - 1, (IntPtr)(-1
79a0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
79b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
79c0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
79d0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
79e0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
79f0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
7a00: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
7a10: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
7a20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7a30: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
7a40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
7a50: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
7a60: 69 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c  id Bind_Blob(SQL
7a70: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
7a80: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
7a90: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
7aa0: 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74 65 5b  int index, byte[
7ab0: 5d 20 62 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20  ] blobData)..   
7ac0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
7ad0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
7ae0: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
7af0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
7b00: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
7b10: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
7b20: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
7b30: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
7b40: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
7b50: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
7b60: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
7b70: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
7b80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
7b90: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
7ba0: 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 29 3b  ndex, blobData);
7bb0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
7bc0: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  dif....        S
7bd0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
7be0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7bf0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
7c00: 69 6e 64 5f 62 6c 6f 62 28 68 61 6e 64 6c 65 2c  ind_blob(handle,
7c10: 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61   index, blobData
7c20: 2c 20 62 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74  , blobData.Lengt
7c30: 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  h, (IntPtr)(-1))
7c40: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
7c50: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
7c60: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
7c70: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
7c80: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
7c90: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
7ca0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
7cb0: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
7cc0: 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65  Null(SQLiteState
7cd0: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
7ce0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7cf0: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
7d00: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
7d10: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
7d20: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
7d30: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
7d40: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
7d50: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
7d60: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
7d70: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
7d80: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7d90: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
7da0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7db0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
7dc0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7dd0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
7de0: 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  ndle, index);.. 
7df0: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
7e00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
7e10: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
7e20: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7e30: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
7e40: 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65 2c 20 69 6e  _null(handle, in
7e50: 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  dex);..        i
7e60: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
7e70: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
7e80: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
7e90: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
7ea0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
7eb0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
7ec0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42 69   override int Bi
7ed0: 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74 28 53 51  nd_ParamCount(SQ
7ee0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
7ef0: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
7f00: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29  tionFlags flags)
7f10: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
7f20: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
7f30: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
7f40: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
7f50: 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  t;..        int 
7f60: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
7f70: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
7f80: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
7f90: 65 72 5f 63 6f 75 6e 74 28 68 61 6e 64 6c 65 29  er_count(handle)
7fa0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
7fb0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
7fc0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7fd0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
7fe0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7ff0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
8000: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8010: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
8020: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
8030: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8040: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
8050: 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  sage(String.Form
8060: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
8070: 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20       "Statement 
8080: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 63 6f 75  {0} paramter cou
8090: 6e 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20 20  nt is {1}.",..  
80a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
80b0: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c 75  ndleIntPtr, valu
80c0: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e));..        }.
80d0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
80e0: 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d  n value;..    }.
80f0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
8100: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
8110: 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28 53  Bind_ParamName(S
8120: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
8130: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
8140: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
8150: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
8160: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
8170: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
8180: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
8190: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
81a0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
81b0: 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  ame;....#if !SQL
81c0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
81d0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
81e0: 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55          name = U
81f0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
8200: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8210: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
8220: 61 6d 65 74 65 72 5f 6e 61 6d 65 5f 69 6e 74 65  ameter_name_inte
8230: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
8240: 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e  x, out len), len
8250: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
8260: 20 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f     name = UTF8To
8270: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
8280: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8290: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
82a0: 72 5f 6e 61 6d 65 28 68 61 6e 64 6c 65 2c 20 69  r_name(handle, i
82b0: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
82c0: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  dif....        i
82d0: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
82e0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
82f0: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
8300: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
8310: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
8320: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8330: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
8340: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
8350: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
8360: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
8370: 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f  essage(String.Fo
8380: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
8390: 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e         "Statemen
83a0: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
83b0: 7b 31 7d 20 6e 61 6d 65 20 69 73 20 7b 7b 7b 32  {1} name is {{{2
83c0: 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  }}}.",..        
83d0: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
83e0: 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 6e 61 6d  tPtr, index, nam
83f0: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e));..        }.
8400: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
8410: 6e 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a  n name;..    }..
8420: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
8430: 76 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64  verride int Bind
8440: 5f 50 61 72 61 6d 49 6e 64 65 78 28 53 51 4c 69  _ParamIndex(SQLi
8450: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
8460: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
8470: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 73  onFlags flags, s
8480: 74 72 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65 29  tring paramName)
8490: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
84a0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
84b0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
84c0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
84d0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  t;..        int 
84e0: 69 6e 64 65 78 20 3d 20 55 6e 73 61 66 65 4e 61  index = UnsafeNa
84f0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
8500: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
8510: 65 72 5f 69 6e 64 65 78 28 68 61 6e 64 6c 65 2c  er_index(handle,
8520: 20 54 6f 55 54 46 38 28 70 61 72 61 6d 4e 61 6d   ToUTF8(paramNam
8530: 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e));....        
8540: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
8550: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
8560: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
8570: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
8580: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
8590: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
85a0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
85b0: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
85c0: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
85d0: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
85e0: 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46  Message(String.F
85f0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
8600: 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65          "Stateme
8610: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
8620: 69 6e 64 65 78 20 6f 66 20 6e 61 6d 65 20 7b 7b  index of name {{
8630: 7b 31 7d 7d 7d 20 69 73 20 23 7b 32 7d 2e 22 2c  {1}}} is #{2}.",
8640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8650: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
8660: 70 61 72 61 6d 4e 61 6d 65 2c 20 69 6e 64 65 78  paramName, index
8670: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
8680: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
8690: 20 69 6e 64 65 78 3b 0d 0a 20 20 20 20 7d 0d 0a   index;..    }..
86a0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
86b0: 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75  verride int Colu
86c0: 6d 6e 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74  mnCount(SQLiteSt
86d0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20  atement stmt).. 
86e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
86f0: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
8700: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
8710: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73 74 6d 74  olumn_count(stmt
8720: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
8730: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
8740: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
8750: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d  string ColumnNam
8760: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
8770: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
8780: 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
8790: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
87a0: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
87b0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
87c0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
87d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
87e0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
87f0: 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  me_interop(stmt.
8800: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
8810: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  dex, out len), l
8820: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
8830: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
8840: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
8850: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8860: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73  e3_column_name(s
8870: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8880: 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a  , index), -1);..
8890: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
88a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
88b0: 65 72 72 69 64 65 20 54 79 70 65 41 66 66 69 6e  erride TypeAffin
88c0: 69 74 79 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  ity ColumnAffini
88d0: 74 79 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ty(SQLiteStateme
88e0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
88f0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
8900: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
8910: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8920: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  ite3_column_type
8930: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
8940: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
8950: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
8960: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
8970: 6e 67 20 43 6f 6c 75 6d 6e 54 79 70 65 28 53 51  ng ColumnType(SQ
8980: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
8990: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 6f  mt, int index, o
89a0: 75 74 20 54 79 70 65 41 66 66 69 6e 69 74 79 20  ut TypeAffinity 
89b0: 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20  nAffinity)..    
89c0: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  {..      int len
89d0: 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ;..#if !SQLITE_S
89e0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 49  TANDARD..      I
89f0: 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65  ntPtr p = Unsafe
8a00: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
8a10: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
8a20: 6c 74 79 70 65 5f 69 6e 74 65 72 6f 70 28 73 74  ltype_interop(st
8a30: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
8a40: 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29   index, out len)
8a50: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
8a60: 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20  len = -1;..     
8a70: 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61   IntPtr p = Unsa
8a80: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8a90: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
8aa0: 65 63 6c 74 79 70 65 28 73 74 6d 74 2e 5f 73 71  ecltype(stmt._sq
8ab0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
8ac0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
8ad0: 20 20 6e 41 66 66 69 6e 69 74 79 20 3d 20 43 6f    nAffinity = Co
8ae0: 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d  lumnAffinity(stm
8af0: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20  t, index);....  
8b00: 20 20 20 20 69 66 20 28 70 20 21 3d 20 49 6e 74      if (p != Int
8b10: 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e  Ptr.Zero) return
8b20: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c   UTF8ToString(p,
8b30: 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 65 6c   len);..      el
8b40: 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  se..      {..   
8b50: 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72       string[] ar
8b60: 20 3d 20 73 74 6d 74 2e 54 79 70 65 44 65 66 69   = stmt.TypeDefi
8b70: 6e 69 74 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20  nitions;..      
8b80: 20 20 69 66 20 28 61 72 20 21 3d 20 6e 75 6c 6c    if (ar != null
8b90: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
8ba0: 20 20 20 20 20 20 20 20 69 66 20 28 69 6e 64 65          if (inde
8bb0: 78 20 3c 20 61 72 2e 4c 65 6e 67 74 68 20 26 26  x < ar.Length &&
8bc0: 20 61 72 5b 69 6e 64 65 78 5d 20 21 3d 20 6e 75   ar[index] != nu
8bd0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
8be0: 20 72 65 74 75 72 6e 20 61 72 5b 69 6e 64 65 78   return ar[index
8bf0: 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  ];..        }.. 
8c00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
8c10: 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20  ring.Empty;.... 
8c20: 20 20 20 20 20 20 20 2f 2f 73 77 69 74 63 68 20         //switch 
8c30: 28 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20  (nAffinity)..   
8c40: 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20       //{..      
8c50: 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41    //  case TypeA
8c60: 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a  ffinity.Int64:..
8c70: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65          //    re
8c80: 74 75 72 6e 20 22 42 49 47 49 4e 54 22 3b 0d 0a  turn "BIGINT";..
8c90: 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65          //  case
8ca0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f   TypeAffinity.Do
8cb0: 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 2f  uble:..        /
8cc0: 2f 20 20 20 20 72 65 74 75 72 6e 20 22 44 4f 55  /    return "DOU
8cd0: 42 4c 45 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f  BLE";..        /
8ce0: 2f 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69  /  case TypeAffi
8cf0: 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20  nity.Blob:..    
8d00: 20 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e      //    return
8d10: 20 22 42 4c 4f 42 22 3b 0d 0a 20 20 20 20 20 20   "BLOB";..      
8d20: 20 20 2f 2f 20 20 64 65 66 61 75 6c 74 3a 0d 0a    //  default:..
8d30: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65          //    re
8d40: 74 75 72 6e 20 22 54 45 58 54 22 3b 0d 0a 20 20  turn "TEXT";..  
8d50: 20 20 20 20 20 20 2f 2f 7d 0d 0a 20 20 20 20 20        //}..     
8d60: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
8d70: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
8d80: 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64  de int ColumnInd
8d90: 65 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ex(SQLiteStateme
8da0: 6e 74 20 73 74 6d 74 2c 20 73 74 72 69 6e 67 20  nt stmt, string 
8db0: 63 6f 6c 75 6d 6e 4e 61 6d 65 29 0d 0a 20 20 20  columnName)..   
8dc0: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 78 20   {..      int x 
8dd0: 3d 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74  = ColumnCount(st
8de0: 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f  mt);....      fo
8df0: 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20  r (int n = 0; n 
8e00: 3c 20 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20  < x; n++)..     
8e10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
8e20: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 63  String.Compare(c
8e30: 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 43 6f 6c 75 6d  olumnName, Colum
8e40: 6e 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 2c 20  nName(stmt, n), 
8e50: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
8e60: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
8e70: 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  se) == 0)..     
8e80: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a       return n;..
8e90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 72        }..      r
8ea0: 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20 7d  eturn -1;..    }
8eb0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
8ec0: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
8ed0: 20 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e   ColumnOriginalN
8ee0: 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
8ef0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
8f00: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
8f10: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
8f20: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
8f30: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
8f40: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
8f50: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8f60: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
8f70: 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65  origin_name_inte
8f80: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
8f90: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
8fa0: 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  t len), len);..#
8fb0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
8fc0: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
8fd0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8fe0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
8ff0: 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 73  mn_origin_name(s
9000: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
9010: 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a  , index), -1);..
9020: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
9030: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
9040: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f  erride string Co
9050: 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65  lumnDatabaseName
9060: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
9070: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
9080: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
9090: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
90a0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
90b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
90c0: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
90d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
90e0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
90f0: 61 62 61 73 65 5f 6e 61 6d 65 5f 69 6e 74 65 72  abase_name_inter
9100: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
9110: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74  stmt, index, out
9120: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
9130: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
9140: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
9150: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9160: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
9170: 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 28  n_database_name(
9180: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
9190: 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  t, index), -1);.
91a0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
91b0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
91c0: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
91d0: 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 53  olumnTableName(S
91e0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
91f0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
9200: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
9210: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
9220: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20      int len;..  
9230: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
9240: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
9250: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9260: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65  te3_column_table
9270: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74  _name_interop(st
9280: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
9290: 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29   index, out len)
92a0: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
92b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
92c0: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
92d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
92e0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
92f0: 6c 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71  le_name(stmt._sq
9300: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
9310: 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  ), -1);..#endif.
9320: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
9330: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
9340: 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d 65 74 61 44  void ColumnMetaD
9350: 61 74 61 28 73 74 72 69 6e 67 20 64 61 74 61 42  ata(string dataB
9360: 61 73 65 2c 20 73 74 72 69 6e 67 20 74 61 62 6c  ase, string tabl
9370: 65 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e  e, string column
9380: 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 64 61 74  , out string dat
9390: 61 54 79 70 65 2c 20 6f 75 74 20 73 74 72 69 6e  aType, out strin
93a0: 67 20 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63  g collateSequenc
93b0: 65 2c 20 6f 75 74 20 62 6f 6f 6c 20 6e 6f 74 4e  e, out bool notN
93c0: 75 6c 6c 2c 20 6f 75 74 20 62 6f 6f 6c 20 70 72  ull, out bool pr
93d0: 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20 62 6f  imaryKey, out bo
93e0: 6f 6c 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74  ol autoIncrement
93f0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9400: 49 6e 74 50 74 72 20 64 61 74 61 54 79 70 65 50  IntPtr dataTypeP
9410: 74 72 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  tr;..      IntPt
9420: 72 20 63 6f 6c 6c 53 65 71 50 74 72 3b 0d 0a 20  r collSeqPtr;.. 
9430: 20 20 20 20 20 69 6e 74 20 6e 6e 6f 74 4e 75 6c       int nnotNul
9440: 6c 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 70  l;..      int np
9450: 72 69 6d 61 72 79 4b 65 79 3b 0d 0a 20 20 20 20  rimaryKey;..    
9460: 20 20 69 6e 74 20 6e 61 75 74 6f 49 6e 63 3b 0d    int nautoInc;.
9470: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
9480: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20  orCode n;..     
9490: 20 69 6e 74 20 64 74 4c 65 6e 3b 0d 0a 20 20 20   int dtLen;..   
94a0: 20 20 20 69 6e 74 20 63 73 4c 65 6e 3b 0d 0a 0d     int csLen;...
94b0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
94c0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d  NDARD..      n =
94d0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
94e0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62  hods.sqlite3_tab
94f0: 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
9500: 74 61 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c  ta_interop(_sql,
9510: 20 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65   ToUTF8(dataBase
9520: 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29  ), ToUTF8(table)
9530: 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29  , ToUTF8(column)
9540: 2c 20 6f 75 74 20 64 61 74 61 54 79 70 65 50 74  , out dataTypePt
9550: 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71 50 74  r, out collSeqPt
9560: 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c  r, out nnotNull,
9570: 20 6f 75 74 20 6e 70 72 69 6d 61 72 79 4b 65 79   out nprimaryKey
9580: 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e 63 2c 20  , out nautoInc, 
9590: 6f 75 74 20 64 74 4c 65 6e 2c 20 6f 75 74 20 63  out dtLen, out c
95a0: 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  sLen);..#else.. 
95b0: 20 20 20 20 20 64 74 4c 65 6e 20 3d 20 2d 31 3b       dtLen = -1;
95c0: 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e 20 3d 20  ..      csLen = 
95d0: 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 20 3d  -1;....      n =
95e0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
95f0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62  hods.sqlite3_tab
9600: 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
9610: 74 61 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  ta(_sql, ToUTF8(
9620: 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46  dataBase), ToUTF
9630: 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38  8(table), ToUTF8
9640: 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 64 61  (column), out da
9650: 74 61 54 79 70 65 50 74 72 2c 20 6f 75 74 20 63  taTypePtr, out c
9660: 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75 74 20 6e  ollSeqPtr, out n
9670: 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e 70 72  notNull, out npr
9680: 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20 6e 61  imaryKey, out na
9690: 75 74 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64 69 66  utoInc);..#endif
96a0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
96b0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
96c0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
96d0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
96e0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
96f0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 64 61 74 61  );....      data
9700: 54 79 70 65 20 3d 20 55 54 46 38 54 6f 53 74 72  Type = UTF8ToStr
9710: 69 6e 67 28 64 61 74 61 54 79 70 65 50 74 72 2c  ing(dataTypePtr,
9720: 20 64 74 4c 65 6e 29 3b 0d 0a 20 20 20 20 20 20   dtLen);..      
9730: 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 20  collateSequence 
9740: 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63  = UTF8ToString(c
9750: 6f 6c 6c 53 65 71 50 74 72 2c 20 63 73 4c 65 6e  ollSeqPtr, csLen
9760: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6f 74 4e  );....      notN
9770: 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75 6c 6c 20  ull = (nnotNull 
9780: 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 70 72  == 1);..      pr
9790: 69 6d 61 72 79 4b 65 79 20 3d 20 28 6e 70 72 69  imaryKey = (npri
97a0: 6d 61 72 79 4b 65 79 20 3d 3d 20 31 29 3b 0d 0a  maryKey == 1);..
97b0: 20 20 20 20 20 20 61 75 74 6f 49 6e 63 72 65 6d        autoIncrem
97c0: 65 6e 74 20 3d 20 28 6e 61 75 74 6f 49 6e 63 20  ent = (nautoInc 
97d0: 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  == 1);..    }...
97e0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
97f0: 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65  erride double Ge
9800: 74 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74  tDouble(SQLiteSt
9810: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
9820: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
9830: 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61  .      double va
9840: 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46  lue;..#if !PLATF
9850: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
9860: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75  WORK..      valu
9870: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
9880: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9890: 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 74  column_double(st
98a0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
98b0: 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 73 65 0d   index);..#else.
98c0: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
98d0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
98e0: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  e3_column_double
98f0: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
9900: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
9910: 78 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a  x, out value);..
9920: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65  #endif..      re
9930: 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20  turn value;..   
9940: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
9950: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 62 79 74  al override sbyt
9960: 65 20 47 65 74 53 42 79 74 65 28 53 51 4c 69 74  e GetSByte(SQLit
9970: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
9980: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
9990: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
99a0: 20 75 6e 63 68 65 63 6b 65 64 28 28 73 62 79 74   unchecked((sbyt
99b0: 65 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74  e)(GetInt32(stmt
99c0: 2c 20 69 6e 64 65 78 29 20 26 20 62 79 74 65 2e  , index) & byte.
99d0: 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20  MaxValue));..   
99e0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
99f0: 61 6c 20 6f 76 65 72 72 69 64 65 20 62 79 74 65  al override byte
9a00: 20 47 65 74 42 79 74 65 28 53 51 4c 69 74 65 53   GetByte(SQLiteS
9a10: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
9a20: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
9a30: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75  ..      return u
9a40: 6e 63 68 65 63 6b 65 64 28 28 62 79 74 65 29 28  nchecked((byte)(
9a50: 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69  GetInt32(stmt, i
9a60: 6e 64 65 78 29 20 26 20 62 79 74 65 2e 4d 61 78  ndex) & byte.Max
9a70: 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d  Value));..    }.
9a80: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
9a90: 6f 76 65 72 72 69 64 65 20 73 68 6f 72 74 20 47  override short G
9aa0: 65 74 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74  etInt16(SQLiteSt
9ab0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
9ac0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
9ad0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e  .      return un
9ae0: 63 68 65 63 6b 65 64 28 28 73 68 6f 72 74 29 28  checked((short)(
9af0: 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69  GetInt32(stmt, i
9b00: 6e 64 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d  ndex) & ushort.M
9b10: 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  axValue));..    
9b20: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
9b30: 6c 20 6f 76 65 72 72 69 64 65 20 75 73 68 6f 72  l override ushor
9b40: 74 20 47 65 74 55 49 6e 74 31 36 28 53 51 4c 69  t GetUInt16(SQLi
9b50: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
9b60: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
9b70: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
9b80: 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75 73 68  n unchecked((ush
9b90: 6f 72 74 29 28 47 65 74 49 6e 74 33 32 28 73 74  ort)(GetInt32(st
9ba0: 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 75 73 68  mt, index) & ush
9bb0: 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d  ort.MaxValue));.
9bc0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
9bd0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
9be0: 69 6e 74 20 47 65 74 49 6e 74 33 32 28 53 51 4c  int GetInt32(SQL
9bf0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
9c00: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
9c10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
9c20: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
9c30: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
9c40: 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f  olumn_int(stmt._
9c50: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
9c60: 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ex);..    }.... 
9c70: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
9c80: 72 69 64 65 20 75 69 6e 74 20 47 65 74 55 49 6e  ride uint GetUIn
9c90: 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t32(SQLiteStatem
9ca0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
9cb0: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
9cc0: 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63     return unchec
9cd0: 6b 65 64 28 28 75 69 6e 74 29 47 65 74 49 6e 74  ked((uint)GetInt
9ce0: 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  32(stmt, index))
9cf0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9d00: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
9d10: 65 20 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34 28  e long GetInt64(
9d20: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
9d30: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
9d40: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 6c  ..    {..      l
9d50: 6f 6e 67 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20  ong value;..#if 
9d60: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
9d70: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
9d80: 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65    value = Unsafe
9d90: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9da0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
9db0: 36 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  64(stmt._sqlite_
9dc0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23  stmt, index);..#
9dd0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61  else..      Unsa
9de0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9df0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
9e00: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d  nt64_interop(stm
9e10: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
9e20: 69 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c 75 65  index, out value
9e30: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
9e40: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
9e50: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
9e60: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
9e70: 75 6c 6f 6e 67 20 47 65 74 55 49 6e 74 36 34 28  ulong GetUInt64(
9e80: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
9e90: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
9ea0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
9eb0: 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28  eturn unchecked(
9ec0: 28 75 6c 6f 6e 67 29 47 65 74 49 6e 74 36 34 28  (ulong)GetInt64(
9ed0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
9ee0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
9ef0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
9f00: 74 72 69 6e 67 20 47 65 74 54 65 78 74 28 53 51  tring GetText(SQ
9f10: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
9f20: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
9f30: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
9f40: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
9f50: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
9f60: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
9f70: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
9f80: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9f90: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69  e3_column_text_i
9fa0: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
9fb0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
9fc0: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
9fd0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
9fe0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
9ff0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
a000: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
a010: 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e  olumn_text(stmt.
a020: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
a030: 64 65 78 29 2c 0d 0a 20 20 20 20 20 20 20 20 55  dex),..        U
a040: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
a050: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
a060: 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71  n_bytes(stmt._sq
a070: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
a080: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
a090: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
a0a0: 61 6c 20 6f 76 65 72 72 69 64 65 20 44 61 74 65  al override Date
a0b0: 54 69 6d 65 20 47 65 74 44 61 74 65 54 69 6d 65  Time GetDateTime
a0c0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
a0d0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
a0e0: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
a0f0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
a100: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
a110: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44        return ToD
a120: 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61  ateTime(UnsafeNa
a130: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a140: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f  te3_column_text_
a150: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
a160: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
a170: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
a180: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
a190: 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
a1a0: 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e(UnsafeNativeMe
a1b0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
a1c0: 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f  lumn_text(stmt._
a1d0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
a1e0: 65 78 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e  ex),..        Un
a1f0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a200: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
a210: 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c  _bytes(stmt._sql
a220: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
a230: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
a240: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
a250: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
a260: 47 65 74 42 79 74 65 73 28 53 51 4c 69 74 65 53  GetBytes(SQLiteS
a270: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
a280: 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44  nt index, int nD
a290: 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65 5b  ataOffset, byte[
a2a0: 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74  ] bDest, int nSt
a2b0: 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68  art, int nLength
a2c0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
a2d0: 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66  int nlen = Unsaf
a2e0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a2f0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
a300: 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  tes(stmt._sqlite
a310: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
a320: 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f  ..      // If no
a330: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66   destination buf
a340: 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20  fer, return the 
a350: 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20  size needed...  
a360: 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d      if (bDest ==
a370: 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c   null) return nl
a380: 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74  en;....      int
a390: 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67   nCopied = nLeng
a3a0: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  th;....      if 
a3b0: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72  (nCopied + nStar
a3c0: 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  t > bDest.Length
a3d0: 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73  ) nCopied = bDes
a3e0: 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72  t.Length - nStar
a3f0: 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  t;..      if (nC
a400: 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66  opied + nDataOff
a410: 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70  set > nlen) nCop
a420: 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61  ied = nlen - nDa
a430: 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20  taOffset;....   
a440: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e     if (nCopied >
a450: 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20   0)..      {..  
a460: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72        IntPtr ptr
a470: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
a480: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
a490: 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74 6d 74 2e  olumn_blob(stmt.
a4a0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
a4b0: 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex);....       
a4c0: 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28 49   Marshal.Copy((I
a4d0: 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e 74  ntPtr)(ptr.ToInt
a4e0: 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66 73  64() + nDataOffs
a4f0: 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74 61  et), bDest, nSta
a500: 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20  rt, nCopied);.. 
a510: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c       }..      el
a520: 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  se..      {..   
a530: 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20 30       nCopied = 0
a540: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
a550: 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69      return nCopi
a560: 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ed;..    }....  
a570: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
a580: 69 64 65 20 6c 6f 6e 67 20 47 65 74 43 68 61 72  ide long GetChar
a590: 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  s(SQLiteStatemen
a5a0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
a5b0: 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73  x, int nDataOffs
a5c0: 65 74 2c 20 63 68 61 72 5b 5d 20 62 44 65 73 74  et, char[] bDest
a5d0: 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e  , int nStart, in
a5e0: 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20  t nLength)..    
a5f0: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65  {..      int nle
a600: 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43  n;..      int nC
a610: 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b  opied = nLength;
a620: 0d 0a 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67  ....      string
a630: 20 73 74 72 20 3d 20 47 65 74 54 65 78 74 28 73   str = GetText(s
a640: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
a650: 20 20 20 20 6e 6c 65 6e 20 3d 20 73 74 72 2e 4c      nlen = str.L
a660: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
a670: 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c  if (bDest == nul
a680: 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d  l) return nlen;.
a690: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
a6a0: 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20  pied + nStart > 
a6b0: 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43  bDest.Length) nC
a6c0: 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65  opied = bDest.Le
a6d0: 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a  ngth - nStart;..
a6e0: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
a6f0: 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20  d + nDataOffset 
a700: 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20  > nlen) nCopied 
a710: 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66  = nlen - nDataOf
a720: 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  fset;....      i
a730: 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d  f (nCopied > 0).
a740: 0a 20 20 20 20 20 20 20 20 73 74 72 2e 43 6f 70  .        str.Cop
a750: 79 54 6f 28 6e 44 61 74 61 4f 66 66 73 65 74 2c  yTo(nDataOffset,
a760: 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20   bDest, nStart, 
a770: 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20  nCopied);..     
a780: 20 65 6c 73 65 20 6e 43 6f 70 69 65 64 20 3d 20   else nCopied = 
a790: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  0;....      retu
a7a0: 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20  rn nCopied;..   
a7b0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
a7c0: 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
a7d0: 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74   IsNull(SQLiteSt
a7e0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
a7f0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
a800: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 43  .      return (C
a810: 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74  olumnAffinity(st
a820: 6d 74 2c 20 69 6e 64 65 78 29 20 3d 3d 20 54 79  mt, index) == Ty
a830: 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29  peAffinity.Null)
a840: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
a850: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
a860: 65 20 69 6e 74 20 41 67 67 72 65 67 61 74 65 43  e int AggregateC
a870: 6f 75 6e 74 28 49 6e 74 50 74 72 20 63 6f 6e 74  ount(IntPtr cont
a880: 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ext)..    {..   
a890: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
a8a0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
a8b0: 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f  lite3_aggregate_
a8c0: 63 6f 75 6e 74 28 63 6f 6e 74 65 78 74 29 3b 0d  count(context);.
a8d0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
a8e0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
a8f0: 76 6f 69 64 20 43 72 65 61 74 65 46 75 6e 63 74  void CreateFunct
a900: 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 46 75  ion(string strFu
a910: 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e 41 72 67  nction, int nArg
a920: 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c  s, bool needColl
a930: 53 65 71 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62  Seq, SQLiteCallb
a940: 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c 69 74 65  ack func, SQLite
a950: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 73 74 65  Callback funcste
a960: 70 2c 20 53 51 4c 69 74 65 46 69 6e 61 6c 43 61  p, SQLiteFinalCa
a970: 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e 61 6c  llback funcfinal
a980: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
a990: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
a9a0: 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  n;....#if !SQLIT
a9b0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
a9c0: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
a9d0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
a9e0: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
a9f0: 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  n_interop(_sql, 
aa00: 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
aa10: 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49  on), nArgs, 4, I
aa20: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
aa30: 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
aa40: 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c  final, (needColl
aa50: 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31  Seq == true) ? 1
aa60: 20 3a 20 30 29 3b 0d 0a 20 20 20 20 20 20 69 66   : 0);..      if
aa70: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
aa80: 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55  orCode.Ok) n = U
aa90: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
aaa0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
aab0: 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72  e_function_inter
aac0: 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  op(_sql, ToUTF8(
aad0: 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41  strFunction), nA
aae0: 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a  rgs, 1, IntPtr.Z
aaf0: 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ero, func, funcs
ab00: 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20  tep, funcfinal, 
ab10: 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20  (needCollSeq == 
ab20: 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d  true) ? 1 : 0);.
ab30: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20  .#else..      n 
ab40: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
ab50: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
ab60: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73  eate_function(_s
ab70: 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75  ql, ToUTF8(strFu
ab80: 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20  nction), nArgs, 
ab90: 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  4, IntPtr.Zero, 
aba0: 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20  func, funcstep, 
abb0: 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 20  funcfinal);..   
abc0: 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
abd0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
abe0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
abf0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
ac00: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
ac10: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
ac20: 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73  Function), nArgs
ac30: 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 1, IntPtr.Zero
ac40: 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70  , func, funcstep
ac50: 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23  , funcfinal);..#
ac60: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20  endif..      if 
ac70: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
ac80: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
ac90: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
aca0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
acb0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
acc0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
acd0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 72 65  verride void Cre
ace0: 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72  ateCollation(str
acf0: 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e  ing strCollation
ad00: 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f  , SQLiteCollatio
ad10: 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f  n func, SQLiteCo
ad20: 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36 29 0d  llation func16).
ad30: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
ad40: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
ad50: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
ad60: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
ad70: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f  eate_collation(_
ad80: 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43  sql, ToUTF8(strC
ad90: 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c 20 49 6e  ollation), 2, In
ada0: 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 31  tPtr.Zero, func1
adb0: 36 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  6);..      if (n
adc0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
add0: 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61  ode.Ok) n = Unsa
ade0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
adf0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
ae00: 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54  ollation(_sql, T
ae10: 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69  oUTF8(strCollati
ae20: 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a  on), 1, IntPtr.Z
ae30: 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20 20 20  ero, func);..   
ae40: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
ae50: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
ae60: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
ae70: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
ae80: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
ae90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
aea0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
aeb0: 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65  t ContextCollate
aec0: 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f  Compare(Collatio
aed0: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e  nEncodingEnum en
aee0: 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  c, IntPtr contex
aef0: 74 2c 20 73 74 72 69 6e 67 20 73 31 2c 20 73 74  t, string s1, st
af00: 72 69 6e 67 20 73 32 29 0d 0a 20 20 20 20 7b 0d  ring s2)..    {.
af10: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
af20: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74  NDARD..      byt
af30: 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62  e[] b1;..      b
af40: 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20  yte[] b2;..     
af50: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
af60: 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20  oding converter 
af70: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
af80: 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20   switch (enc).. 
af90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
afa0: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
afb0: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a  codingEnum.UTF8:
afc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
afd0: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
afe0: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46  ext.Encoding.UTF
aff0: 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  8;..          br
b000: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  eak;..        ca
b010: 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
b020: 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45  dingEnum.UTF16LE
b030: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
b040: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
b050: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e  Text.Encoding.Un
b060: 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20  icode;..        
b070: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
b080: 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
b090: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
b0a0: 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20  16BE:..         
b0b0: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
b0c0: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
b0d0: 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f  g.BigEndianUnico
b0e0: 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  de;..          b
b0f0: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  reak;..      }..
b100: 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e  ..      b1 = con
b110: 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28  verter.GetBytes(
b120: 73 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d  s1);..      b2 =
b130: 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79   converter.GetBy
b140: 74 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20 20 20  tes(s2);....    
b150: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
b160: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
b170: 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c  ite3_context_col
b180: 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70  lcompare_interop
b190: 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62 31  (context, b1, b1
b1a0: 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e  .Length, b2, b2.
b1b0: 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d  Length);..#else.
b1c0: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
b1d0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
b1e0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
b1f0: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
b200: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
b210: 69 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74 43  ide int ContextC
b220: 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f  ollateCompare(Co
b230: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
b240: 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20  num enc, IntPtr 
b250: 63 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b 5d 20  context, char[] 
b260: 63 31 2c 20 63 68 61 72 5b 5d 20 63 32 29 0d 0a  c1, char[] c2)..
b270: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
b280: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
b290: 20 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20     byte[] b1;.. 
b2a0: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d       byte[] b2;.
b2b0: 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 65  .      System.Te
b2c0: 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76  xt.Encoding conv
b2d0: 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  erter = null;...
b2e0: 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28 65  .      switch (e
b2f0: 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  nc)..      {..  
b300: 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61        case Colla
b310: 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
b320: 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20 20  .UTF8:..        
b330: 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
b340: 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
b350: 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20  ng.UTF8;..      
b360: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
b370: 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
b380: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
b390: 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20  TF16LE:..       
b3a0: 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
b3b0: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
b3c0: 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20  ing.Unicode;..  
b3d0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
b3e0: 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c          case Col
b3f0: 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
b400: 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20 20  um.UTF16BE:..   
b410: 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72         converter
b420: 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45   = System.Text.E
b430: 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69 61  ncoding.BigEndia
b440: 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20  nUnicode;..     
b450: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
b460: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31     }....      b1
b470: 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74   = converter.Get
b480: 42 79 74 65 73 28 63 31 29 3b 0d 0a 20 20 20 20  Bytes(c1);..    
b490: 20 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65 72    b2 = converter
b4a0: 2e 47 65 74 42 79 74 65 73 28 63 32 29 3b 0d 0a  .GetBytes(c2);..
b4b0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
b4c0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b4d0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ds.sqlite3_conte
b4e0: 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69  xt_collcompare_i
b4f0: 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20  nterop(context, 
b500: 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62  b1, b1.Length, b
b510: 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a  2, b2.Length);..
b520: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
b530: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
b540: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
b550: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
b560: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
b570: 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c 61 74   override Collat
b580: 69 6f 6e 53 65 71 75 65 6e 63 65 20 47 65 74 43  ionSequence GetC
b590: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
b5a0: 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20  (SQLiteFunction 
b5b0: 66 75 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e  func, IntPtr con
b5c0: 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  text)..    {..#i
b5d0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
b5e0: 52 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c 61 74  RD..      Collat
b5f0: 69 6f 6e 53 65 71 75 65 6e 63 65 20 73 65 71 20  ionSequence seq 
b600: 3d 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f 6e 53  = new CollationS
b610: 65 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20 20 20  equence();..    
b620: 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20    int len;..    
b630: 20 20 69 6e 74 20 74 79 70 65 3b 0d 0a 20 20 20    int type;..   
b640: 20 20 20 69 6e 74 20 65 6e 63 3b 0d 0a 20 20 20     int enc;..   
b650: 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
b660: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
b670: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  s.sqlite3_contex
b680: 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74 65 72 6f  t_collseq_intero
b690: 70 28 63 6f 6e 74 65 78 74 2c 20 6f 75 74 20 74  p(context, out t
b6a0: 79 70 65 2c 20 6f 75 74 20 65 6e 63 2c 20 6f 75  ype, out enc, ou
b6b0: 74 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  t len);....     
b6c0: 20 69 66 20 28 70 20 21 3d 20 6e 75 6c 6c 29 20   if (p != null) 
b6d0: 73 65 71 2e 4e 61 6d 65 20 3d 20 55 54 46 38 54  seq.Name = UTF8T
b6e0: 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b  oString(p, len);
b6f0: 0d 0a 20 20 20 20 20 20 73 65 71 2e 54 79 70 65  ..      seq.Type
b700: 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 54 79 70   = (CollationTyp
b710: 65 45 6e 75 6d 29 74 79 70 65 3b 0d 0a 20 20 20  eEnum)type;..   
b720: 20 20 20 73 65 71 2e 5f 66 75 6e 63 20 3d 20 66     seq._func = f
b730: 75 6e 63 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e  unc;..      seq.
b740: 45 6e 63 6f 64 69 6e 67 20 3d 20 28 43 6f 6c 6c  Encoding = (Coll
b750: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
b760: 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20 20 20 20 20  m)enc;....      
b770: 72 65 74 75 72 6e 20 73 65 71 3b 0d 0a 23 65 6c  return seq;..#el
b780: 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
b790: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
b7a0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
b7b0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
b7c0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b7d0: 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50  erride long GetP
b7e0: 61 72 61 6d 56 61 6c 75 65 42 79 74 65 73 28 49  aramValueBytes(I
b7f0: 6e 74 50 74 72 20 70 2c 20 69 6e 74 20 6e 44 61  ntPtr p, int nDa
b800: 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d  taOffset, byte[]
b810: 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61   bDest, int nSta
b820: 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29  rt, int nLength)
b830: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
b840: 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65  nt nlen = Unsafe
b850: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b860: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65  lite3_value_byte
b870: 73 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  s(p);....      /
b880: 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74  / If no destinat
b890: 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75  ion buffer, retu
b8a0: 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64  rn the size need
b8b0: 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62  ed...      if (b
b8c0: 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  Dest == null) re
b8d0: 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20  turn nlen;....  
b8e0: 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20      int nCopied 
b8f0: 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  = nLength;....  
b900: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
b910: 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74  + nStart > bDest
b920: 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64  .Length) nCopied
b930: 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20   = bDest.Length 
b940: 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20  - nStart;..     
b950: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
b960: 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65  DataOffset > nle
b970: 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65  n) nCopied = nle
b980: 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b  n - nDataOffset;
b990: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
b9a0: 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20  opied > 0)..    
b9b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
b9c0: 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65  Ptr ptr = Unsafe
b9d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b9e0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62  lite3_value_blob
b9f0: 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  (p);....        
ba00: 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e  Marshal.Copy((In
ba10: 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e 74 36  tPtr)(ptr.ToInt6
ba20: 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66 73 65  4() + nDataOffse
ba30: 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72  t), bDest, nStar
ba40: 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20  t, nCopied);..  
ba50: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73      }..      els
ba60: 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  e..      {..    
ba70: 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b      nCopied = 0;
ba80: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
ba90: 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65     return nCopie
baa0: 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  d;..    }....   
bab0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
bac0: 64 65 20 64 6f 75 62 6c 65 20 47 65 74 50 61 72  de double GetPar
bad0: 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65 28 49 6e  amValueDouble(In
bae0: 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
baf0: 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76  ..      double v
bb00: 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54  alue;..#if !PLAT
bb10: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
bb20: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c  EWORK..      val
bb30: 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ue = UnsafeNativ
bb40: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
bb50: 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 70 74  _value_double(pt
bb60: 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  r);..#else..    
bb70: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
bb80: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
bb90: 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  lue_double_inter
bba0: 6f 70 28 70 74 72 2c 20 6f 75 74 20 76 61 6c 75  op(ptr, out valu
bbb0: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
bbc0: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b     return value;
bbd0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
bbe0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
bbf0: 20 69 6e 74 20 47 65 74 50 61 72 61 6d 56 61 6c   int GetParamVal
bc00: 75 65 49 6e 74 33 32 28 49 6e 74 50 74 72 20 70  ueInt32(IntPtr p
bc10: 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  tr)..    {..    
bc20: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
bc30: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
bc40: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 70  ite3_value_int(p
bc50: 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
bc60: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
bc70: 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72  ride long GetPar
bc80: 61 6d 56 61 6c 75 65 49 6e 74 36 34 28 49 6e 74  amValueInt64(Int
bc90: 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
bca0: 0a 20 20 20 20 20 20 49 6e 74 36 34 20 76 61 6c  .      Int64 val
bcb0: 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ue;..#if !PLATFO
bcc0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
bcd0: 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65  ORK..      value
bce0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
bcf0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
bd00: 61 6c 75 65 5f 69 6e 74 36 34 28 70 74 72 29 3b  alue_int64(ptr);
bd10: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 55  ..#else..      U
bd20: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
bd30: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
bd40: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 70  _int64_interop(p
bd50: 74 72 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d  tr, out value);.
bd60: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72  .#endif..      r
bd70: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20  eturn value;..  
bd80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
bd90: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
bda0: 69 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ing GetParamValu
bdb0: 65 54 65 78 74 28 49 6e 74 50 74 72 20 70 74 72  eText(IntPtr ptr
bdc0: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
bdd0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
bde0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
bdf0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
be00: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
be10: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
be20: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
be30: 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75  _interop(ptr, ou
be40: 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  t len), len);..#
be50: 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
be60: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
be70: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
be80: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
be90: 65 5f 74 65 78 74 28 70 74 72 29 2c 0d 0a 20 20  e_text(ptr),..  
bea0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
beb0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
bec0: 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 74  3_value_bytes(pt
bed0: 72 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  r));..#endif..  
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 54 79 70  nal override Typ
bf00: 65 41 66 66 69 6e 69 74 79 20 47 65 74 50 61 72  eAffinity GetPar
bf10: 61 6d 56 61 6c 75 65 54 79 70 65 28 49 6e 74 50  amValueType(IntP
bf20: 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a  tr ptr)..    {..
bf30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
bf40: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
bf50: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  .sqlite3_value_t
bf60: 79 70 65 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d  ype(ptr);..    }
bf70: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
bf80: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
bf90: 65 74 75 72 6e 42 6c 6f 62 28 49 6e 74 50 74 72  eturnBlob(IntPtr
bfa0: 20 63 6f 6e 74 65 78 74 2c 20 62 79 74 65 5b 5d   context, byte[]
bfb0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
bfc0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
bfd0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
bfe0: 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 63 6f  3_result_blob(co
bff0: 6e 74 65 78 74 2c 20 76 61 6c 75 65 2c 20 76 61  ntext, value, va
c000: 6c 75 65 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74  lue.Length, (Int
c010: 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20  Ptr)(-1));..    
c020: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
c030: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
c040: 52 65 74 75 72 6e 44 6f 75 62 6c 65 28 49 6e 74  ReturnDouble(Int
c050: 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 64 6f 75  Ptr context, dou
c060: 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ble value)..    
c070: 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
c080: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
c090: 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  K..      UnsafeN
c0a0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
c0b0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62  ite3_result_doub
c0c0: 6c 65 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75  le(context, valu
c0d0: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
c0e0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
c0f0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
c100: 73 75 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  sult_double_inte
c110: 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66  rop(context, ref
c120: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
c130: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
c140: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
c150: 20 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72 6f   void ReturnErro
c160: 72 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  r(IntPtr context
c170: 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d  , string value).
c180: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
c190: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
c1a0: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
c1b0: 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20  _error(context, 
c1c0: 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20 76  ToUTF8(value), v
c1d0: 61 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20  alue.Length);.. 
c1e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
c1f0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
c200: 69 64 20 52 65 74 75 72 6e 49 6e 74 33 32 28 49  id ReturnInt32(I
c210: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69  ntPtr context, i
c220: 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  nt value)..    {
c230: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
c240: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
c250: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63  te3_result_int(c
c260: 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d  ontext, value);.
c270: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
c280: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
c290: 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36 34  void ReturnInt64
c2a0: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
c2b0: 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20   long value)..  
c2c0: 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
c2d0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
c2e0: 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  ORK..      Unsaf
c2f0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
c300: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
c310: 74 36 34 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c  t64(context, val
c320: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
c330: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
c340: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
c350: 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65  esult_int64_inte
c360: 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66  rop(context, ref
c370: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
c380: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
c390: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
c3a0: 20 76 6f 69 64 20 52 65 74 75 72 6e 4e 75 6c 6c   void ReturnNull
c3b0: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29  (IntPtr context)
c3c0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
c3d0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
c3e0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
c3f0: 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b  t_null(context);
c400: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
c410: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
c420: 20 76 6f 69 64 20 52 65 74 75 72 6e 54 65 78 74   void ReturnText
c430: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
c440: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a   string value)..
c450: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 62 79 74      {..      byt
c460: 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76  e[] b = ToUTF8(v
c470: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 55 6e  alue);..      Un
c480: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
c490: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
c4a0: 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 54  _text(context, T
c4b0: 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20 62 2e  oUTF8(value), b.
c4c0: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74  Length - 1, (Int
c4d0: 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20  Ptr)(-1));..    
c4e0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
c4f0: 6c 20 6f 76 65 72 72 69 64 65 20 49 6e 74 50 74  l override IntPt
c500: 72 20 41 67 67 72 65 67 61 74 65 43 6f 6e 74 65  r AggregateConte
c510: 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  xt(IntPtr contex
c520: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
c530: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
c540: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
c550: 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f  te3_aggregate_co
c560: 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 31  ntext(context, 1
c570: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
c580: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
c590: 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20      /// Enables 
c5a0: 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65  or disabled exte
c5b0: 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e 67 20 62 79  nsion loading by
c5c0: 20 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 2f 2f   SQLite...    //
c5d0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
c5e0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
c5f0: 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20  e="bOnOff">..   
c600: 20 2f 2f 2f 20 54 72 75 65 20 74 6f 20 65 6e 61   /// True to ena
c610: 62 6c 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65  ble loading of e
c620: 78 74 65 6e 73 69 6f 6e 73 2c 20 66 61 6c 73 65  xtensions, false
c630: 20 74 6f 20 64 69 73 61 62 6c 65 2e 0d 0a 20 20   to disable...  
c640: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
c650: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
c660: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 4c 6f  rride void SetLo
c670: 61 64 45 78 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c  adExtension(bool
c680: 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d   bOnOff)..    {.
c690: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
c6a0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
c6b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c6c0: 2e 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f  .sqlite3_enable_
c6d0: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d  load_extension(.
c6e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71  .            _sq
c6f0: 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20  l, (bOnOff ? -1 
c700: 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  : 0));....      
c710: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
c720: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
c730: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
c740: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
c750: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
c760: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
c770: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
c780: 2f 20 4c 6f 61 64 73 20 61 20 53 51 4c 69 74 65  / Loads a SQLite
c790: 20 65 78 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61   extension libra
c7a0: 72 79 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65  ry from the name
c7b0: 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f  d file...    ///
c7c0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
c7d0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
c7e0: 3d 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20  ="fileName">..  
c7f0: 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f    /// The name o
c800: 66 20 74 68 65 20 64 79 6e 61 6d 69 63 20 6c 69  f the dynamic li
c810: 6e 6b 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20  nk library file 
c820: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65  containing the e
c830: 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f  xtension...    /
c840: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
c850: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
c860: 3d 22 70 72 6f 63 4e 61 6d 65 22 3e 0d 0a 20 20  ="procName">..  
c870: 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f    /// The name o
c880: 66 20 74 68 65 20 65 78 70 6f 72 74 65 64 20 66  f the exported f
c890: 75 6e 63 74 69 6f 6e 20 75 73 65 64 20 74 6f 20  unction used to 
c8a0: 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 65  initialize the e
c8b0: 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f  xtension...    /
c8c0: 2f 2f 20 49 66 20 6e 75 6c 6c 2c 20 74 68 65 20  // If null, the 
c8d0: 64 65 66 61 75 6c 74 20 22 73 71 6c 69 74 65 33  default "sqlite3
c8e0: 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 22  _extension_init"
c8f0: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a   will be used...
c900: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
c910: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
c920: 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 61  verride void Loa
c930: 64 45 78 74 65 6e 73 69 6f 6e 28 73 74 72 69 6e  dExtension(strin
c940: 67 20 66 69 6c 65 4e 61 6d 65 2c 20 73 74 72 69  g fileName, stri
c950: 6e 67 20 70 72 6f 63 4e 61 6d 65 29 0d 0a 20 20  ng procName)..  
c960: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
c970: 28 66 69 6c 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c  (fileName == nul
c980: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
c990: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
c9a0: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
c9b0: 22 66 69 6c 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a  "fileName");....
c9c0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
c9d0: 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a  Error = IntPtr.Z
c9e0: 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
c9f0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
ca00: 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
ca10: 5b 5d 20 75 74 66 38 46 69 6c 65 4e 61 6d 65 20  [] utf8FileName 
ca20: 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55  = UTF8Encoding.U
ca30: 54 46 38 2e 47 65 74 42 79 74 65 73 28 66 69 6c  TF8.GetBytes(fil
ca40: 65 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a  eName + '\0');..
ca50: 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
ca60: 5b 5d 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20  [] utf8ProcName 
ca70: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
ca80: 20 20 20 20 20 20 20 69 66 20 28 70 72 6f 63 4e         if (procN
ca90: 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame != null)..  
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 74                ut
cab0: 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20 55 54 46  f8ProcName = UTF
cac0: 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47  8Encoding.UTF8.G
cad0: 65 74 42 79 74 65 73 28 70 72 6f 63 4e 61 6d 65  etBytes(procName
cae0: 20 2b 20 27 5c 30 27 29 3b 0d 0a 0d 0a 20 20 20   + '\0');....   
caf0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
cb00: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
cb10: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
cb20: 2e 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78  .sqlite3_load_ex
cb30: 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  tension(..      
cb40: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20            _sql, 
cb50: 75 74 66 38 46 69 6c 65 4e 61 6d 65 2c 20 75 74  utf8FileName, ut
cb60: 66 38 50 72 6f 63 4e 61 6d 65 2c 20 72 65 66 20  f8ProcName, ref 
cb70: 70 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  pError);....    
cb80: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
cb90: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
cba0: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
cbb0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
cbc0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
cbd0: 6e 2c 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  n, UTF8ToString(
cbe0: 70 45 72 72 6f 72 2c 20 2d 31 29 29 3b 0d 0a 20  pError, -1));.. 
cbf0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
cc00: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
cc10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
cc20: 20 20 69 66 20 28 70 45 72 72 6f 72 20 21 3d 20    if (pError != 
cc30: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
cc40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73               Uns
cc60: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
cc70: 2e 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 45  .sqlite3_free(pE
cc80: 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
cc90: 20 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d          pError =
cca0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
ccb0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
ccc0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
ccd0: 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65  ..    /// Enable
cce0: 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78  s or disabled ex
ccf0: 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f  tended result co
cd00: 64 65 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  des returned by 
cd10: 53 51 4c 69 74 65 0d 0a 20 20 20 20 69 6e 74 65  SQLite..    inte
cd20: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
cd30: 69 64 20 53 65 74 45 78 74 65 6e 64 65 64 52 65  id SetExtendedRe
cd40: 73 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62  sultCodes(bool b
cd50: 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20  OnOff)..    {.. 
cd60: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
cd70: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
cd80: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
cd90: 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65  ite3_extended_re
cda0: 73 75 6c 74 5f 63 6f 64 65 73 28 0d 0a 20 20 20  sult_codes(..   
cdb0: 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f         _sql, (bO
cdc0: 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b  nOff ? -1 : 0));
cdd0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  ....      if (n 
cde0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
cdf0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
ce00: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
ce10: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
ce20: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  ());..    }..   
ce30: 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61   /// Gets the la
ce40: 73 74 20 53 51 4c 69 74 65 20 65 72 72 6f 72 20  st SQLite error 
ce50: 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e  code..    intern
ce60: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
ce70: 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73 75  teErrorCode Resu
ce80: 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d  ltCode()..    {.
ce90: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
cea0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
ceb0: 73 2e 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  s.sqlite3_errcod
cec0: 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d  e(_sql);..    }.
ced0: 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68  .    /// Gets th
cee0: 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65 78  e last SQLite ex
cef0: 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64  tended error cod
cf00: 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  e..    internal 
cf10: 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
cf20: 72 72 6f 72 43 6f 64 65 20 45 78 74 65 6e 64 65  rrorCode Extende
cf30: 64 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20  dResultCode().. 
cf40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
cf50: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
cf60: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
cf70: 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28  xtended_errcode(
cf80: 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  _sql);..    }...
cf90: 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c  .    /// Add a l
cfa0: 6f 67 20 6d 65 73 73 61 67 65 20 76 69 61 20 74  og message via t
cfb0: 68 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65  he SQLite sqlite
cfc0: 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e  3_log interface.
cfd0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
cfe0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 67  verride void Log
cff0: 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65 45 72  Message(SQLiteEr
d000: 72 6f 72 43 6f 64 65 20 69 45 72 72 43 6f 64 65  rorCode iErrCode
d010: 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67  , string zMessag
d020: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
d030: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d040: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 67  hods.sqlite3_log
d050: 28 69 45 72 72 43 6f 64 65 2c 20 54 6f 55 54 46  (iErrCode, ToUTF
d060: 38 28 7a 4d 65 73 73 61 67 65 29 29 3b 0d 0a 20  8(zMessage));.. 
d070: 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45     }....#if INTE
d080: 52 4f 50 5f 43 4f 44 45 43 0d 0a 20 20 20 20 69  ROP_CODEC..    i
d090: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
d0a0: 20 76 6f 69 64 20 53 65 74 50 61 73 73 77 6f 72   void SetPasswor
d0b0: 64 28 62 79 74 65 5b 5d 20 70 61 73 73 77 6f 72  d(byte[] passwor
d0c0: 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a  dBytes)..    {..
d0d0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
d0e0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
d0f0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d100: 6c 69 74 65 33 5f 6b 65 79 28 5f 73 71 6c 2c 20  lite3_key(_sql, 
d110: 70 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20 70  passwordBytes, p
d120: 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e  asswordBytes.Len
d130: 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  gth);..      if 
d140: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
d150: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
d160: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
d170: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
d180: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
d190: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
d1a0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 68 61  verride void Cha
d1b0: 6e 67 65 50 61 73 73 77 6f 72 64 28 62 79 74 65  ngePassword(byte
d1c0: 5b 5d 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79  [] newPasswordBy
d1d0: 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tes)..    {..   
d1e0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
d1f0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
d200: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d210: 65 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c 20 6e  e3_rekey(_sql, n
d220: 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2c  ewPasswordBytes,
d230: 20 28 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74   (newPasswordByt
d240: 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30 20  es == null) ? 0 
d250: 3a 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74  : newPasswordByt
d260: 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20  es.Length);..   
d270: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
d280: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
d290: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
d2a0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
d2b0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
d2c0: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
d2d0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d2e0: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 55 70  rride void SetUp
d2f0: 64 61 74 65 48 6f 6f 6b 28 53 51 4c 69 74 65 55  dateHook(SQLiteU
d300: 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 66 75  pdateCallback fu
d310: 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nc)..    {..    
d320: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
d330: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 75 70  thods.sqlite3_up
d340: 64 61 74 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20  date_hook(_sql, 
d350: 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
d360: 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
d370: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
d380: 69 64 65 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d  ide void SetComm
d390: 69 74 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d  itHook(SQLiteCom
d3a0: 6d 69 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  mitCallback func
d3b0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
d3c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d3d0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 6d  ods.sqlite3_comm
d3e0: 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75  it_hook(_sql, fu
d3f0: 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
d400: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
d410: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
d420: 65 20 76 6f 69 64 20 53 65 74 54 72 61 63 65 43  e void SetTraceC
d430: 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 54 72  allback(SQLiteTr
d440: 61 63 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  aceCallback func
d450: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
d460: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d470: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 72 61 63  ods.sqlite3_trac
d480: 65 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e  e(_sql, func, In
d490: 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
d4a0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
d4b0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
d4c0: 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b   SetRollbackHook
d4d0: 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63 6b 43  (SQLiteRollbackC
d4e0: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
d4f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
d500: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
d510: 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b  sqlite3_rollback
d520: 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63  _hook(_sql, func
d530: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
d540: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
d550: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
d560: 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74 68 65 20   /// Allows the 
d570: 73 65 74 74 69 6e 67 20 6f 66 20 61 20 6c 6f 67  setting of a log
d580: 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 6e  ging callback in
d590: 76 6f 6b 65 64 20 62 79 20 53 51 4c 69 74 65 20  voked by SQLite 
d5a0: 77 68 65 6e 20 61 0d 0a 20 20 20 20 2f 2f 2f 20  when a..    /// 
d5b0: 6c 6f 67 20 65 76 65 6e 74 20 6f 63 63 75 72 73  log event occurs
d5c0: 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20 63 61 6c 6c  .  Only one call
d5d0: 62 61 63 6b 20 6d 61 79 20 62 65 20 73 65 74 2e  back may be set.
d5e0: 20 20 49 66 20 4e 55 4c 4c 20 69 73 20 70 61 73    If NULL is pas
d5f0: 73 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74 68  sed,..    /// th
d600: 65 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61  e logging callba
d610: 63 6b 20 69 73 20 75 6e 72 65 67 69 73 74 65 72  ck is unregister
d620: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ed...    /// </s
d630: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
d640: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75   <param name="fu
d650: 6e 63 22 3e 54 68 65 20 63 61 6c 6c 62 61 63 6b  nc">The callback
d660: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76   function to inv
d670: 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  oke.</param>..  
d680: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
d690: 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74 20  eturns a result 
d6a0: 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  code</returns>..
d6b0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d6c0: 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
d6d0: 72 43 6f 64 65 20 53 65 74 4c 6f 67 43 61 6c 6c  rCode SetLogCall
d6e0: 62 61 63 6b 28 53 51 4c 69 74 65 4c 6f 67 43 61  back(SQLiteLogCa
d6f0: 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
d700: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
d710: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
d720: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
d730: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
d740: 6e 66 69 67 5f 6c 6f 67 28 0d 0a 20 20 20 20 20  nfig_log(..     
d750: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
d760: 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54  figOpsEnum.SQLIT
d770: 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 66 75  E_CONFIG_LOG, fu
d780: 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
d790: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
d7a0: 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a  urn rc;..    }..
d7b0: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
d7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d810: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
d820: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
d830: 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 20 6e 65  /// Creates a ne
d840: 77 20 53 51 4c 69 74 65 20 62 61 63 6b 75 70 20  w SQLite backup 
d850: 6f 62 6a 65 63 74 20 62 61 73 65 64 20 6f 6e 20  object based on 
d860: 74 68 65 20 70 72 6f 76 69 64 65 64 20 64 65 73  the provided des
d870: 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f  tination..    //
d880: 2f 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  / database conne
d890: 63 74 69 6f 6e 2e 20 20 54 68 65 20 73 6f 75 72  ction.  The sour
d8a0: 63 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ce database conn
d8b0: 65 63 74 69 6f 6e 20 69 73 20 74 68 65 20 6f 6e  ection is the on
d8c0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63  e..    /// assoc
d8d0: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
d8e0: 6f 62 6a 65 63 74 2e 20 20 54 68 65 20 73 6f 75  object.  The sou
d8f0: 72 63 65 20 61 6e 64 20 64 65 73 74 69 6e 61 74  rce and destinat
d900: 69 6f 6e 20 64 61 74 61 62 61 73 65 0d 0a 20 20  ion database..  
d910: 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e    /// connection
d920: 73 20 63 61 6e 6e 6f 74 20 62 65 20 74 68 65 20  s cannot be the 
d930: 73 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  same...    /// <
d940: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
d950: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
d960: 64 65 73 74 43 6e 6e 22 3e 54 68 65 20 64 65 73  destCnn">The des
d970: 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73  tination databas
d980: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70  e connection.</p
d990: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
d9a0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74  param name="dest
d9b0: 4e 61 6d 65 22 3e 54 68 65 20 64 65 73 74 69 6e  Name">The destin
d9c0: 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 6e  ation database n
d9d0: 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ame.</param>..  
d9e0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
d9f0: 65 3d 22 73 6f 75 72 63 65 4e 61 6d 65 22 3e 54  e="sourceName">T
da00: 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
da10: 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e  se name.</param>
da20: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
da30: 6e 73 3e 54 68 65 20 6e 65 77 6c 79 20 63 72 65  ns>The newly cre
da40: 61 74 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65  ated backup obje
da50: 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ct.</returns>.. 
da60: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
da70: 72 69 64 65 20 53 51 4c 69 74 65 42 61 63 6b 75  ride SQLiteBacku
da80: 70 20 49 6e 69 74 69 61 6c 69 7a 65 42 61 63 6b  p InitializeBack
da90: 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  up(..        SQL
daa0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 64 65  iteConnection de
dab0: 73 74 43 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20  stCnn,..        
dac0: 73 74 72 69 6e 67 20 64 65 73 74 4e 61 6d 65 2c  string destName,
dad0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
dae0: 20 73 6f 75 72 63 65 4e 61 6d 65 0d 0a 20 20 20   sourceName..   
daf0: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
db00: 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74 43         if (destC
db10: 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nn == null)..   
db20: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
db30: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
db40: 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74 43 6e  xception("destCn
db50: 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n");....        
db60: 69 66 20 28 64 65 73 74 4e 61 6d 65 20 3d 3d 20  if (destName == 
db70: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
db80: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
db90: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
dba0: 6f 6e 28 22 64 65 73 74 4e 61 6d 65 22 29 3b 0d  on("destName");.
dbb0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73  ...        if (s
dbc0: 6f 75 72 63 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c  ourceName == nul
dbd0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
dbe0: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
dbf0: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
dc00: 22 73 6f 75 72 63 65 4e 61 6d 65 22 29 3b 0d 0a  "sourceName");..
dc10: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
dc20: 33 20 64 65 73 74 53 71 6c 69 74 65 33 20 3d 20  3 destSqlite3 = 
dc30: 64 65 73 74 43 6e 6e 2e 5f 73 71 6c 20 61 73 20  destCnn._sql as 
dc40: 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a 20 20 20 20  SQLite3;....    
dc50: 20 20 20 20 69 66 20 28 64 65 73 74 53 71 6c 69      if (destSqli
dc60: 74 65 33 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  te3 == null)..  
dc70: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
dc80: 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65  new ArgumentExce
dc90: 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
dca0: 20 20 20 20 20 20 20 20 22 44 65 73 74 69 6e 61          "Destina
dcb0: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
dcc0: 68 61 73 20 6e 6f 20 77 72 61 70 70 65 72 2e 22  has no wrapper."
dcd0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
dce0: 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a     "destCnn");..
dcf0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
dd00: 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
dd10: 20 64 65 73 74 48 61 6e 64 6c 65 20 3d 20 64 65   destHandle = de
dd20: 73 74 53 71 6c 69 74 65 33 2e 5f 73 71 6c 3b 0d  stSqlite3._sql;.
dd30: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  ...        if (d
dd40: 65 73 74 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  estHandle == nul
dd50: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
dd60: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
dd70: 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  ntException(..  
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
dd90: 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65  estination conne
dda0: 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76  ction has an inv
ddb0: 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 2c 0d 0a  alid handle.",..
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddd0: 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20  "destCnn");.... 
dde0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
ddf0: 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 73 6f  nectionHandle so
de00: 75 72 63 65 48 61 6e 64 6c 65 20 3d 20 5f 73 71  urceHandle = _sq
de10: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  l;....        if
de20: 20 28 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d   (sourceHandle =
de30: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
de40: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
de50: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
de60: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
de70: 20 20 20 20 20 20 20 20 20 20 20 22 53 6f 75 72             "Sour
de80: 63 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ce connection ha
de90: 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
dea0: 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
deb0: 20 20 20 62 79 74 65 5b 5d 20 7a 44 65 73 74 4e     byte[] zDestN
dec0: 61 6d 65 20 3d 20 54 6f 55 54 46 38 28 64 65 73  ame = ToUTF8(des
ded0: 74 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  tName);..       
dee0: 20 62 79 74 65 5b 5d 20 7a 53 6f 75 72 63 65 4e   byte[] zSourceN
def0: 61 6d 65 20 3d 20 54 6f 55 54 46 38 28 73 6f 75  ame = ToUTF8(sou
df00: 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  rceName);....   
df10: 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
df20: 70 48 61 6e 64 6c 65 20 62 61 63 6b 75 70 48 61  pHandle backupHa
df30: 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  ndle = null;....
df40: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
df50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
df60: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
df70: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
df80: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f         finally /
df90: 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41  * NOTE: Thread.A
dfa0: 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f  bort() protectio
dfb0: 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b  n. */..        {
dfc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
dfd0: 74 50 74 72 20 62 61 63 6b 75 70 20 3d 20 55 6e  tPtr backup = Un
dfe0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
dff0: 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
e000: 5f 69 6e 69 74 28 0d 0a 20 20 20 20 20 20 20 20  _init(..        
e010: 20 20 20 20 20 20 20 20 64 65 73 74 48 61 6e 64          destHand
e020: 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73  le, zDestName, s
e030: 6f 75 72 63 65 48 61 6e 64 6c 65 2c 20 7a 53 6f  ourceHandle, zSo
e040: 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  urceName);....  
e050: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 61            if (ba
e060: 63 6b 75 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  ckup == IntPtr.Z
e070: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
e080: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
e090: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
e0a0: 52 65 73 75 6c 74 43 6f 64 65 28 29 2c 20 47 65  ResultCode(), Ge
e0b0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
e0c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61  ..            ba
e0d0: 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77  ckupHandle = new
e0e0: 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
e0f0: 64 6c 65 28 64 65 73 74 48 61 6e 64 6c 65 2c 20  dle(destHandle, 
e100: 62 61 63 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20  backup);..      
e110: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
e120: 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65  eturn new SQLite
e130: 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
e140: 20 20 20 20 20 74 68 69 73 2c 20 62 61 63 6b 75       this, backu
e150: 70 48 61 6e 64 6c 65 2c 20 64 65 73 74 48 61 6e  pHandle, destHan
e160: 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20  dle, zDestName, 
e170: 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 0d 0a 20  sourceHandle,.. 
e180: 20 20 20 20 20 20 20 20 20 20 20 7a 53 6f 75 72             zSour
e190: 63 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d  ceName);..    }.
e1a0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
e1b0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f  ary>..    /// Co
e1c0: 70 69 65 73 20 75 70 20 74 6f 20 4e 20 70 61 67  pies up to N pag
e1d0: 65 73 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72  es from the sour
e1e0: 63 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  ce database to t
e1f0: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a  he destination..
e200: 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
e210: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
e220: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 62   the specified b
e230: 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20  ackup object... 
e240: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
e250: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
e260: 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
e270: 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
e280: 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d  t to use.</param
e290: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
e2a0: 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22 3e 0d  m name="nPage">.
e2b0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d  .    /// The num
e2c0: 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
e2d0: 63 6f 70 79 2c 20 6e 65 67 61 74 69 76 65 20 74  copy, negative t
e2e0: 6f 20 63 6f 70 79 20 61 6c 6c 20 72 65 6d 61 69  o copy all remai
e2f0: 6e 69 6e 67 20 70 61 67 65 73 2e 0d 0a 20 20 20  ning pages...   
e300: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
e310: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
e320: 6d 65 3d 22 72 65 74 72 79 22 3e 0d 0a 20 20 20  me="retry">..   
e330: 20 2f 2f 2f 20 53 65 74 20 74 6f 20 74 72 75 65   /// Set to true
e340: 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f   if the operatio
e350: 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65  n needs to be re
e360: 74 72 69 65 64 20 64 75 65 20 74 6f 20 64 61 74  tried due to dat
e370: 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c  abase..    /// l
e380: 6f 63 6b 69 6e 67 20 69 73 73 75 65 73 3b 20 6f  ocking issues; o
e390: 74 68 65 72 77 69 73 65 2c 20 73 65 74 20 74 6f  therwise, set to
e3a0: 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f   false...    ///
e3b0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
e3c0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
e3d0: 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 74 68    /// True if th
e3e0: 65 72 65 20 61 72 65 20 6d 6f 72 65 20 70 61 67  ere are more pag
e3f0: 65 73 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2c  es to be copied,
e400: 20 66 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65   false otherwise
e410: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
e420: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
e430: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
e440: 6c 20 53 74 65 70 42 61 63 6b 75 70 28 0d 0a 20  l StepBackup(.. 
e450: 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
e460: 6b 75 70 20 62 61 63 6b 75 70 2c 0d 0a 20 20 20  kup backup,..   
e470: 20 20 20 20 20 69 6e 74 20 6e 50 61 67 65 2c 0d       int nPage,.
e480: 0a 20 20 20 20 20 20 20 20 6f 75 74 20 62 6f 6f  .        out boo
e490: 6c 20 72 65 74 72 79 0d 0a 20 20 20 20 20 20 20  l retry..       
e4a0: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
e4b0: 20 20 20 72 65 74 72 79 20 3d 20 66 61 6c 73 65     retry = false
e4c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
e4d0: 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29  (backup == null)
e4e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
e4f0: 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
e500: 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62  NullException("b
e510: 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20  ackup");....    
e520: 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
e530: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
e540: 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62  backup._sqlite_b
e550: 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20  ackup;....      
e560: 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20    if (handle == 
e570: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
e580: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
e590: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
e5a0: 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
e5b0: 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
e5c0: 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
e5d0: 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29  nvalid handle.")
e5e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
e5f0: 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20  Ptr handlePtr = 
e600: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
e610: 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72     if (handlePtr
e620: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
e630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
e640: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
e650: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
e660: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
e670: 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
e680: 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
e690: 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72  d handle pointer
e6a0: 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
e6b0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
e6c0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
e6d0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
e6e0: 62 61 63 6b 75 70 5f 73 74 65 70 28 68 61 6e 64  backup_step(hand
e6f0: 6c 65 50 74 72 2c 20 6e 50 61 67 65 29 3b 0d 0a  lePtr, nPage);..
e700: 20 20 20 20 20 20 20 20 62 61 63 6b 75 70 2e 5f          backup._
e710: 73 74 65 70 52 65 73 75 6c 74 20 3d 20 6e 3b 20  stepResult = n; 
e720: 2f 2a 20 4e 4f 54 45 3a 20 53 61 76 65 20 66 6f  /* NOTE: Save fo
e730: 72 20 75 73 65 20 62 79 20 46 69 6e 69 73 68 42  r use by FinishB
e740: 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20 20 20  ackup. */....   
e750: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
e760: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
e770: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
e780: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
e790: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
e7a0: 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20  }..        else 
e7b0: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
e7c0: 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a  rrorCode.Busy)..
e7d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e7e0: 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74         retry = t
e7f0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
e800: 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
e810: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e820: 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
e830: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
e840: 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20 20 20 20 20  .Locked)..      
e850: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e860: 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a   retry = true;..
e870: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
e880: 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
e890: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
e8a0: 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
e8b0: 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29  eErrorCode.Done)
e8c0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
e8d0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
e8e0: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
e8f0: 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d  }..        else.
e900: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e910: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
e920: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
e930: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
e940: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  r());..        }
e950: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
e960: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
e970: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
e980: 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
e990: 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62  s remaining to b
e9a0: 65 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68  e copied from th
e9b0: 65 20 73 6f 75 72 63 65 0d 0a 20 20 20 20 2f 2f  e source..    //
e9c0: 2f 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  / database to th
e9d0: 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61  e destination da
e9e0: 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65  tabase associate
e9f0: 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  d with the speci
ea00: 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 61  fied..    /// ba
ea10: 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20  ckup object...  
ea20: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
ea30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
ea40: 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54   name="backup">T
ea50: 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
ea60: 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61   to check.</para
ea70: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
ea80: 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20  urns>The number 
ea90: 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69  of pages remaini
eaa0: 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2e  ng to be copied.
eab0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
eac0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
ead0: 65 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e 67 42  e int RemainingB
eae0: 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
eaf0: 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63  SQLiteBackup bac
eb00: 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  kup..        )..
eb10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
eb20: 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c  f (backup == nul
eb30: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
eb40: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
eb50: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
eb60: 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20  "backup");....  
eb70: 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
eb80: 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  upHandle handle 
eb90: 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65  = backup._sqlite
eba0: 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20  _backup;....    
ebb0: 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d      if (handle =
ebc0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
ebd0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
ebe0: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
ebf0: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
ec00: 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
ec10: 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
ec20: 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
ec30: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49  ");....        I
ec40: 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20  ntPtr handlePtr 
ec50: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
ec60: 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50       if (handleP
ec70: 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tr == IntPtr.Zer
ec80: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
ec90: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
eca0: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
ecb0: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
ecc0: 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
ecd0: 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
ece0: 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74  lid handle point
ecf0: 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  er.");....      
ed00: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
ed10: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
ed20: 69 74 65 33 5f 62 61 63 6b 75 70 5f 72 65 6d 61  ite3_backup_rema
ed30: 69 6e 69 6e 67 28 68 61 6e 64 6c 65 50 74 72 29  ining(handlePtr)
ed40: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
ed50: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
ed60: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
ed70: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
ed80: 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
ed90: 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
eda0: 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
edb0: 2f 2f 2f 20 77 69 74 68 20 74 68 65 20 73 70 65  /// with the spe
edc0: 63 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62  cified backup ob
edd0: 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
ede0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
edf0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
ee00: 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b  backup">The back
ee10: 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65  up object to che
ee20: 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ck.</param>..   
ee30: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
ee40: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
ee50: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73  f pages in the s
ee60: 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 2e 3c  ource database.<
ee70: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
ee80: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
ee90: 20 69 6e 74 20 50 61 67 65 43 6f 75 6e 74 42 61   int PageCountBa
eea0: 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53  ckup(..        S
eeb0: 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b  QLiteBackup back
eec0: 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  up..        ).. 
eed0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
eee0: 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c   (backup == null
eef0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
ef00: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
ef10: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
ef20: 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20  backup");....   
ef30: 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
ef40: 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  pHandle handle =
ef50: 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f   backup._sqlite_
ef60: 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20  backup;....     
ef70: 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d     if (handle ==
ef80: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
ef90: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
efa0: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
efb0: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
efc0: 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
efd0: 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
efe0: 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
eff0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
f000: 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d  tPtr handlePtr =
f010: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
f020: 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74      if (handlePt
f030: 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r == IntPtr.Zero
f040: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
f050: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
f060: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
f070: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
f080: 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
f090: 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
f0a0: 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65  id handle pointe
f0b0: 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r.");....       
f0c0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
f0d0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f0e0: 74 65 33 5f 62 61 63 6b 75 70 5f 70 61 67 65 63  te3_backup_pagec
f0f0: 6f 75 6e 74 28 68 61 6e 64 6c 65 50 74 72 29 3b  ount(handlePtr);
f100: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
f110: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
f120: 20 20 2f 2f 2f 20 44 65 73 74 72 6f 79 73 20 74    /// Destroys t
f130: 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
f140: 2c 20 72 6f 6c 6c 69 6e 67 20 62 61 63 6b 20 61  , rolling back a
f150: 6e 79 20 62 61 63 6b 75 70 20 74 68 61 74 20 6d  ny backup that m
f160: 61 79 20 62 65 20 69 6e 0d 0a 20 20 20 20 2f 2f  ay be in..    //
f170: 2f 20 70 72 6f 67 65 73 73 2e 0d 0a 20 20 20 20  / progess...    
f180: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
f190: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
f1a0: 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65  ame="backup">The
f1b0: 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74   backup object t
f1c0: 6f 20 64 65 73 74 72 6f 79 2e 3c 2f 70 61 72 61  o destroy.</para
f1d0: 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
f1e0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 46   override void F
f1f0: 69 6e 69 73 68 42 61 63 6b 75 70 28 0d 0a 20 20  inishBackup(..  
f200: 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
f210: 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20  up backup..     
f220: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
f230: 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
f240: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
f250: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
f260: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
f270: 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b  ption("backup");
f280: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
f290: 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68  teBackupHandle h
f2a0: 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f  andle = backup._
f2b0: 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a  sqlite_backup;..
f2c0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
f2d0: 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
f2e0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
f2f0: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
f300: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
f310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f320: 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
f330: 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
f340: 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20  andle.");....   
f350: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
f360: 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  lePtr = handle;.
f370: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
f380: 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50  andlePtr == IntP
f390: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
f3a0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
f3b0: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
f3c0: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
f3d0: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
f3e0: 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
f3f0: 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
f400: 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a   pointer.");....
f410: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
f420: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51  DARD..        SQ
f430: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
f440: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
f450: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
f460: 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65  ckup_finish_inte
f470: 72 6f 70 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d  rop(handlePtr);.
f480: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
f490: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
f4a0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
f4b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
f4c0: 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 68 61  backup_finish(ha
f4d0: 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6e 64 69  ndlePtr);..#endi
f4e0: 66 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c  f..        handl
f4f0: 65 2e 53 65 74 48 61 6e 64 6c 65 41 73 49 6e 76  e.SetHandleAsInv
f500: 61 6c 69 64 28 29 3b 0d 0a 0d 0a 23 69 66 20 43  alid();....#if C
f510: 4f 55 4e 54 5f 48 41 4e 44 4c 45 0d 0a 20 20 20  OUNT_HANDLE..   
f520: 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53       if ((n == S
f530: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
f540: 6b 29 20 7c 7c 20 28 6e 20 3d 3d 20 62 61 63 6b  k) || (n == back
f550: 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29  up._stepResult))
f560: 20 68 61 6e 64 6c 65 2e 57 61 73 52 65 6c 65 61   handle.WasRelea
f570: 73 65 64 4f 6b 28 29 3b 0d 0a 23 65 6e 64 69 66  sedOk();..#endif
f580: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
f590: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
f5a0: 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6e 20  rCode.Ok) && (n 
f5b0: 21 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52  != backup._stepR
f5c0: 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20  esult))..       
f5d0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
f5e0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
f5f0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
f600: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
f610: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
f620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f670: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
f680: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44  mary>..    /// D
f690: 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65  etermines if the
f6a0: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
f6b0: 72 61 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e  rary has been in
f6c0: 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68  itialized for th
f6d0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65  e..    /// curre
f6e0: 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20  nt process...   
f6f0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
f700: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
f710: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f  s>..    /// A bo
f720: 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67  olean indicating
f730: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
f740: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
f750: 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e  library has been
f760: 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61  ..    /// initia
f770: 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75  lized for the cu
f780: 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a  rrent process...
f790: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
f7a0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
f7b0: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49   override bool I
f7c0: 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a  sInitialized()..
f7d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
f7e0: 65 74 75 72 6e 20 53 74 61 74 69 63 49 73 49 6e  eturn StaticIsIn
f7f0: 69 74 69 61 6c 69 7a 65 64 28 29 3b 0d 0a 20 20  itialized();..  
f800: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
f810: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
f820: 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20  / Determines if 
f830: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
f840: 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e  library has been
f850: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72   initialized for
f860: 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75   the..    /// cu
f870: 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a  rrent process...
f880: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
f890: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
f8a0: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  urns>..    /// A
f8b0: 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74   boolean indicat
f8c0: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
f8d0: 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ot the SQLite co
f8e0: 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
f8f0: 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69  een..    /// ini
f900: 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65  tialized for the
f910: 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
f920: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
f930: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
f940: 6e 61 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  nal static bool 
f950: 53 74 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69  StaticIsInitiali
f960: 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  zed()..    {..  
f970: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
f980: 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 50 72 65    // BUGFIX: Pre
f990: 76 65 6e 74 20 72 61 63 65 73 20 77 69 74 68 20  vent races with 
f9a0: 6f 74 68 65 72 20 74 68 72 65 61 64 73 20 66 6f  other threads fo
f9b0: 72 20 74 68 69 73 20 65 6e 74 69 72 65 20 62 6c  r this entire bl
f9c0: 6f 63 6b 2c 20 64 75 65 0d 0a 20 20 20 20 20 20  ock, due..      
f9d0: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 74 6f 20    //         to 
f9e0: 74 68 65 20 74 72 79 2f 66 69 6e 61 6c 6c 79 20  the try/finally 
f9f0: 73 65 6d 61 6e 74 69 63 73 2e 20 20 53 65 65 20  semantics.  See 
fa00: 74 69 63 6b 65 74 20 5b 37 32 39 30 35 63 39 61  ticket [72905c9a
fa10: 37 37 5d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  77]...        //
fa20: 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28  ..        lock (
fa30: 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20  syncRoot)..     
fa40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
fa50: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
fa60: 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 61 76 65 20    // NOTE: Save 
fa70: 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  the state of the
fa80: 20 6c 6f 67 67 69 6e 67 20 63 6c 61 73 73 20 61   logging class a
fa90: 6e 64 20 74 68 65 6e 20 72 65 73 74 6f 72 65 20  nd then restore 
faa0: 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  it..            
fab0: 2f 2f 20 20 20 20 20 20 20 61 66 74 65 72 20 77  //       after w
fac0: 65 20 61 72 65 20 64 6f 6e 65 20 74 6f 20 61 76  e are done to av
fad0: 6f 69 64 20 6c 6f 67 67 69 6e 67 20 74 6f 6f 20  oid logging too 
fae0: 6d 61 6e 79 20 66 61 6c 73 65 20 65 72 72 6f 72  many false error
faf0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
fb00: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
fb10: 62 6f 6f 6c 20 73 61 76 65 64 45 6e 61 62 6c 65  bool savedEnable
fb20: 64 20 3d 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e  d = SQLiteLog.En
fb30: 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  abled;..        
fb40: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e      SQLiteLog.En
fb50: 61 62 6c 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a  abled = false;..
fb60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
fb70: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
fb80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fb90: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
fba0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
fbb0: 68 69 73 20 6d 65 74 68 6f 64 20 5b 61 62 5d 75  his method [ab]u
fbc0: 73 65 73 20 74 68 65 20 66 61 63 74 20 74 68 61  ses the fact tha
fbd0: 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c  t SQLite will al
fbe0: 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ways..          
fbf0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72        //       r
fc00: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
fc10: 4f 52 20 66 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f  OR for any unkno
fc20: 77 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  wn configuration
fc30: 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20   option..       
fc40: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
fc50: 20 20 2a 75 6e 6c 65 73 73 2a 20 74 68 65 20 53    *unless* the S
fc60: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 68 61  QLite library ha
fc70: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69  s already been i
fc80: 6e 69 74 69 61 6c 69 7a 65 64 2e 0d 0a 20 20 20  nitialized...   
fc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
fca0: 20 20 20 20 20 20 49 6e 20 74 68 61 74 20 63 61        In that ca
fcb0: 73 65 20 69 74 20 77 69 6c 6c 20 61 6c 77 61 79  se it will alway
fcc0: 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  s return SQLITE_
fcd0: 4d 49 53 55 53 45 2e 0d 0a 20 20 20 20 20 20 20  MISUSE...       
fce0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
fcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
fd00: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
fd10: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
fd20: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
fd30: 6e 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20 20 20 20  nfig_none(..    
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd50: 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
fd60: 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
fd70: 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20 20 20 20  G_NONE);....    
fd80: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
fd90: 72 6e 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  rn (rc == SQLite
fda0: 45 72 72 6f 72 43 6f 64 65 2e 4d 69 73 75 73 65  ErrorCode.Misuse
fdb0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
fdc0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  }..            f
fdd0: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
fde0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
fdf0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
fe00: 2e 45 6e 61 62 6c 65 64 20 3d 20 73 61 76 65 64  .Enabled = saved
fe10: 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20  Enabled;..      
fe20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
fe30: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
fe40: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
fe50: 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20 66      /// Helper f
fe60: 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74 72 69  unction to retri
fe70: 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20  eve a column of 
fe80: 64 61 74 61 20 66 72 6f 6d 20 61 6e 20 61 63 74  data from an act
fe90: 69 76 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a  ive statement...
fea0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
feb0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
fec0: 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54  am name="stmt">T
fed0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
fee0: 6e 67 20 73 74 65 70 28 29 27 64 20 74 68 72 6f  ng step()'d thro
fef0: 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ugh</param>..   
ff00: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
ff10: 3d 22 66 6c 61 67 73 22 3e 54 68 65 20 66 6c 61  ="flags">The fla
ff20: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
ff30: 74 68 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  th the connectio
ff40: 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
ff50: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
ff60: 22 69 6e 64 65 78 22 3e 54 68 65 20 63 6f 6c 75  "index">The colu
ff70: 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72 65 74 72  mn index to retr
ff80: 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ieve</param>..  
ff90: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
ffa0: 65 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65  e="typ">The type
ffb0: 20 6f 66 20 64 61 74 61 20 63 6f 6e 74 61 69 6e   of data contain
ffc0: 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  ed in the column
ffd0: 2e 20 20 49 66 20 55 6e 69 6e 69 74 69 61 6c 69  .  If Uninitiali
ffe0: 7a 65 64 2c 20 74 68 69 73 20 66 75 6e 63 74 69  zed, this functi
fff0: 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69 65 76 65  on will retrieve
10000 20 74 68 65 20 64 61 74 61 74 79 70 65 20 69 6e   the datatype in
10010 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61 72 61  formation.</para
10020 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
10030 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 74 68 65  urns>Returns the
10040 20 64 61 74 61 20 69 6e 20 74 68 65 20 63 6f 6c   data in the col
10050 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  umn</returns>.. 
10060 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
10070 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56  ride object GetV
10080 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61 74 65  alue(SQLiteState
10090 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
100a0 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
100b0 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
100c0 78 2c 20 53 51 4c 69 74 65 54 79 70 65 20 74 79  x, SQLiteType ty
100d0 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  p)..    {..     
100e0 20 69 66 20 28 49 73 4e 75 6c 6c 28 73 74 6d 74   if (IsNull(stmt
100f0 2c 20 69 6e 64 65 78 29 29 20 72 65 74 75 72 6e  , index)) return
10100 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a   DBNull.Value;..
10110 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
10120 74 79 20 61 66 66 20 3d 20 74 79 70 2e 41 66 66  ty aff = typ.Aff
10130 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 54 79  inity;..      Ty
10140 70 65 20 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  pe t = null;....
10150 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79        if (typ.Ty
10160 70 65 20 21 3d 20 44 62 54 79 70 65 2e 4f 62 6a  pe != DbType.Obj
10170 65 63 74 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ect)..      {.. 
10180 20 20 20 20 20 20 20 74 20 3d 20 53 51 4c 69 74         t = SQLit
10190 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65 54  eConvert.SQLiteT
101a0 79 70 65 54 6f 54 79 70 65 28 74 79 70 29 3b 0d  ypeToType(typ);.
101b0 0a 20 20 20 20 20 20 20 20 61 66 66 20 3d 20 54  .        aff = T
101c0 79 70 65 54 6f 41 66 66 69 6e 69 74 79 28 74 29  ypeToAffinity(t)
101d0 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
101e0 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
101f0 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
10200 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73 54  nFlags.GetAllAsT
10210 65 78 74 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ext) == SQLiteCo
10220 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65  nnectionFlags.Ge
10230 74 41 6c 6c 41 73 54 65 78 74 29 0d 0a 20 20 20  tAllAsText)..   
10240 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
10250 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65  tText(stmt, inde
10260 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69  x);....      swi
10270 74 63 68 20 28 61 66 66 29 0d 0a 20 20 20 20 20  tch (aff)..     
10280 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65   {..        case
10290 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c   TypeAffinity.Bl
102a0 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ob:..          i
102b0 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44  f (typ.Type == D
102c0 62 54 79 70 65 2e 47 75 69 64 20 26 26 20 74 79  bType.Guid && ty
102d0 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54 79  p.Affinity == Ty
102e0 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74 29  peAffinity.Text)
102f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
10300 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28 47 65  turn new Guid(Ge
10310 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65  tText(stmt, inde
10320 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  x));....        
10330 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29 47    int n = (int)G
10340 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e  etBytes(stmt, in
10350 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c  dex, 0, null, 0,
10360 20 30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   0);..          
10370 62 79 74 65 5b 5d 20 62 20 3d 20 6e 65 77 20 62  byte[] b = new b
10380 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20 20  yte[n];..       
10390 20 20 20 47 65 74 42 79 74 65 73 28 73 74 6d 74     GetBytes(stmt
103a0 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62 2c 20 30  , index, 0, b, 0
103b0 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  , n);....       
103c0 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20     if (typ.Type 
103d0 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20 26  == DbType.Guid &
103e0 26 20 6e 20 3d 3d 20 31 36 29 0d 0a 20 20 20 20  & n == 16)..    
103f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
10400 65 77 20 47 75 69 64 28 62 29 3b 0d 0a 0d 0a 20  ew Guid(b);.... 
10410 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10420 62 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  b;..        case
10430 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61   TypeAffinity.Da
10440 74 65 54 69 6d 65 3a 0d 0a 20 20 20 20 20 20 20  teTime:..       
10450 20 20 20 72 65 74 75 72 6e 20 47 65 74 44 61 74     return GetDat
10460 65 54 69 6d 65 28 73 74 6d 74 2c 20 69 6e 64 65  eTime(stmt, inde
10470 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  x);..        cas
10480 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44  e TypeAffinity.D
10490 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20  ouble:..        
104a0 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29    if (t == null)
104b0 20 72 65 74 75 72 6e 20 47 65 74 44 6f 75 62 6c   return GetDoubl
104c0 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e(stmt, index);.
104d0 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
104e0 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65  n Convert.Change
104f0 54 79 70 65 28 47 65 74 44 6f 75 62 6c 65 28 73  Type(GetDouble(s
10500 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20  tmt, index), t, 
10510 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  null);..        
10520 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
10530 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20  y.Int64:..      
10540 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c      if (t == nul
10550 6c 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74  l) return GetInt
10560 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  64(stmt, index);
10570 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
10580 74 20 3d 3d 20 74 79 70 65 6f 66 28 53 42 79 74  t == typeof(SByt
10590 65 29 29 20 72 65 74 75 72 6e 20 47 65 74 53 42  e)) return GetSB
105a0 79 74 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  yte(stmt, index)
105b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
105c0 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 42 79 74  (t == typeof(Byt
105d0 65 29 29 20 72 65 74 75 72 6e 20 47 65 74 42 79  e)) return GetBy
105e0 74 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te(stmt, index);
105f0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
10600 74 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74 31  t == typeof(Int1
10610 36 29 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e  6)) return GetIn
10620 74 31 36 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t16(stmt, index)
10630 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
10640 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e  (t == typeof(UIn
10650 74 31 36 29 29 20 72 65 74 75 72 6e 20 47 65 74  t16)) return Get
10660 55 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e 64  UInt16(stmt, ind
10670 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
10680 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
10690 49 6e 74 33 32 29 29 20 72 65 74 75 72 6e 20 47  Int32)) return G
106a0 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
106b0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
106c0 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
106d0 28 55 49 6e 74 33 32 29 29 20 72 65 74 75 72 6e  (UInt32)) return
106e0 20 47 65 74 55 49 6e 74 33 32 28 73 74 6d 74 2c   GetUInt32(stmt,
106f0 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
10700 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
10710 65 6f 66 28 55 49 6e 74 36 34 29 29 20 72 65 74  eof(UInt64)) ret
10720 75 72 6e 20 47 65 74 55 49 6e 74 36 34 28 73 74  urn GetUInt64(st
10730 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
10740 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f         return Co
10750 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70 65  nvert.ChangeType
10760 28 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20  (GetInt64(stmt, 
10770 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29  index), t, null)
10780 3b 0d 0a 20 20 20 20 20 20 20 20 64 65 66 61 75  ;..        defau
10790 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  lt:..          r
107a0 65 74 75 72 6e 20 47 65 74 54 65 78 74 28 73 74  eturn GetText(st
107b0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
107c0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
107d0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
107e0 72 69 64 65 20 69 6e 74 20 47 65 74 43 75 72 73  ride int GetCurs
107f0 6f 72 46 6f 72 54 61 62 6c 65 28 53 51 4c 69 74  orForTable(SQLit
10800 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
10810 20 69 6e 74 20 64 62 2c 20 69 6e 74 20 72 6f 6f   int db, int roo
10820 74 50 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 23  tPage)..    {..#
10830 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
10840 41 52 44 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ARD..      retur
10850 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
10860 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61  thods.sqlite3_ta
10870 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65 72  ble_cursor_inter
10880 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
10890 73 74 6d 74 2c 20 64 62 2c 20 72 6f 6f 74 50 61  stmt, db, rootPa
108a0 67 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ge);..#else..   
108b0 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 23     return -1;..#
108c0 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
108d0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
108e0 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 52 6f  rride long GetRo
108f0 77 49 64 46 6f 72 43 75 72 73 6f 72 28 53 51 4c  wIdForCursor(SQL
10900 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
10910 74 2c 20 69 6e 74 20 63 75 72 73 6f 72 29 0d 0a  t, int cursor)..
10920 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
10930 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
10940 20 20 20 6c 6f 6e 67 20 72 6f 77 69 64 3b 0d 0a     long rowid;..
10950 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
10960 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
10970 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
10980 71 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f  qlite3_cursor_ro
10990 77 69 64 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  wid_interop(stmt
109a0 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 63  ._sqlite_stmt, c
109b0 75 72 73 6f 72 2c 20 6f 75 74 20 72 6f 77 69 64  ursor, out rowid
109c0 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63  );..      if (rc
109d0 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
109e0 6f 64 65 2e 4f 6b 29 20 72 65 74 75 72 6e 20 72  ode.Ok) return r
109f0 6f 77 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  owid;....      r
10a00 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d  eturn 0;..#else.
10a10 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b  .      return 0;
10a20 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
10a30 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
10a40 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 47 65  override void Ge
10a50 74 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65  tIndexColumnExte
10a60 6e 64 65 64 49 6e 66 6f 28 73 74 72 69 6e 67 20  ndedInfo(string 
10a70 64 61 74 61 62 61 73 65 2c 20 73 74 72 69 6e 67  database, string
10a80 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 63   index, string c
10a90 6f 6c 75 6d 6e 2c 20 6f 75 74 20 69 6e 74 20 73  olumn, out int s
10aa0 6f 72 74 4d 6f 64 65 2c 20 6f 75 74 20 69 6e 74  ortMode, out int
10ab0 20 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20 73 74   onError, out st
10ac0 72 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65  ring collationSe
10ad0 71 75 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d 0a  quence)..    {..
10ae0 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
10af0 44 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50  DARD..      IntP
10b00 74 72 20 63 6f 6c 6c 3b 0d 0a 20 20 20 20 20 20  tr coll;..      
10b10 69 6e 74 20 63 6f 6c 6c 6c 65 6e 3b 0d 0a 20 20  int colllen;..  
10b20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
10b30 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20  ode rc;....     
10b40 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
10b50 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10b60 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69  3_index_column_i
10b70 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  nfo_interop(_sql
10b80 2c 20 54 6f 55 54 46 38 28 64 61 74 61 62 61 73  , ToUTF8(databas
10b90 65 29 2c 20 54 6f 55 54 46 38 28 69 6e 64 65 78  e), ToUTF8(index
10ba0 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e  ), ToUTF8(column
10bb0 29 2c 20 6f 75 74 20 73 6f 72 74 4d 6f 64 65 2c  ), out sortMode,
10bc0 20 6f 75 74 20 6f 6e 45 72 72 6f 72 2c 20 6f 75   out onError, ou
10bd0 74 20 63 6f 6c 6c 2c 20 6f 75 74 20 63 6f 6c 6c  t coll, out coll
10be0 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  len);..      if 
10bf0 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72  (rc != SQLiteErr
10c00 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
10c10 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
10c20 74 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29 3b 0d  tion(rc, null);.
10c30 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69  ...      collati
10c40 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46  onSequence = UTF
10c50 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 2c 20  8ToString(coll, 
10c60 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  colllen);..#else
10c70 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f 64 65  ..      sortMode
10c80 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f 6e 45   = 0;..      onE
10c90 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20 20 20  rror = 2;..     
10ca0 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   collationSequen
10cb0 63 65 20 3d 20 22 42 49 4e 41 52 59 22 3b 0d 0a  ce = "BINARY";..
10cc0 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
10cd0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
10ce0 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
10cf0 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e 74 72  orCode FileContr
10d00 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e 61 6d  ol(string zDbNam
10d10 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74 50 74  e, int op, IntPt
10d20 72 20 70 41 72 67 29 0d 0a 20 20 20 20 7b 0d 0a  r pArg)..    {..
10d30 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
10d40 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10d50 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f  .sqlite3_file_co
10d60 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44 62  ntrol(_sql, (zDb
10d70 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  Name != null) ? 
10d80 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65 29 20  ToUTF8(zDbName) 
10d90 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41 72 67  : null, op, pArg
10da0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a  );..    }..  }..
10db0 7d 0d 0a                                         }..