System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact d3c8a208de590b4dc3417f1f3672c47f40d875db:


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 43 61 6c 6c 73 20 74 68      /// Calls th
c5a0: 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20  e native SQLite 
c5b0: 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20  core library in 
c5c0: 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61 72 65  order to declare
c5d0: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
c5e0: 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20 72 65 73  ..    /// in res
c5f0: 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c 20  ponse to a call 
c600: 69 6e 74 6f 20 74 68 65 20 78 43 72 65 61 74 65  into the xCreate
c610: 20 6f 72 20 78 43 6f 6e 6e 65 63 74 20 76 69 72   or xConnect vir
c620: 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f  tual table metho
c630: 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ds...    /// </s
c640: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
c650: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f   <param name="mo
c660: 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  dule">..    /// 
c670: 54 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  The virtual tabl
c680: 65 20 6d 6f 64 75 6c 65 20 74 68 61 74 20 69 73  e module that is
c690: 20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73 69 62   to be responsib
c6a0: 6c 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75  le for the virtu
c6b0: 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f  al table..    //
c6c0: 2f 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64  / being declared
c6d0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
c6e0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
c6f0: 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 53 71 6c  ram name="strSql
c700: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
c710: 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
c720: 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  g the SQL statem
c730: 65 6e 74 20 64 65 73 63 72 69 62 69 6e 67 20 74  ent describing t
c740: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
c750: 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20   to..    /// be 
c760: 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f  declared...    /
c770: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
c780: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
c790: 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f  ="error">..    /
c7a0: 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c  // Upon success,
c7b0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66   the contents of
c7c0: 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
c7d0: 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 20 20  are undefined.  
c7e0: 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20  Upon failure,.. 
c7f0: 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64     /// it should
c800: 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70 72   contain an appr
c810: 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d 65  opriate error me
c820: 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ssage...    /// 
c830: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
c840: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
c850: 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
c860: 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
c870: 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  de...    /// </r
c880: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
c890: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
c8a0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44  QLiteErrorCode D
c8b0: 65 63 6c 61 72 65 56 69 72 74 75 61 6c 54 61 62  eclareVirtualTab
c8c0: 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  le(..        SQL
c8d0: 69 74 65 4d 6f 64 75 6c 65 42 61 73 65 20 6d 6f  iteModuleBase mo
c8e0: 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 73  dule,..        s
c8f0: 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 0d 0a 20  tring strSql,.. 
c900: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
c910: 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
c920: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
c930: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
c940: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
c950: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
c960: 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
c970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 73  ..            _s
c980: 71 6c 2c 20 53 51 4c 69 74 65 4d 61 72 73 68 61  ql, SQLiteMarsha
c990: 6c 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d  l.Utf8IntPtrFrom
c9a0: 53 74 72 69 6e 67 28 73 74 72 53 71 6c 29 29 3b  String(strSql));
c9b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
c9c0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
c9d0: 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6d 6f  rCode.Ok) && (mo
c9e0: 64 75 6c 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a  dule != null))..
c9f0: 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
ca00: 6c 65 2e 44 65 63 6c 61 72 65 64 20 3d 20 74 72  le.Declared = tr
ca10: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ue;....        i
ca20: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
ca30: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72 6f  rorCode.Ok) erro
ca40: 72 20 3d 20 47 65 74 4c 61 73 74 45 72 72 6f 72  r = GetLastError
ca50: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ();....        r
ca60: 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 7d 0d  eturn n;..    }.
ca70: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
ca80: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e  ary>..    /// En
ca90: 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65  ables or disable
caa0: 64 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64  d extension load
cab0: 69 6e 67 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a  ing by SQLite...
cac0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
cad0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
cae0: 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22  am name="bOnOff"
caf0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20  >..    /// True 
cb00: 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e  to enable loadin
cb10: 67 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c  g of extensions,
cb20: 20 66 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c   false to disabl
cb30: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
cb40: 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
cb50: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
cb60: 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f   SetLoadExtensio
cb70: 6e 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a  n(bool bOnOff)..
cb80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
cb90: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
cba0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
cbb0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
cbc0: 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e  nable_load_exten
cbd0: 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
cbe0: 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66     _sql, (bOnOff
cbf0: 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a   ? -1 : 0));....
cc00: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
cc10: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
cc20: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
cc30: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
cc40: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
cc50: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
cc60: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
cc70: 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20      /// Loads a 
cc80: 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e  SQLite extension
cc90: 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 20 74 68   library from th
cca0: 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a 20  e named file... 
ccb0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
ccc0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
ccd0: 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65  m name="fileName
cce0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
ccf0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 79 6e 61  name of the dyna
cd00: 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72 79  mic link library
cd10: 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67   file containing
cd20: 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d   the extension..
cd30: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
cd40: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
cd50: 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d 65  m name="procName
cd60: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
cd70: 6e 61 6d 65 20 6f 66 20 74 68 65 20 65 78 70 6f  name of the expo
cd80: 72 74 65 64 20 66 75 6e 63 74 69 6f 6e 20 75 73  rted function us
cd90: 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65  ed to initialize
cda0: 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d   the extension..
cdb0: 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c  .    /// If null
cdc0: 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 22 73  , the default "s
cdd0: 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e  qlite3_extension
cde0: 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62 65 20 75  _init" will be u
cdf0: 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  sed...    /// </
ce00: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
ce10: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
ce20: 69 64 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  id LoadExtension
ce30: 28 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65  (string fileName
ce40: 2c 20 73 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d  , string procNam
ce50: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
ce60: 20 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20     if (fileName 
ce70: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
ce80: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
ce90: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
cea0: 70 74 69 6f 6e 28 22 66 69 6c 65 4e 61 6d 65 22  ption("fileName"
ceb0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
cec0: 74 50 74 72 20 70 45 72 72 6f 72 20 3d 20 49 6e  tPtr pError = In
ced0: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
cee0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
cef0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
cf00: 20 20 62 79 74 65 5b 5d 20 75 74 66 38 46 69 6c    byte[] utf8Fil
cf10: 65 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f  eName = UTF8Enco
cf20: 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74  ding.UTF8.GetByt
cf30: 65 73 28 66 69 6c 65 4e 61 6d 65 20 2b 20 27 5c  es(fileName + '\
cf40: 30 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  0');..          
cf50: 20 20 62 79 74 65 5b 5d 20 75 74 66 38 50 72 6f    byte[] utf8Pro
cf60: 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  cName = null;...
cf70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
cf80: 28 70 72 6f 63 4e 61 6d 65 20 21 3d 20 6e 75 6c  (procName != nul
cf90: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
cfa0: 20 20 20 20 75 74 66 38 50 72 6f 63 4e 61 6d 65      utf8ProcName
cfb0: 20 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e   = UTF8Encoding.
cfc0: 55 54 46 38 2e 47 65 74 42 79 74 65 73 28 70 72  UTF8.GetBytes(pr
cfd0: 6f 63 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d  ocName + '\0');.
cfe0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
cff0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
d000: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
d010: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c  ethods.sqlite3_l
d020: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a  oad_extension(..
d030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d040: 5f 73 71 6c 2c 20 75 74 66 38 46 69 6c 65 4e 61  _sql, utf8FileNa
d050: 6d 65 2c 20 75 74 66 38 50 72 6f 63 4e 61 6d 65  me, utf8ProcName
d060: 2c 20 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a  , ref pError);..
d070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
d080: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
d090: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
d0b0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
d0c0: 70 74 69 6f 6e 28 6e 2c 20 55 54 46 38 54 6f 53  ption(n, UTF8ToS
d0d0: 74 72 69 6e 67 28 70 45 72 72 6f 72 2c 20 2d 31  tring(pError, -1
d0e0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
d0f0: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
d100: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
d110: 20 20 20 20 20 20 20 20 69 66 20 28 70 45 72 72          if (pErr
d120: 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  or != IntPtr.Zer
d130: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
d140: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d150: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
d160: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66  ethods.sqlite3_f
d170: 72 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20  ree(pError);..  
d180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45                pE
d190: 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  rror = IntPtr.Ze
d1a0: 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
d1b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
d1c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
d1d0: 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62  Enables or disab
d1e0: 6c 65 64 20 65 78 74 65 6e 64 65 64 20 72 65 73  led extended res
d1f0: 75 6c 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e  ult codes return
d200: 65 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20  ed by SQLite..  
d210: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
d220: 69 64 65 20 76 6f 69 64 20 53 65 74 45 78 74 65  ide void SetExte
d230: 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28  ndedResultCodes(
d240: 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20  bool bOnOff)..  
d250: 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
d260: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
d270: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
d280: 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e  ds.sqlite3_exten
d290: 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73  ded_result_codes
d2a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71  (..          _sq
d2b0: 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20  l, (bOnOff ? -1 
d2c0: 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  : 0));....      
d2d0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
d2e0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
d2f0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
d300: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
d310: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
d320: 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20  }..    /// Gets 
d330: 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20  the last SQLite 
d340: 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20  error code..    
d350: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
d360: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
d370: 65 20 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a  e ResultCode()..
d380: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
d390: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
d3a0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
d3b0: 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a  errcode(_sql);..
d3c0: 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47      }..    /// G
d3d0: 65 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c  ets the last SQL
d3e0: 69 74 65 20 65 78 74 65 6e 64 65 64 20 65 72 72  ite extended err
d3f0: 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74  or code..    int
d400: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
d410: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 45  QLiteErrorCode E
d420: 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64  xtendedResultCod
d430: 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  e()..    {..    
d440: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
d450: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d460: 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72  ite3_extended_er
d470: 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20  rcode(_sql);..  
d480: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41    }....    /// A
d490: 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65  dd a log message
d4a0: 20 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20   via the SQLite 
d4b0: 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65  sqlite3_log inte
d4c0: 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65  rface...    inte
d4d0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
d4e0: 69 64 20 4c 6f 67 4d 65 73 73 61 67 65 28 53 51  id LogMessage(SQ
d4f0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 69 45  LiteErrorCode iE
d500: 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a  rrCode, string z
d510: 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d  Message)..    {.
d520: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
d530: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d540: 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f 64 65 2c  e3_log(iErrCode,
d550: 20 54 6f 55 54 46 38 28 7a 4d 65 73 73 61 67 65   ToUTF8(zMessage
d560: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69  ));..    }....#i
d570: 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 0d  f INTEROP_CODEC.
d580: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d590: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 50  erride void SetP
d5a0: 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 70  assword(byte[] p
d5b0: 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20  asswordBytes).. 
d5c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
d5d0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
d5e0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d5f0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6b 65 79 28  ods.sqlite3_key(
d600: 5f 73 71 6c 2c 20 70 61 73 73 77 6f 72 64 42 79  _sql, passwordBy
d610: 74 65 73 2c 20 70 61 73 73 77 6f 72 64 42 79 74  tes, passwordByt
d620: 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20  es.Length);..   
d630: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
d640: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
d650: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
d660: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
d670: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
d680: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d690: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
d6a0: 69 64 20 43 68 61 6e 67 65 50 61 73 73 77 6f 72  id ChangePasswor
d6b0: 64 28 62 79 74 65 5b 5d 20 6e 65 77 50 61 73 73  d(byte[] newPass
d6c0: 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20  wordBytes)..    
d6d0: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
d6e0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
d6f0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d700: 2e 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 28 5f  .sqlite3_rekey(_
d710: 73 71 6c 2c 20 6e 65 77 50 61 73 73 77 6f 72 64  sql, newPassword
d720: 42 79 74 65 73 2c 20 28 6e 65 77 50 61 73 73 77  Bytes, (newPassw
d730: 6f 72 64 42 79 74 65 73 20 3d 3d 20 6e 75 6c 6c  ordBytes == null
d740: 29 20 3f 20 30 20 3a 20 6e 65 77 50 61 73 73 77  ) ? 0 : newPassw
d750: 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29  ordBytes.Length)
d760: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ;..      if (n !
d770: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
d780: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
d790: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
d7a0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
d7b0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64  ));..    }..#end
d7c0: 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  if....    intern
d7d0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
d7e0: 20 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53   SetUpdateHook(S
d7f0: 51 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62  QLiteUpdateCallb
d800: 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
d810: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
d820: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d830: 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28  te3_update_hook(
d840: 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
d850: 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
d860: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
d870: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
d880: 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c  etCommitHook(SQL
d890: 69 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63  iteCommitCallbac
d8a0: 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
d8b0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
d8c0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d8d0: 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73  3_commit_hook(_s
d8e0: 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
d8f0: 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
d900: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
d910: 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
d920: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51  TraceCallback(SQ
d930: 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63  LiteTraceCallbac
d940: 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
d950: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
d960: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d970: 33 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75  3_trace(_sql, fu
d980: 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
d990: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
d9a0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
d9b0: 65 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61  e void SetRollba
d9c0: 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c  ckHook(SQLiteRol
d9d0: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75  lbackCallback fu
d9e0: 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nc)..    {..    
d9f0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
da00: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f  thods.sqlite3_ro
da10: 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c  llback_hook(_sql
da20: 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
da30: 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ero);..    }....
da40: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
da50: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77  >..    /// Allow
da60: 73 20 74 68 65 20 73 65 74 74 69 6e 67 20 6f 66  s the setting of
da70: 20 61 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62   a logging callb
da80: 61 63 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20 53  ack invoked by S
da90: 51 4c 69 74 65 20 77 68 65 6e 20 61 0d 0a 20 20  QLite when a..  
daa0: 20 20 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20    /// log event 
dab0: 6f 63 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e  occurs.  Only on
dac0: 65 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62  e callback may b
dad0: 65 20 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20  e set.  If NULL 
dae0: 69 73 20 70 61 73 73 65 64 2c 0d 0a 20 20 20 20  is passed,..    
daf0: 2f 2f 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67 20  /// the logging 
db00: 63 61 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72 65  callback is unre
db10: 67 69 73 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f  gistered...    /
db20: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
db30: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
db40: 6d 65 3d 22 66 75 6e 63 22 3e 54 68 65 20 63 61  me="func">The ca
db50: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20  llback function 
db60: 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61  to invoke.</para
db70: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
db80: 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72  urns>Returns a r
db90: 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75  esult code</retu
dba0: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
dbb0: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
dbc0: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4c  teErrorCode SetL
dbd0: 6f 67 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74  ogCallback(SQLit
dbe0: 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e  eLogCallback fun
dbf0: 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
dc00: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
dc10: 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
dc20: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
dc30: 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d  te3_config_log(.
dc40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
dc50: 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d  iteConfigOpsEnum
dc60: 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c  .SQLITE_CONFIG_L
dc70: 4f 47 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  OG, func, IntPtr
dc80: 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20  .Zero);....     
dc90: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20     return rc;.. 
dca0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
dcb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
dd10: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
dd20: 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65  ..    /// Create
dd30: 73 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20 62  s a new SQLite b
dd40: 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 62 61 73  ackup object bas
dd50: 65 64 20 6f 6e 20 74 68 65 20 70 72 6f 76 69 64  ed on the provid
dd60: 65 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a  ed destination..
dd70: 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
dd80: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68   connection.  Th
dd90: 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
dda0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
ddb0: 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f  the one..    ///
ddc0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
ddd0: 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54   this object.  T
dde0: 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65  he source and de
ddf0: 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
de00: 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e  se..    /// conn
de10: 65 63 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62  ections cannot b
de20: 65 20 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20  e the same...   
de30: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
de40: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
de50: 6e 61 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54  name="destCnn">T
de60: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  he destination d
de70: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
de80: 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  on.</param>..   
de90: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
dea0: 3d 22 64 65 73 74 4e 61 6d 65 22 3e 54 68 65 20  ="destName">The 
deb0: 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61  destination data
dec0: 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61  base name.</para
ded0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
dee0: 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e  am name="sourceN
def0: 61 6d 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20  ame">The source 
df00: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f  database name.</
df10: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
df20: 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 65 77  <returns>The new
df30: 6c 79 20 63 72 65 61 74 65 64 20 62 61 63 6b 75  ly created backu
df40: 70 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72  p object.</retur
df50: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
df60: 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
df70: 65 42 61 63 6b 75 70 20 49 6e 69 74 69 61 6c 69  eBackup Initiali
df80: 7a 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  zeBackup(..     
df90: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
dfa0: 69 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20  ion destCnn,..  
dfb0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73        string des
dfc0: 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  tName,..        
dfd0: 73 74 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d  string sourceNam
dfe0: 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  e..        )..  
dff0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
e000: 28 64 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c  (destCnn == null
e010: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
e020: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
e030: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
e040: 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20  destCnn");....  
e050: 20 20 20 20 20 20 69 66 20 28 64 65 73 74 4e 61        if (destNa
e060: 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
e070: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
e080: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
e090: 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74 4e 61  xception("destNa
e0a0: 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me");....       
e0b0: 20 69 66 20 28 73 6f 75 72 63 65 4e 61 6d 65 20   if (sourceName 
e0c0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
e0d0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
e0e0: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
e0f0: 70 74 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d  ption("sourceNam
e100: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
e110: 53 51 4c 69 74 65 33 20 64 65 73 74 53 71 6c 69  SQLite3 destSqli
e120: 74 65 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73  te3 = destCnn._s
e130: 71 6c 20 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a  ql as SQLite3;..
e140: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
e150: 73 74 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c  stSqlite3 == nul
e160: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
e170: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
e180: 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  ntException(..  
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
e1a0: 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65  estination conne
e1b0: 63 74 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61  ction has no wra
e1c0: 70 70 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20  pper.",..       
e1d0: 20 20 20 20 20 20 20 20 20 22 64 65 73 74 43 6e           "destCn
e1e0: 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n");....        
e1f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
e200: 48 61 6e 64 6c 65 20 64 65 73 74 48 61 6e 64 6c  Handle destHandl
e210: 65 20 3d 20 64 65 73 74 53 71 6c 69 74 65 33 2e  e = destSqlite3.
e220: 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  _sql;....       
e230: 20 69 66 20 28 64 65 73 74 48 61 6e 64 6c 65 20   if (destHandle 
e240: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
e250: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
e260: 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f  ArgumentExceptio
e270: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
e280: 20 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e      "Destination
e290: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20   connection has 
e2a0: 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
e2b0: 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e.",..          
e2c0: 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29        "destCnn")
e2d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
e2e0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
e2f0: 64 6c 65 20 73 6f 75 72 63 65 48 61 6e 64 6c 65  dle sourceHandle
e300: 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20   = _sql;....    
e310: 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 48 61      if (sourceHa
e320: 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
e330: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
e340: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
e350: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
e360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e370: 20 22 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74   "Source connect
e380: 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ion has an inval
e390: 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
e3a0: 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20  .        byte[] 
e3b0: 7a 44 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54  zDestName = ToUT
e3c0: 46 38 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20  F8(destName);.. 
e3d0: 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 53         byte[] zS
e3e0: 6f 75 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54  ourceName = ToUT
e3f0: 46 38 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d  F8(sourceName);.
e400: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
e410: 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 62 61  eBackupHandle ba
e420: 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c  ckupHandle = nul
e430: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  l;....        tr
e440: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
e450: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
e460: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
e470: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
e480: 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68  ally /* NOTE: Th
e490: 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f  read.Abort() pro
e4a0: 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20  tection. */..   
e4b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e4c0: 20 20 20 20 49 6e 74 50 74 72 20 62 61 63 6b 75      IntPtr backu
e4d0: 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
e4e0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
e4f0: 62 61 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20  backup_init(..  
e500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
e510: 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e  stHandle, zDestN
e520: 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c  ame, sourceHandl
e530: 65 2c 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b  e, zSourceName);
e540: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e550: 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e  if (backup == In
e560: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
e570: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
e580: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
e590: 70 74 69 6f 6e 28 52 65 73 75 6c 74 43 6f 64 65  ption(ResultCode
e5a0: 28 29 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (), GetLastError
e5b0: 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ());....        
e5c0: 20 20 20 20 62 61 63 6b 75 70 48 61 6e 64 6c 65      backupHandle
e5d0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63   = new SQLiteBac
e5e0: 6b 75 70 48 61 6e 64 6c 65 28 64 65 73 74 48 61  kupHandle(destHa
e5f0: 6e 64 6c 65 2c 20 62 61 63 6b 75 70 29 3b 0d 0a  ndle, backup);..
e600: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
e610: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
e620: 53 51 4c 69 74 65 42 61 63 6b 75 70 28 0d 0a 20  SQLiteBackup(.. 
e630: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2c             this,
e640: 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64   backupHandle, d
e650: 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74  estHandle, zDest
e660: 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64  Name, sourceHand
e670: 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
e680: 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a   zSourceName);..
e690: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
e6a0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
e6b0: 2f 2f 2f 20 43 6f 70 69 65 73 20 75 70 20 74 6f  /// Copies up to
e6c0: 20 4e 20 70 61 67 65 73 20 66 72 6f 6d 20 74 68   N pages from th
e6d0: 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
e6e0: 65 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61  e to the destina
e6f0: 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61  tion..    /// da
e700: 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65  tabase associate
e710: 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  d with the speci
e720: 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65  fied backup obje
e730: 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ct...    /// </s
e740: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
e750: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61   <param name="ba
e760: 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70  ckup">The backup
e770: 20 6f 62 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c   object to use.<
e780: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
e790: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50   <param name="nP
e7a0: 61 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  age">..    /// T
e7b0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
e7c0: 65 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61  es to copy, nega
e7d0: 74 69 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c  tive to copy all
e7e0: 20 72 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73   remaining pages
e7f0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
e800: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
e810: 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22  ram name="retry"
e820: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74  >..    /// Set t
e830: 6f 20 74 72 75 65 20 69 66 20 74 68 65 20 6f 70  o true if the op
e840: 65 72 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f  eration needs to
e850: 20 62 65 20 72 65 74 72 69 65 64 20 64 75 65 20   be retried due 
e860: 74 6f 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  to database..   
e870: 20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73   /// locking iss
e880: 75 65 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ues; otherwise, 
e890: 73 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20  set to false... 
e8a0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
e8b0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
e8c0: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65  s>..    /// True
e8d0: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6d 6f   if there are mo
e8e0: 72 65 20 70 61 67 65 73 20 74 6f 20 62 65 20 63  re pages to be c
e8f0: 6f 70 69 65 64 2c 20 66 61 6c 73 65 20 6f 74 68  opied, false oth
e900: 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f  erwise...    ///
e910: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
e920: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
e930: 64 65 20 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b  de bool StepBack
e940: 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  up(..        SQL
e950: 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70  iteBackup backup
e960: 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  ,..        int n
e970: 50 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 6f  Page,..        o
e980: 75 74 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20  ut bool retry.. 
e990: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
e9a0: 0a 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d  .        retry =
e9b0: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
e9c0: 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
e9d0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
e9e0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
e9f0: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
ea00: 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
ea10: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
ea20: 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
ea30: 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
ea40: 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
ea50: 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
ea60: 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
ea70: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
ea80: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
ea90: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
eab0: 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
eac0: 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
ead0: 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
eae0: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
eaf0: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
eb00: 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
eb10: 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72  dlePtr == IntPtr
eb20: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
eb30: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
eb40: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
eb50: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
eb60: 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
eb70: 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
eb80: 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
eb90: 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20  ointer.");....  
eba0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
ebb0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
ebc0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ebd0: 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65  lite3_backup_ste
ebe0: 70 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61  p(handlePtr, nPa
ebf0: 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 61  ge);..        ba
ec00: 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74  ckup._stepResult
ec10: 20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53   = n; /* NOTE: S
ec20: 61 76 65 20 66 6f 72 20 75 73 65 20 62 79 20 46  ave for use by F
ec30: 69 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d  inishBackup. */.
ec40: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
ec50: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
ec60: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
ec70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ec80: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
ec90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
eca0: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
ecb0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42  QLiteErrorCode.B
ecc0: 75 73 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  usy)..        {.
ecd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
ece0: 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ry = true;..    
ecf0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
ed00: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
ed10: 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66  .        else if
ed20: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
ed30: 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a  orCode.Locked)..
ed40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ed50: 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74         retry = t
ed60: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
ed70: 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
ed80: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
ed90: 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
eda0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
edb0: 2e 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20 20  .Done)..        
edc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
edd0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
ede0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
edf0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b   else..        {
ee00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
ee10: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
ee20: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
ee30: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
ee40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
ee50: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
ee60: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
ee70: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
ee80: 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e  f pages remainin
ee90: 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64 20 66  g to be copied f
eea0: 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 0d 0a  rom the source..
eeb0: 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
eec0: 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74   to the destinat
eed0: 69 6f 6e 20 64 61 74 61 62 61 73 65 20 61 73 73  ion database ass
eee0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
eef0: 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20   specified..    
ef00: 2f 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  /// backup objec
ef10: 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
ef20: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
ef30: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
ef40: 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
ef50: 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e  object to check.
ef60: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
ef70: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e  / <returns>The n
ef80: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72  umber of pages r
ef90: 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63  emaining to be c
efa0: 6f 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e  opied.</returns>
efb0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
efc0: 76 65 72 72 69 64 65 20 69 6e 74 20 52 65 6d 61  verride int Rema
efd0: 69 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20  iningBackup(..  
efe0: 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
eff0: 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20  up backup..     
f000: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
f010: 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
f020: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
f030: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
f040: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
f050: 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b  ption("backup");
f060: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
f070: 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68  teBackupHandle h
f080: 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f  andle = backup._
f090: 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a  sqlite_backup;..
f0a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
f0b0: 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
f0c0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
f0d0: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
f0e0: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
f0f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f100: 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
f110: 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
f120: 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20  andle.");....   
f130: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
f140: 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  lePtr = handle;.
f150: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
f160: 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50  andlePtr == IntP
f170: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
f180: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
f190: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
f1a0: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
f1b0: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
f1c0: 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
f1d0: 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
f1e0: 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a   pointer.");....
f1f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
f200: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
f210: 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  ds.sqlite3_backu
f220: 70 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64  p_remaining(hand
f230: 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a  lePtr);..    }..
f240: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
f250: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
f260: 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  urns the total n
f270: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
f280: 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74  n the source dat
f290: 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
f2a0: 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74  ..    /// with t
f2b0: 68 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63  he specified bac
f2c0: 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20  kup object...   
f2d0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
f2e0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
f2f0: 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68  name="backup">Th
f300: 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
f310: 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d  to check.</param
f320: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
f330: 72 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75  rns>The total nu
f340: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
f350: 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   the source data
f360: 62 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  base.</returns>.
f370: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
f380: 65 72 72 69 64 65 20 69 6e 74 20 50 61 67 65 43  erride int PageC
f390: 6f 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20 20  ountBackup(..   
f3a0: 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
f3b0: 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20  p backup..      
f3c0: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
f3d0: 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
f3e0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
f3f0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
f400: 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
f410: 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
f420: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
f430: 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
f440: 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
f450: 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
f460: 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
f470: 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
f480: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
f490: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
f4a0: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
f4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4c0: 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
f4d0: 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
f4e0: 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
f4f0: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
f500: 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
f510: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
f520: 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
f530: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
f540: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
f550: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
f560: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
f570: 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
f580: 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
f590: 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
f5a0: 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20  pointer.");.... 
f5b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
f5c0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f5d0: 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
f5e0: 5f 70 61 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c  _pagecount(handl
f5f0: 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ePtr);..    }...
f600: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
f610: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74  y>..    /// Dest
f620: 72 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70 20  roys the backup 
f630: 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20  object, rolling 
f640: 62 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20  back any backup 
f650: 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a  that may be in..
f660: 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e      /// progess.
f670: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
f680: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
f690: 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75  aram name="backu
f6a0: 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62  p">The backup ob
f6b0: 6a 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e  ject to destroy.
f6c0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
f6d0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
f6e0: 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75  void FinishBacku
f6f0: 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
f700: 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d  teBackup backup.
f710: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
f720: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62  {..        if (b
f730: 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ackup == null)..
f740: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
f750: 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
f760: 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63  llException("bac
f770: 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  kup");....      
f780: 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61    SQLiteBackupHa
f790: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61  ndle handle = ba
f7a0: 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63  ckup._sqlite_bac
f7b0: 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  kup;....        
f7c0: 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75  if (handle == nu
f7d0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
f7e0: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
f7f0: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
f800: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
f810: 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
f820: 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
f830: 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
f840: 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
f850: 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61  r handlePtr = ha
f860: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
f870: 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d   if (handlePtr =
f880: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
f890: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
f8a0: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
f8b0: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
f8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f8d0: 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
f8e0: 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
f8f0: 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22  handle pointer."
f900: 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  );....#if !SQLIT
f910: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
f920: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
f930: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
f940: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f950: 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73  te3_backup_finis
f960: 68 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  h_interop(handle
f970: 50 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  Ptr);..#else..  
f980: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
f990: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
f9a0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f9b0: 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e  lite3_backup_fin
f9c0: 69 73 68 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d  ish(handlePtr);.
f9d0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
f9e0: 20 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c   handle.SetHandl
f9f0: 65 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d  eAsInvalid();...
fa00: 0a 23 69 66 20 43 4f 55 4e 54 5f 48 41 4e 44 4c  .#if COUNT_HANDL
fa10: 45 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  E..        if ((
fa20: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
fa30: 43 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d  Code.Ok) || (n =
fa40: 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65  = backup._stepRe
fa50: 73 75 6c 74 29 29 20 68 61 6e 64 6c 65 2e 57 61  sult)) handle.Wa
fa60: 73 52 65 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a  sReleasedOk();..
fa70: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
fa80: 20 20 69 66 20 28 28 6e 20 21 3d 20 53 51 4c 69    if ((n != SQLi
fa90: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
faa0: 26 26 20 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e  && (n != backup.
fab0: 5f 73 74 65 70 52 65 73 75 6c 74 29 29 0d 0a 20  _stepResult)).. 
fac0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
fad0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
fae0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
faf0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
fb00: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
fb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb60: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
fb70: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
fb80: 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20   /// Determines 
fb90: 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  if the SQLite co
fba0: 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
fbb0: 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  een initialized 
fbc0: 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  for the..    ///
fbd0: 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
fbe0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
fbf0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
fc00: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
fc10: 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69  / A boolean indi
fc20: 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
fc30: 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65  r not the SQLite
fc40: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
fc50: 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20  s been..    /// 
fc60: 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
fc70: 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
fc80: 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
fc90: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
fca0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
fcb0: 62 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a  bool IsInitializ
fcc0: 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
fcd0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74       return Stat
fce0: 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  icIsInitialized(
fcf0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
fd00: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
fd10: 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e      /// Determin
fd20: 65 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  es if the SQLite
fd30: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
fd40: 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  s been initializ
fd50: 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  ed for the..    
fd60: 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63  /// current proc
fd70: 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
fd80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
fd90: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
fda0: 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69   /// A boolean i
fdb0: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
fdc0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c  r or not the SQL
fdd0: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
fde0: 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f   has been..    /
fdf0: 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  // initialized f
fe00: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  or the current p
fe10: 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
fe20: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
fe30: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
fe40: 20 62 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e   bool StaticIsIn
fe50: 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20  itialized()..   
fe60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a   {..        //..
fe70: 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49          // BUGFI
fe80: 58 3a 20 50 72 65 76 65 6e 74 20 72 61 63 65 73  X: Prevent races
fe90: 20 77 69 74 68 20 6f 74 68 65 72 20 74 68 72 65   with other thre
fea0: 61 64 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74  ads for this ent
feb0: 69 72 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a  ire block, due..
fec0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
fed0: 20 20 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69     to the try/fi
fee0: 6e 61 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e  nally semantics.
fef0: 20 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32    See ticket [72
ff00: 39 30 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20  905c9a77]...    
ff10: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
ff20: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d  lock (syncRoot).
ff30: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
ff40: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
ff50: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
ff60: 20 53 61 76 65 20 74 68 65 20 73 74 61 74 65 20   Save the state 
ff70: 6f 66 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63  of the logging c
ff80: 6c 61 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65  lass and then re
ff90: 73 74 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20  store it..      
ffa0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
ffb0: 66 74 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65  fter we are done
ffc0: 20 74 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e   to avoid loggin
ffd0: 67 20 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65  g too many false
ffe0: 20 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20   errors...      
fff0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
10000 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64        bool saved
10010 45 6e 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65  Enabled = SQLite
10020 4c 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20  Log.Enabled;..  
10030 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
10040 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61  Log.Enabled = fa
10050 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
10060 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
10070 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10080 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
10090 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
100a0 4f 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64  OTE: This method
100b0 20 5b 61 62 5d 75 73 65 73 20 74 68 65 20 66 61   [ab]uses the fa
100c0 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 77  ct that SQLite w
100d0 69 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20  ill always..    
100e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
100f0 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
10100 54 45 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79  TE_ERROR for any
10110 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75   unknown configu
10120 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20  ration option.. 
10130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10140 2f 20 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a  /       *unless*
10150 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
10160 61 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20  ary has already 
10170 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
10180 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10190 20 20 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74     //       In t
101a0 68 61 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c  hat case it will
101b0 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53   always return S
101c0 51 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20  QLITE_MISUSE... 
101d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
101e0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
101f0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
10200 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
10210 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10220 74 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28  te3_config_none(
10230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10240 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66        SQLiteConf
10250 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  igOpsEnum.SQLITE
10260 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a  _CONFIG_NONE);..
10270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10280 20 20 72 65 74 75 72 6e 20 28 72 63 20 3d 3d 20    return (rc == 
10290 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
102a0 4d 69 73 75 73 65 29 3b 0d 0a 20 20 20 20 20 20  Misuse);..      
102b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
102c0 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
102d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
102e0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
102f0 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d  iteLog.Enabled =
10300 20 73 61 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a   savedEnabled;..
10310 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
10320 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
10330 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
10340 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65  ary>..    /// He
10350 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f  lper function to
10360 20 72 65 74 72 69 65 76 65 20 61 20 63 6f 6c 75   retrieve a colu
10370 6d 6e 20 6f 66 20 64 61 74 61 20 66 72 6f 6d 20  mn of data from 
10380 61 6e 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  an active statem
10390 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ent...    /// </
103a0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
103b0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
103c0 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65  tmt">The stateme
103d0 6e 74 20 62 65 69 6e 67 20 73 74 65 70 28 29 27  nt being step()'
103e0 64 20 74 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d  d through</param
103f0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
10400 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54  m name="flags">T
10410 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61  he flags associa
10420 74 65 64 20 77 69 74 68 20 74 68 65 20 63 6f 6e  ted with the con
10430 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e  nection.</param>
10440 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
10450 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68   name="index">Th
10460 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74  e column index t
10470 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
10480 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
10490 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68  am name="typ">Th
104a0 65 20 74 79 70 65 20 6f 66 20 64 61 74 61 20 63  e type of data c
104b0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
104c0 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e  column.  If Unin
104d0 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 69 73 20  itialized, this 
104e0 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65  function will re
104f0 74 72 69 65 76 65 20 74 68 65 20 64 61 74 61 74  trieve the datat
10500 79 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ype information.
10510 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
10520 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72  / <returns>Retur
10530 6e 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 74  ns the data in t
10540 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72  he column</retur
10550 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
10560 6c 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63  l override objec
10570 74 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74  t GetValue(SQLit
10580 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
10590 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
105a0 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
105b0 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54  t index, SQLiteT
105c0 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d  ype typ)..    {.
105d0 0a 20 20 20 20 20 20 69 66 20 28 49 73 4e 75 6c  .      if (IsNul
105e0 6c 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 20  l(stmt, index)) 
105f0 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61  return DBNull.Va
10600 6c 75 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65  lue;..      Type
10610 41 66 66 69 6e 69 74 79 20 61 66 66 20 3d 20 74  Affinity aff = t
10620 79 70 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20  yp.Affinity;..  
10630 20 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c      Type t = nul
10640 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  l;....      if (
10650 74 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79  typ.Type != DbTy
10660 70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20  pe.Object)..    
10670 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d    {..        t =
10680 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53   SQLiteConvert.S
10690 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28  QLiteTypeToType(
106a0 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61  typ);..        a
106b0 66 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e  ff = TypeToAffin
106c0 69 74 79 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d  ity(t);..      }
106d0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 28 66  ....      if ((f
106e0 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
106f0 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74  nectionFlags.Get
10700 41 6c 6c 41 73 54 65 78 74 29 20 3d 3d 20 53 51  AllAsText) == SQ
10710 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
10720 61 67 73 2e 47 65 74 41 6c 6c 41 73 54 65 78 74  ags.GetAllAsText
10730 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  )..          ret
10740 75 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74  urn GetText(stmt
10750 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
10760 20 20 20 73 77 69 74 63 68 20 28 61 66 66 29 0d     switch (aff).
10770 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
10780 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
10790 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20  ity.Blob:..     
107a0 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70       if (typ.Typ
107b0 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64  e == DbType.Guid
107c0 20 26 26 20 74 79 70 2e 41 66 66 69 6e 69 74 79   && typ.Affinity
107d0 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79   == TypeAffinity
107e0 2e 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20  .Text)..        
107f0 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47      return new G
10800 75 69 64 28 47 65 74 54 65 78 74 28 73 74 6d 74  uid(GetText(stmt
10810 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20  , index));....  
10820 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20          int n = 
10830 28 69 6e 74 29 47 65 74 42 79 74 65 73 28 73 74  (int)GetBytes(st
10840 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75  mt, index, 0, nu
10850 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20  ll, 0, 0);..    
10860 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d        byte[] b =
10870 20 6e 65 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20   new byte[n];.. 
10880 20 20 20 20 20 20 20 20 20 47 65 74 42 79 74 65           GetByte
10890 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30  s(stmt, index, 0
108a0 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20  , b, 0, n);.... 
108b0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
108c0 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e  .Type == DbType.
108d0 47 75 69 64 20 26 26 20 6e 20 3d 3d 20 31 36 29  Guid && n == 16)
108e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
108f0 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28 62 29  turn new Guid(b)
10900 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  ;....          r
10910 65 74 75 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20  eturn b;..      
10920 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
10930 69 74 79 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20  ity.DateTime:.. 
10940 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10950 47 65 74 44 61 74 65 54 69 6d 65 28 73 74 6d 74  GetDateTime(stmt
10960 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
10970 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
10980 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20  nity.Double:..  
10990 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
109a0 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65   null) return Ge
109b0 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e  tDouble(stmt, in
109c0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
109d0 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
109e0 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 44 6f  ChangeType(GetDo
109f0 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  uble(stmt, index
10a00 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20  ), t, null);..  
10a10 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
10a20 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a  ffinity.Int64:..
10a30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
10a40 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
10a50 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
10a60 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
10a70 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
10a80 66 28 53 42 79 74 65 29 29 20 72 65 74 75 72 6e  f(SByte)) return
10a90 20 47 65 74 53 42 79 74 65 28 73 74 6d 74 2c 20   GetSByte(stmt, 
10aa0 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
10ab0 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
10ac0 6f 66 28 42 79 74 65 29 29 20 72 65 74 75 72 6e  of(Byte)) return
10ad0 20 47 65 74 42 79 74 65 28 73 74 6d 74 2c 20 69   GetByte(stmt, i
10ae0 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
10af0 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
10b00 66 28 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e  f(Int16)) return
10b10 20 47 65 74 49 6e 74 31 36 28 73 74 6d 74 2c 20   GetInt16(stmt, 
10b20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
10b30 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
10b40 6f 66 28 55 49 6e 74 31 36 29 29 20 72 65 74 75  of(UInt16)) retu
10b50 72 6e 20 47 65 74 55 49 6e 74 31 36 28 73 74 6d  rn GetUInt16(stm
10b60 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
10b70 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
10b80 79 70 65 6f 66 28 49 6e 74 33 32 29 29 20 72 65  ypeof(Int32)) re
10b90 74 75 72 6e 20 47 65 74 49 6e 74 33 32 28 73 74  turn GetInt32(st
10ba0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
10bb0 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
10bc0 74 79 70 65 6f 66 28 55 49 6e 74 33 32 29 29 20  typeof(UInt32)) 
10bd0 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 33 32  return GetUInt32
10be0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
10bf0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
10c00 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 36 34  == typeof(UInt64
10c10 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e  )) return GetUIn
10c20 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
10c30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ;..          ret
10c40 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e  urn Convert.Chan
10c50 67 65 54 79 70 65 28 47 65 74 49 6e 74 36 34 28  geType(GetInt64(
10c60 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c  stmt, index), t,
10c70 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
10c80 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
10c90 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 54       return GetT
10ca0 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ext(stmt, index)
10cb0 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
10cc0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
10cd0 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47  l override int G
10ce0 65 74 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65  etCursorForTable
10cf0 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
10d00 20 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69   stmt, int db, i
10d10 6e 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20  nt rootPage)..  
10d20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
10d30 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
10d40 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
10d50 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10d60 74 65 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72  te3_table_cursor
10d70 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
10d80 71 6c 69 74 65 5f 73 74 6d 74 2c 20 64 62 2c 20  qlite_stmt, db, 
10d90 72 6f 6f 74 50 61 67 65 29 3b 0d 0a 23 65 6c 73  rootPage);..#els
10da0 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
10db0 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  -1;..#endif..   
10dc0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
10dd0 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
10de0 20 47 65 74 52 6f 77 49 64 46 6f 72 43 75 72 73   GetRowIdForCurs
10df0 6f 72 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  or(SQLiteStateme
10e00 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 63 75 72  nt stmt, int cur
10e10 73 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  sor)..    {..#if
10e20 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
10e30 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f  D..      long ro
10e40 77 69 64 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  wid;..      SQLi
10e50 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
10e60 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
10e70 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 75 72  hods.sqlite3_cur
10e80 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f  sor_rowid_intero
10e90 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
10ea0 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20 6f 75 74  tmt, cursor, out
10eb0 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20 20   rowid);..      
10ec0 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  if (rc == SQLite
10ed0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 72 65  ErrorCode.Ok) re
10ee0 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20  turn rowid;.... 
10ef0 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
10f00 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
10f10 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a  urn 0;..#endif..
10f20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
10f30 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
10f40 6f 69 64 20 47 65 74 49 6e 64 65 78 43 6f 6c 75  oid GetIndexColu
10f50 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f 28 73  mnExtendedInfo(s
10f60 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 2c 20  tring database, 
10f70 73 74 72 69 6e 67 20 69 6e 64 65 78 2c 20 73 74  string index, st
10f80 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74  ring column, out
10f90 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f   int sortMode, o
10fa0 75 74 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c 20  ut int onError, 
10fb0 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61  out string colla
10fc0 74 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a 20  tionSequence).. 
10fd0 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
10fe0 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
10ff0 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 3b 0d 0a    IntPtr coll;..
11000 20 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65        int collle
11010 6e 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  n;..      SQLite
11020 45 72 72 6f 72 43 6f 64 65 20 72 63 3b 0d 0a 0d  ErrorCode rc;...
11030 0a 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61  .      rc = Unsa
11040 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
11050 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f  sqlite3_index_co
11060 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f  lumn_info_intero
11070 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64  p(_sql, ToUTF8(d
11080 61 74 61 62 61 73 65 29 2c 20 54 6f 55 54 46 38  atabase), ToUTF8
11090 28 69 6e 64 65 78 29 2c 20 54 6f 55 54 46 38 28  (index), ToUTF8(
110a0 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 73 6f 72  column), out sor
110b0 74 4d 6f 64 65 2c 20 6f 75 74 20 6f 6e 45 72 72  tMode, out onErr
110c0 6f 72 2c 20 6f 75 74 20 63 6f 6c 6c 2c 20 6f 75  or, out coll, ou
110d0 74 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20  t colllen);..   
110e0 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c     if (rc != SQL
110f0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
11100 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
11110 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 6e  eException(rc, n
11120 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 63  ull);....      c
11130 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
11140 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
11150 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d  coll, colllen);.
11160 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 73 6f  .#else..      so
11170 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20 20 20  rtMode = 0;..   
11180 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20 32 3b 0d     onError = 2;.
11190 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e  .      collation
111a0 53 65 71 75 65 6e 63 65 20 3d 20 22 42 49 4e 41  Sequence = "BINA
111b0 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  RY";..#endif..  
111c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
111d0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
111e0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69 6c  iteErrorCode Fil
111f0 65 43 6f 6e 74 72 6f 6c 28 73 74 72 69 6e 67 20  eControl(string 
11200 7a 44 62 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c  zDbName, int op,
11210 20 49 6e 74 50 74 72 20 70 41 72 67 29 0d 0a 20   IntPtr pArg).. 
11220 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
11230 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
11240 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66  ethods.sqlite3_f
11250 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c  ile_control(_sql
11260 2c 20 28 7a 44 62 4e 61 6d 65 20 21 3d 20 6e 75  , (zDbName != nu
11270 6c 6c 29 20 3f 20 54 6f 55 54 46 38 28 7a 44 62  ll) ? ToUTF8(zDb
11280 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70  Name) : null, op
11290 2c 20 70 41 72 67 29 3b 0d 0a 20 20 20 20 7d 0d  , pArg);..    }.
112a0 0a 20 20 7d 0d 0a 7d 0d 0a                       .  }..}..