System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 55de156cf36fce2d3003007d882df9865540ab25:


0000: ef bb bf 2f 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 2a 2a 2a 0d 0a 20 2a  ************.. *
0040: 20 41 44 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74   ADO.NET 2.0 Dat
0050: 61 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53  a Provider for S
0060: 51 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 2e  QLite Version 3.
0070: 58 0d 0a 20 2a 20 57 72 69 74 74 65 6e 20 62 79  X.. * Written by
0080: 20 52 6f 62 65 72 74 20 53 69 6d 70 73 6f 6e 20   Robert Simpson 
0090: 28 72 6f 62 65 72 74 40 62 6c 61 63 6b 63 61 73  (robert@blackcas
00a0: 74 6c 65 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a  tlesoft.com).. *
00b0: 20 0d 0a 20 2a 20 52 65 6c 65 61 73 65 64 20 74   .. * Released t
00c0: 6f 20 74 68 65 20 70 75 62 6c 69 63 20 64 6f 6d  o the public dom
00d0: 61 69 6e 2c 20 75 73 65 20 61 74 20 79 6f 75 72  ain, use at your
00e0: 20 6f 77 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a   own 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 2a 2a 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70  *****/....namesp
0130: 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ace System.Data.
0140: 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 75 73 69  SQLite..{..  usi
0150: 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 75 73  ng System;..  us
0160: 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65  ing System.Colle
0170: 63 74 69 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d  ctions.Generic;.
0180: 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  ...#if !NET_COMP
0190: 41 43 54 5f 32 30 20 26 26 20 28 54 52 41 43 45  ACT_20 && (TRACE
01a0: 5f 43 4f 4e 4e 45 43 54 49 4f 4e 20 7c 7c 20 54  _CONNECTION || T
01b0: 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 29 0d  RACE_STATEMENT).
01c0: 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  .  using System.
01d0: 44 69 61 67 6e 6f 73 74 69 63 73 3b 0d 0a 23 65  Diagnostics;..#e
01e0: 6e 64 69 66 0d 0a 0d 0a 20 20 75 73 69 6e 67 20  ndif....  using 
01f0: 53 79 73 74 65 6d 2e 52 75 6e 74 69 6d 65 2e 49  System.Runtime.I
0200: 6e 74 65 72 6f 70 53 65 72 76 69 63 65 73 3b 0d  nteropServices;.
0210: 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  .  using System.
0220: 54 65 78 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  Text;....#if !PL
0230: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
0240: 41 4d 45 57 4f 52 4b 0d 0a 20 20 5b 55 6e 6d 61  AMEWORK..  [Unma
0250: 6e 61 67 65 64 46 75 6e 63 74 69 6f 6e 50 6f 69  nagedFunctionPoi
0260: 6e 74 65 72 28 43 61 6c 6c 69 6e 67 43 6f 6e 76  nter(CallingConv
0270: 65 6e 74 69 6f 6e 2e 43 64 65 63 6c 29 5d 0d 0a  ention.Cdecl)]..
0280: 23 65 6e 64 69 66 0d 0a 20 20 69 6e 74 65 72 6e  #endif..  intern
0290: 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f 69 64  al delegate void
02a0: 20 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61   SQLiteLogCallba
02b0: 63 6b 28 49 6e 74 50 74 72 20 70 75 73 65 72 2c  ck(IntPtr puser,
02c0: 20 69 6e 74 20 65 72 72 5f 63 6f 64 65 2c 20 49   int err_code, I
02d0: 6e 74 50 74 72 20 6d 65 73 73 61 67 65 29 3b 0d  ntPtr message);.
02e0: 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  ...  /// <summar
02f0: 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 63  y>..  /// This c
0300: 6c 61 73 73 20 69 6d 70 6c 65 6d 65 6e 74 73 20  lass implements 
0310: 53 51 4c 69 74 65 42 61 73 65 20 63 6f 6d 70 6c  SQLiteBase compl
0320: 65 74 65 6c 79 2c 20 61 6e 64 20 69 73 20 74 68  etely, and is th
0330: 65 20 67 75 74 73 20 6f 66 20 74 68 65 20 63 6f  e guts of the co
0340: 64 65 20 74 68 61 74 20 69 6e 74 65 72 6f 70 27  de that interop'
0350: 73 20 53 51 4c 69 74 65 20 77 69 74 68 20 2e 4e  s SQLite with .N
0360: 45 54 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ET..  /// </summ
0370: 61 72 79 3e 0d 0a 20 20 69 6e 74 65 72 6e 61 6c  ary>..  internal
0380: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 33 20 3a   class SQLite3 :
0390: 20 53 51 4c 69 74 65 42 61 73 65 0d 0a 20 20 7b   SQLiteBase..  {
03a0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
03b0: 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79 6e 63  atic object sync
03c0: 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a 65 63  Root = new objec
03d0: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 0d 0a  t();....    //..
03e0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
03f0: 73 20 69 73 20 74 68 65 20 70 75 62 6c 69 63 20  s is the public 
0400: 6b 65 79 20 66 6f 72 20 74 68 65 20 53 79 73 74  key for the Syst
0410: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 61  em.Data.SQLite a
0420: 73 73 65 6d 62 6c 79 2e 20 20 49 66 20 79 6f 75  ssembly.  If you
0430: 20 63 68 61 6e 67 65 20 74 68 65 0d 0a 20 20 20   change the..   
0440: 20 2f 2f 20 20 20 20 20 20 20 53 4e 4b 20 66 69   //       SNK fi
0450: 6c 65 2c 20 79 6f 75 20 77 69 6c 6c 20 6e 65 65  le, you will nee
0460: 64 20 74 6f 20 63 68 61 6e 67 65 20 74 68 69 73  d to change this
0470: 20 61 73 20 77 65 6c 6c 2e 0d 0a 20 20 20 20 2f   as well...    /
0480: 2f 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  /..    internal 
0490: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 75 62  const string Pub
04a0: 6c 69 63 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20  licKey =..      
04b0: 20 20 22 30 30 32 34 30 30 30 30 30 34 38 30 30    "0024000004800
04c0: 30 30 30 39 34 30 30 30 30 30 30 30 36 30 32 30  0009400000006020
04d0: 30 30 30 30 30 32 34 30 30 30 30 35 32 35 33 34  0000024000052534
04e0: 31 33 31 30 30 30 34 30 30 30 30 30 31 30 30 30  1310004000001000
04f0: 31 30 30 30 35 61 32 38 38 64 65 35 36 38 37 63  10005a288de5687c
0500: 34 65 31 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  4e1" +..        
0510: 22 62 36 32 31 64 64 66 66 35 64 38 34 34 37 32  "b621ddff5d84472
0520: 37 34 31 38 39 35 36 39 39 37 66 34 37 35 65 62  7418956997f475eb
0530: 38 32 39 34 32 39 65 34 31 31 61 66 66 33 65 39  829429e411aff3e9
0540: 33 66 39 37 62 37 30 64 65 36 39 38 62 39 37 32  3f97b70de698b972
0550: 36 34 30 39 32 35 62 64 64 34 34 32 38 30 64 66  640925bdd44280df
0560: 30 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 22 61  0" +..        "a
0570: 32 35 61 38 34 33 32 36 36 39 37 33 37 30 34 31  25a8432669737041
0580: 33 37 63 62 62 30 65 37 34 34 31 63 31 66 65 37  37cbb0e7441c1fe7
0590: 63 61 65 34 65 32 34 34 30 61 65 39 31 61 62 38  cae4e2440ae91ab8
05a0: 63 64 65 33 39 33 33 66 65 62 63 62 31 61 63 34  cde3933febcb1ac4
05b0: 38 64 64 33 33 62 34 30 65 31 33 63 34 32 31 22  8dd33b40e13c421"
05c0: 20 2b 0d 0a 20 20 20 20 20 20 20 20 22 64 38 32   +..        "d82
05d0: 31 35 63 31 38 61 34 33 34 39 61 34 33 36 64 64  15c18a4349a436dd
05e0: 34 39 39 65 33 63 33 38 35 63 63 36 38 33 30 31  499e3c385cc68301
05f0: 35 66 38 38 36 66 36 63 31 30 62 64 39 30 31 31  5f886f6c10bd9011
0600: 35 65 62 32 62 64 36 31 62 36 37 37 35 30 38 33  5eb2bd61b6775083
0610: 39 65 33 61 31 39 39 34 31 64 63 39 63 22 3b 0d  9e3a19941dc9c";.
0620: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
0630: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
0640: 4b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  K..    internal 
0650: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 73  const string Des
0660: 69 67 6e 65 72 56 65 72 73 69 6f 6e 20 3d 20 22  ignerVersion = "
0670: 31 2e 30 2e 38 32 2e 30 22 3b 0d 0a 23 65 6e 64  1.0.82.0";..#end
0680: 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  if....    /// <s
0690: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
06a0: 20 54 68 65 20 6f 70 61 71 75 65 20 70 6f 69 6e   The opaque poin
06b0: 74 65 72 20 72 65 74 75 72 6e 65 64 20 74 6f 20  ter returned to 
06c0: 75 73 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  us by the sqlite
06d0: 20 70 72 6f 76 69 64 65 72 0d 0a 20 20 20 20 2f   provider..    /
06e0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
06f0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 69 6e 74     protected int
0700: 65 72 6e 61 6c 20 53 51 4c 69 74 65 43 6f 6e 6e  ernal SQLiteConn
0710: 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 5f 73 71  ectionHandle _sq
0720: 6c 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  l;..    protecte
0730: 64 20 73 74 72 69 6e 67 20 5f 66 69 6c 65 4e 61  d string _fileNa
0740: 6d 65 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  me;..    protect
0750: 65 64 20 62 6f 6f 6c 20 5f 75 73 65 50 6f 6f 6c  ed bool _usePool
0760: 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ;..    protected
0770: 20 69 6e 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f   int _poolVersio
0780: 6e 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  n;....#if !PLATF
0790: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
07a0: 57 4f 52 4b 0d 0a 20 20 20 20 70 72 69 76 61 74  WORK..    privat
07b0: 65 20 62 6f 6f 6c 20 5f 62 75 69 6c 64 69 6e 67  e bool _building
07c0: 53 63 68 65 6d 61 3b 0d 0a 23 65 6e 64 69 66 0d  Schema;..#endif.
07d0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
07e0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
07f0: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
0800: 63 74 69 6f 6e 73 20 72 65 67 69 73 74 65 72 65  ctions registere
0810: 64 20 6f 6e 20 74 68 69 73 20 63 6f 6e 6e 65 63  d on this connec
0820: 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  tion..    /// </
0830: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
0840: 6f 74 65 63 74 65 64 20 53 51 4c 69 74 65 46 75  otected SQLiteFu
0850: 6e 63 74 69 6f 6e 5b 5d 20 5f 66 75 6e 63 74 69  nction[] _functi
0860: 6f 6e 73 41 72 72 61 79 3b 0d 0a 0d 0a 20 20 20  onsArray;....   
0870: 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65   internal SQLite
0880: 33 28 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  3(SQLiteDateForm
0890: 61 74 73 20 66 6d 74 2c 20 44 61 74 65 54 69 6d  ats fmt, DateTim
08a0: 65 4b 69 6e 64 20 6b 69 6e 64 29 0d 0a 20 20 20  eKind kind)..   
08b0: 20 20 20 3a 20 62 61 73 65 28 66 6d 74 2c 20 6b     : base(fmt, k
08c0: 69 6e 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ind)..    {..   
08d0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
08e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
0940: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
0950: 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d  able "Pattern" M
0960: 65 6d 62 65 72 73 0d 0a 20 20 20 20 70 72 69 76  embers..    priv
0970: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
0980: 64 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  d;..    private 
0990: 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73  void CheckDispos
09a0: 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ed() /* throw */
09b0: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52  ..    {..#if THR
09c0: 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a  OW_ON_DISPOSED..
09d0: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
09e0: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
09f0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a     throw new Obj
0a00: 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70  ectDisposedExcep
0a10: 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c 69  tion(typeof(SQLi
0a20: 74 65 33 29 2e 4e 61 6d 65 29 3b 0d 0a 23 65 6e  te3).Name);..#en
0a30: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
0a40: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
0a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0aa0: 2f 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  /....    protect
0ab0: 65 64 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  ed override void
0ac0: 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69   Dispose(bool di
0ad0: 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d  sposing)..    {.
0ae0: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
0af0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
0b00: 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73       if (!dispos
0b10: 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
0b20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
0b30: 20 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73      //if (dispos
0b40: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
0b50: 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20        //{..     
0b60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
0b70: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
0b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b90: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
0ba0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20         //    // 
0bb0: 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20  dispose managed 
0bc0: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
0bd0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
0be0: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
0bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0c20: 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  /}....          
0c30: 20 20 20 20 20 20 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 2f 2f 0d 0a 20 20  ////////////..  
0c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
0c70: 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67   release unmanag
0c80: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
0c90: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
0ca0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
0cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ce0: 43 6c 6f 73 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  Close();....    
0cf0: 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70              disp
0d00: 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20  osed = true;..  
0d10: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
0d20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
0d30: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
0d40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
0d50: 62 61 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73  base.Dispose(dis
0d60: 70 6f 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20  posing);..      
0d70: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20    }..    }..    
0d80: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
0d90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
0da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0df0: 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49 74 20 69  /....    // It i
0e00: 73 6e 27 74 20 6e 65 63 65 73 73 61 72 79 20 74  sn't necessary t
0e10: 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79 20 66 75  o cleanup any fu
0e20: 6e 63 74 69 6f 6e 73 20 77 65 27 76 65 20 72 65  nctions we've re
0e30: 67 69 73 74 65 72 65 64 2e 20 20 49 66 20 74 68  gistered.  If th
0e40: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20  e connection..  
0e50: 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20 74 68 65    // goes to the
0e60: 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20 72 65 73   pool and is res
0e70: 75 72 72 65 63 74 65 64 20 6c 61 74 65 72 2c 20  urrected later, 
0e80: 72 65 2d 72 65 67 69 73 74 65 72 65 64 20 66 75  re-registered fu
0e90: 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 6f 76 65  nctions will ove
0ea0: 72 77 72 69 74 65 20 74 68 65 0d 0a 20 20 20 20  rwrite the..    
0eb0: 2f 2f 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63  // previous func
0ec0: 74 69 6f 6e 73 2e 20 20 54 68 65 20 53 51 4c 69  tions.  The SQLi
0ed0: 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69 65  teFunctionCookie
0ee0: 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74 61 6b 65  Handle will take
0ef0: 20 63 61 72 65 20 6f 66 20 66 72 65 65 69 6e 67   care of freeing
0f00: 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20   unmanaged..    
0f10: 2f 2f 20 72 65 73 6f 75 72 63 65 73 20 62 65 6c  // resources bel
0f20: 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20 70 72  onging to the pr
0f30: 65 76 69 6f 75 73 6c 79 2d 72 65 67 69 73 74 65  eviously-registe
0f40: 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a  red functions...
0f50: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
0f60: 72 72 69 64 65 20 76 6f 69 64 20 43 6c 6f 73 65  rride void Close
0f70: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
0f80: 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c   if (_sql != nul
0f90: 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
0fa0: 20 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50         if (_useP
0fb0: 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ool)..          
0fc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
0fd0: 20 53 51 4c 69 74 65 42 61 73 65 2e 52 65 73 65   SQLiteBase.Rese
0fe0: 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f 73 71 6c  tConnection(_sql
0ff0: 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20  , _sql);..      
1000: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
1010: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41 64 64  nnectionPool.Add
1020: 28 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 73 71 6c  (_fileName, _sql
1030: 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b  , _poolVersion);
1040: 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
1050: 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
1060: 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
1070: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1080: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
1090: 67 2e 46 6f 72 6d 61 74 28 22 43 6c 6f 73 65 20  g.Format("Close 
10a0: 28 50 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 5f 73  (Pool): {0}", _s
10b0: 71 6c 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ql));..#endif.. 
10c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
10d0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
10e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10f0: 20 20 20 20 20 20 20 5f 73 71 6c 2e 44 69 73 70         _sql.Disp
1100: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
1110: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 5f    }..          _
1120: 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  sql = null;..   
1130: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
1140: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11a0: 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  //....    intern
11b0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
11c0: 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20 20 7b   Cancel()..    {
11d0: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
11e0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
11f0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 5f 73  te3_interrupt(_s
1200: 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ql);..    }.... 
1210: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
1220: 72 69 64 65 20 73 74 72 69 6e 67 20 56 65 72 73  ride string Vers
1230: 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ion..    {..    
1240: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
1250: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
1260: 51 4c 69 74 65 33 2e 53 51 4c 69 74 65 56 65 72  QLite3.SQLiteVer
1270: 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  sion;..      }..
1280: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
1290: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72  ernal static str
12a0: 69 6e 67 20 44 65 66 69 6e 65 43 6f 6e 73 74 61  ing DefineConsta
12b0: 6e 74 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nts..    {..    
12c0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
12d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12e0: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65  StringBuilder re
12f0: 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e  sult = new Strin
1300: 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20  gBuilder();..   
1310: 20 20 20 20 20 20 20 20 20 49 4c 69 73 74 3c 73           IList<s
1320: 74 72 69 6e 67 3e 20 6c 69 73 74 20 3d 20 53 51  tring> list = SQ
1330: 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61  LiteDefineConsta
1340: 6e 74 73 2e 4f 70 74 69 6f 6e 4c 69 73 74 3b 0d  nts.OptionList;.
1350: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1360: 66 20 28 6c 69 73 74 20 21 3d 20 6e 75 6c 6c 29  f (list != null)
1370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1390: 20 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67   foreach (string
13a0: 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 73 74   element in list
13b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13d0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6c            if (el
13e0: 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ement == null)..
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
1410: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1420: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
1430: 75 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d  ult.Length > 0).
1440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1450: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
1460: 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a  Append(' ');....
1470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1480: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
1490: 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  d(element);..   
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
14c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
14d0: 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72  urn result.ToStr
14e0: 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ing();..        
14f0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
1500: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
1510: 73 74 72 69 6e 67 20 53 51 4c 69 74 65 56 65 72  string SQLiteVer
1520: 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  sion..    {..   
1530: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
1540: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
1550: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
1560: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1570: 2e 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73  .sqlite3_libvers
1580: 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a 20 20 20  ion(), -1);..   
1590: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
15a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
15b0: 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65  ic string SQLite
15c0: 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d  SourceId..    {.
15d0: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
15e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
15f0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
1600: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
1610: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 6f 75  hods.sqlite3_sou
1620: 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 20  rceid(), -1);.. 
1630: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
1640: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1650: 65 72 72 69 64 65 20 62 6f 6f 6c 20 41 75 74 6f  erride bool Auto
1660: 43 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d 0a 20  Commit..    {.. 
1670: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
1680: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
1690: 6e 20 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28 5f  n IsAutocommit(_
16a0: 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20  sql, _sql);..   
16b0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
16c0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
16d0: 72 69 64 65 20 6c 6f 6e 67 20 4c 61 73 74 49 6e  ride long LastIn
16e0: 73 65 72 74 52 6f 77 49 64 0d 0a 20 20 20 20 7b  sertRowId..    {
16f0: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
1700: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
1710: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
1720: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1730: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
1740: 69 64 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20  id(_sql);..     
1750: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
1760: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
1770: 64 65 20 69 6e 74 20 43 68 61 6e 67 65 73 0d 0a  de int Changes..
1780: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
1790: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
17a0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
17b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
17c0: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 5f 73  lite3_changes(_s
17d0: 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ql);..      }.. 
17e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
17f0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
1800: 6e 67 20 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20  ng MemoryUsed.. 
1810: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
1820: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
1830: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
1840: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1850: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64  ite3_memory_used
1860: 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ();..      }..  
1870: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1880: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
1890: 67 20 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65  g MemoryHighwate
18a0: 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  r..    {..      
18b0: 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  get..      {..  
18c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
18d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
18e0: 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f  .sqlite3_memory_
18f0: 68 69 67 68 77 61 74 65 72 28 30 29 3b 0d 0a 20  highwater(0);.. 
1900: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
1910: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1920: 65 72 72 69 64 65 20 69 6e 74 20 53 65 74 4d 65  erride int SetMe
1930: 6d 6f 72 79 53 74 61 74 75 73 28 62 6f 6f 6c 20  moryStatus(bool 
1940: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
1950: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
1960: 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74 61  aticSetMemorySta
1970: 74 75 73 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20  tus(value);..   
1980: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
1990: 61 6c 20 73 74 61 74 69 63 20 69 6e 74 20 53 74  al static int St
19a0: 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74 61  aticSetMemorySta
19b0: 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d  tus(bool value).
19c0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
19d0: 69 6e 74 20 72 63 20 3d 20 55 6e 73 61 66 65 4e  int rc = UnsafeN
19e0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
19f0: 69 74 65 33 5f 63 6f 6e 66 69 67 5f 69 6e 74 28  ite3_config_int(
1a00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
1a10: 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75  LiteConfigOpsEnu
1a20: 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  m.SQLITE_CONFIG_
1a30: 4d 45 4d 53 54 41 54 55 53 2c 20 76 61 6c 75 65  MEMSTATUS, value
1a40: 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 0d 0a 20 20   ? 1 : 0);....  
1a50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b        return rc;
1a60: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1a70: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1a80: 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e 20 74    /// Shutdown t
1a90: 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69 6e 65  he SQLite engine
1aa0: 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
1ab0: 62 65 20 72 65 73 74 61 72 74 65 64 20 77 69 74  be restarted wit
1ac0: 68 20 64 69 66 66 65 72 65 6e 74 20 63 6f 6e 66  h different conf
1ad0: 69 67 20 6f 70 74 69 6f 6e 73 2e 0d 0a 20 20 20  ig options...   
1ae0: 20 2f 2f 2f 20 57 65 20 64 65 70 65 6e 64 20 6f   /// We depend o
1af0: 6e 20 61 75 74 6f 20 69 6e 69 74 69 61 6c 69 7a  n auto initializ
1b00: 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76 65 72  ation to recover
1b10: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
1b20: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
1b30: 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20  returns>Returns 
1b40: 61 20 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72  a result code</r
1b50: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
1b60: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
1b70: 6e 74 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a 20  nt Shutdown().. 
1b80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 6e     {..        in
1b90: 74 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  t rc = UnsafeNat
1ba0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1bb0: 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 3b 0d 0a  e3_shutdown();..
1bc0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
1bd0: 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  c;..    }....   
1be0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
1bf0: 64 65 20 62 6f 6f 6c 20 49 73 4f 70 65 6e 28 29  de bool IsOpen()
1c00: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
1c10: 20 72 65 74 75 72 6e 20 28 5f 73 71 6c 20 21 3d   return (_sql !=
1c20: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a   null);..    }..
1c30: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1c40: 76 65 72 72 69 64 65 20 76 6f 69 64 20 4f 70 65  verride void Ope
1c50: 6e 28 73 74 72 69 6e 67 20 73 74 72 46 69 6c 65  n(string strFile
1c60: 6e 61 6d 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  name, SQLiteConn
1c70: 65 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e  ectionFlags conn
1c80: 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51 4c  ectionFlags, SQL
1c90: 69 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d  iteOpenFlagsEnum
1ca0: 20 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74 20   openFlags, int 
1cb0: 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f  maxPoolSize, boo
1cc0: 6c 20 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20  l usePool)..    
1cd0: 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71  {..      if (_sq
1ce0: 6c 20 21 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  l != null) retur
1cf0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 75 73 65  n;....      _use
1d00: 50 6f 6f 6c 20 3d 20 75 73 65 50 6f 6f 6c 3b 0d  Pool = usePool;.
1d10: 0a 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65  .      _fileName
1d20: 20 3d 20 73 74 72 46 69 6c 65 6e 61 6d 65 3b 0d   = strFilename;.
1d30: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 75 73 65  ...      if (use
1d40: 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  Pool)..      {..
1d50: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 53          _sql = S
1d60: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50  QLiteConnectionP
1d70: 6f 6f 6c 2e 52 65 6d 6f 76 65 28 73 74 72 46 69  ool.Remove(strFi
1d80: 6c 65 6e 61 6d 65 2c 20 6d 61 78 50 6f 6f 6c 53  lename, maxPoolS
1d90: 69 7a 65 2c 20 6f 75 74 20 5f 70 6f 6f 6c 56 65  ize, out _poolVe
1da0: 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 23 69 66 20 21  rsion);....#if !
1db0: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
1dc0: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
1dd0: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63  ON..        Trac
1de0: 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69  e.WriteLine(Stri
1df0: 6e 67 2e 46 6f 72 6d 61 74 28 22 4f 70 65 6e 20  ng.Format("Open 
1e00: 28 50 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 28 5f  (Pool): {0}", (_
1e10: 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 5f  sql != null) ? _
1e20: 73 71 6c 2e 54 6f 53 74 72 69 6e 67 28 29 20 3a  sql.ToString() :
1e30: 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 23 65   "<null>"));..#e
1e40: 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  ndif..      }...
1e50: 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20  .      if (_sql 
1e60: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1e70: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
1e80: 72 20 64 62 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  r db;....#if !SQ
1e90: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
1ea0: 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55         int n = U
1eb0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1ec0: 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  ds.sqlite3_open_
1ed0: 69 6e 74 65 72 6f 70 28 54 6f 55 54 46 38 28 73  interop(ToUTF8(s
1ee0: 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 28 69 6e  trFilename), (in
1ef0: 74 29 6f 70 65 6e 46 6c 61 67 73 2c 20 6f 75 74  t)openFlags, out
1f00: 20 64 62 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20   db);..#else..  
1f10: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e        int n = Un
1f20: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1f30: 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76  s.sqlite3_open_v
1f40: 32 28 54 6f 55 54 46 38 28 73 74 72 46 69 6c 65  2(ToUTF8(strFile
1f50: 6e 61 6d 65 29 2c 20 6f 75 74 20 64 62 2c 20 28  name), out db, (
1f60: 69 6e 74 29 6f 70 65 6e 46 6c 61 67 73 2c 20 49  int)openFlags, I
1f70: 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 23 65  ntPtr.Zero);..#e
1f80: 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 21 4e 45 54  ndif....#if !NET
1f90: 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
1fa0: 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
1fb0: 0a 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57  .        Trace.W
1fc0: 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e  riteLine(String.
1fd0: 46 6f 72 6d 61 74 28 22 4f 70 65 6e 3a 20 7b 30  Format("Open: {0
1fe0: 7d 22 2c 20 64 62 29 29 3b 0d 0a 23 65 6e 64 69  }", db));..#endi
1ff0: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  f....        if 
2000: 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65  (n > 0) throw ne
2010: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
2020: 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20  n(n, null);.... 
2030: 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65         _sql = ne
2040: 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
2050: 6f 6e 48 61 6e 64 6c 65 28 64 62 29 3b 0d 0a 20  onHandle(db);.. 
2060: 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f 73 71         lock (_sq
2070: 6c 29 20 7b 20 2f 2a 20 48 41 43 4b 3a 20 46 6f  l) { /* HACK: Fo
2080: 72 63 65 20 74 68 65 20 53 79 6e 63 42 6c 6f 63  rce the SyncBloc
2090: 6b 20 74 6f 20 62 65 20 22 63 72 65 61 74 65 64  k to be "created
20a0: 22 20 6e 6f 77 2e 20 2a 2f 20 7d 0d 0a 20 20 20  " now. */ }..   
20b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 2f 2f 20 42     }..      // B
20c0: 69 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ind functions to
20d0: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
20e0: 2e 20 20 49 66 20 61 6e 79 20 70 72 65 76 69 6f  .  If any previo
20f0: 75 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20  us functions of 
2100: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 0d 0a 20  the same name.. 
2110: 20 20 20 20 20 2f 2f 20 77 65 72 65 20 61 6c 72       // were alr
2120: 65 61 64 79 20 62 6f 75 6e 64 2c 20 74 68 65 6e  eady bound, then
2130: 20 74 68 65 20 6e 65 77 20 62 69 6e 64 69 6e 67   the new binding
2140: 73 20 72 65 70 6c 61 63 65 20 74 68 65 20 6f 6c  s replace the ol
2150: 64 2e 0d 0a 20 20 20 20 20 20 5f 66 75 6e 63 74  d...      _funct
2160: 69 6f 6e 73 41 72 72 61 79 20 3d 20 53 51 4c 69  ionsArray = SQLi
2170: 74 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46  teFunction.BindF
2180: 75 6e 63 74 69 6f 6e 73 28 74 68 69 73 2c 20 63  unctions(this, c
2190: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 29 3b  onnectionFlags);
21a0: 0d 0a 20 20 20 20 20 20 53 65 74 54 69 6d 65 6f  ..      SetTimeo
21b0: 75 74 28 30 29 3b 0d 0a 20 20 20 20 20 20 47 43  ut(0);..      GC
21c0: 2e 4b 65 65 70 41 6c 69 76 65 28 5f 73 71 6c 29  .KeepAlive(_sql)
21d0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
21e0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
21f0: 65 20 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f 6c  e void ClearPool
2200: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
2210: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
2220: 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28  nPool.ClearPool(
2230: 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20  _fileName);..   
2240: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
2250: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
2260: 43 6f 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20 20 20  CountPool()..   
2270: 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74   {..        Dict
2280: 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 69  ionary<string, i
2290: 6e 74 3e 20 63 6f 75 6e 74 73 20 3d 20 6e 75 6c  nt> counts = nul
22a0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  l;..        int 
22b0: 6f 70 65 6e 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a  openCount = 0;..
22c0: 20 20 20 20 20 20 20 20 69 6e 74 20 63 6c 6f 73          int clos
22d0: 65 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20  eCount = 0;..   
22e0: 20 20 20 20 20 69 6e 74 20 74 6f 74 61 6c 43 6f       int totalCo
22f0: 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  unt = 0;....    
2300: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
2310: 74 69 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f 75 6e  tionPool.GetCoun
2320: 74 73 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  ts(_fileName,.. 
2330: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 63             ref c
2340: 6f 75 6e 74 73 2c 20 72 65 66 20 6f 70 65 6e 43  ounts, ref openC
2350: 6f 75 6e 74 2c 20 72 65 66 20 63 6c 6f 73 65 43  ount, ref closeC
2360: 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  ount,..         
2370: 20 20 20 72 65 66 20 74 6f 74 61 6c 43 6f 75 6e     ref totalCoun
2380: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  t);....        r
2390: 65 74 75 72 6e 20 74 6f 74 61 6c 43 6f 75 6e 74  eturn totalCount
23a0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
23b0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
23c0: 65 20 76 6f 69 64 20 53 65 74 54 69 6d 65 6f 75  e void SetTimeou
23d0: 74 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53  t(int nTimeoutMS
23e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
23f0: 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  int n = UnsafeNa
2400: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
2410: 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  te3_busy_timeout
2420: 28 5f 73 71 6c 2c 20 6e 54 69 6d 65 6f 75 74 4d  (_sql, nTimeoutM
2430: 53 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  S);..      if (n
2440: 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20   > 0) throw new 
2450: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
2460: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
2470: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
2480: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
2490: 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 28 53 51  ide bool Step(SQ
24a0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
24b0: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
24c0: 20 20 69 6e 74 20 6e 3b 0d 0a 20 20 20 20 20 20    int n;..      
24d0: 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c  Random rnd = nul
24e0: 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 73  l;..      uint s
24f0: 74 61 72 74 74 69 63 6b 20 3d 20 28 75 69 6e 74  tarttick = (uint
2500: 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63  )Environment.Tic
2510: 6b 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 75  kCount;..      u
2520: 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 75  int timeout = (u
2530: 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61  int)(stmt._comma
2540: 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f  nd._commandTimeo
2550: 75 74 20 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a 20  ut * 1000);.... 
2560: 20 20 20 20 20 77 68 69 6c 65 20 28 74 72 75 65       while (true
2570: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
2580: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
2590: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
25a0: 74 65 33 5f 73 74 65 70 28 73 74 6d 74 2e 5f 73  te3_step(stmt._s
25b0: 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 0d 0a  qlite_stmt);....
25c0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d          if (n ==
25d0: 20 31 30 30 29 20 72 65 74 75 72 6e 20 74 72 75   100) return tru
25e0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  e;..        if (
25f0: 6e 20 3d 3d 20 31 30 31 29 20 72 65 74 75 72 6e  n == 101) return
2600: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
2610: 20 20 20 69 66 20 28 6e 20 3e 20 30 29 0d 0a 20     if (n > 0).. 
2620: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2630: 20 20 20 20 69 6e 74 20 72 3b 0d 0a 0d 0a 20 20      int r;....  
2640: 20 20 20 20 20 20 20 20 2f 2f 20 41 6e 20 65 72          // An er
2650: 72 6f 72 20 6f 63 63 75 72 72 65 64 2c 20 61 74  ror occurred, at
2660: 74 65 6d 70 74 20 74 6f 20 72 65 73 65 74 20 74  tempt to reset t
2670: 68 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  he statement.  I
2680: 66 20 74 68 65 20 72 65 73 65 74 20 77 6f 72 6b  f the reset work
2690: 65 64 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a  ed because the..
26a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 73 63 68            // sch
26b0: 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 2c  ema has changed,
26c0: 20 72 65 2d 74 72 79 20 74 68 65 20 73 74 65 70   re-try the step
26d0: 20 61 67 61 69 6e 2e 20 20 49 66 20 69 74 20 65   again.  If it e
26e0: 72 72 6f 72 65 64 20 6f 75 72 20 62 65 63 61 75  rrored our becau
26f0: 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 0d  se the database.
2700: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 69 73  .          // is
2710: 20 6c 6f 63 6b 65 64 2c 20 74 68 65 6e 20 6b 65   locked, then ke
2720: 65 70 20 72 65 74 72 79 69 6e 67 20 75 6e 74 69  ep retrying unti
2730: 6c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 69  l the command ti
2740: 6d 65 6f 75 74 20 6f 63 63 75 72 73 2e 0d 0a 20  meout occurs... 
2750: 20 20 20 20 20 20 20 20 20 72 20 3d 20 52 65 73           r = Res
2760: 65 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20  et(stmt);....   
2770: 20 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d 20         if (r == 
2780: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
2790: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
27a0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
27b0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
27c0: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20  .          else 
27d0: 69 66 20 28 28 72 20 3d 3d 20 36 20 7c 7c 20 72  if ((r == 6 || r
27e0: 20 3d 3d 20 35 29 20 26 26 20 73 74 6d 74 2e 5f   == 5) && stmt._
27f0: 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29  command != null)
2800: 20 2f 2f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   // SQLITE_LOCKE
2810: 44 20 7c 7c 20 53 51 4c 49 54 45 5f 42 55 53 59  D || SQLITE_BUSY
2820: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
2830: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65             // Ke
2840: 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20  ep trying..     
2850: 20 20 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d         if (rnd =
2860: 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74  = null) // First
2870: 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f   time we've enco
2880: 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b  untered the lock
2890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28a0: 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d  rnd = new Random
28b0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
28c0: 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65     // If we've e
28d0: 78 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d  xceeded the comm
28e0: 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67  and's timeout, g
28f0: 69 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77  ive up and throw
2900: 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20   an error..     
2910: 20 20 20 20 20 20 20 69 66 20 28 28 75 69 6e 74         if ((uint
2920: 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63  )Environment.Tic
2930: 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69  kCount - startti
2940: 63 6b 20 3e 20 74 69 6d 65 6f 75 74 29 0d 0a 20  ck > timeout).. 
2950: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2960: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
2970: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
2980: 70 74 69 6f 6e 28 72 2c 20 47 65 74 4c 61 73 74  ption(r, GetLast
2990: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
29a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
29b0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
29c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65           // Othe
29e0: 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20  rwise sleep for 
29f0: 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20  a random amount 
2a00: 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35  of time up to 15
2a10: 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  0ms..           
2a20: 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64     System.Thread
2a30: 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70  ing.Thread.Sleep
2a40: 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30  (rnd.Next(1, 150
2a50: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
2a60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
2a70: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2a80: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
2a90: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
2aa0: 69 64 65 20 69 6e 74 20 52 65 73 65 74 28 53 51  ide int Reset(SQ
2ab0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
2ac0: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
2ad0: 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 23 69 66 20    int n;....#if 
2ae0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
2af0: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
2b00: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2b10: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e  sqlite3_reset_in
2b20: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
2b30: 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65  te_stmt);..#else
2b40: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
2b50: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2b60: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74  sqlite3_reset(st
2b70: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29  mt._sqlite_stmt)
2b80: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
2b90: 20 20 20 2f 2f 20 49 66 20 74 68 65 20 73 63 68     // If the sch
2ba0: 65 6d 61 20 63 68 61 6e 67 65 64 2c 20 74 72 79  ema changed, try
2bb0: 20 61 6e 64 20 72 65 2d 70 72 65 70 61 72 65 20   and re-prepare 
2bc0: 69 74 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  it..      if (n 
2bd0: 3d 3d 20 31 37 29 20 2f 2f 20 53 51 4c 49 54 45  == 17) // SQLITE
2be0: 5f 53 43 48 45 4d 41 0d 0a 20 20 20 20 20 20 7b  _SCHEMA..      {
2bf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65 63  ..        // Rec
2c00: 72 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73 74  reate a dummy st
2c10: 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20  atement..       
2c20: 20 73 74 72 69 6e 67 20 73 74 72 3b 0d 0a 20 20   string str;..  
2c30: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
2c40: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6d 70  iteStatement tmp
2c50: 20 3d 20 50 72 65 70 61 72 65 28 6e 75 6c 6c 2c   = Prepare(null,
2c60: 20 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65 6d   stmt._sqlStatem
2c70: 65 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e 74  ent, null, (uint
2c80: 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e  )(stmt._command.
2c90: 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20  _commandTimeout 
2ca0: 2a 20 31 30 30 30 29 2c 20 6f 75 74 20 73 74 72  * 1000), out str
2cb0: 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
2cc0: 20 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e 61           // Fina
2cd0: 6c 69 7a 65 20 74 68 65 20 65 78 69 73 74 69 6e  lize the existin
2ce0: 67 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20  g statement..   
2cf0: 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c         stmt._sql
2d00: 69 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73 65  ite_stmt.Dispose
2d10: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f  ();..          /
2d20: 2f 20 52 65 61 73 73 69 67 6e 20 61 20 6e 65 77  / Reassign a new
2d30: 20 73 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e 74   statement point
2d40: 65 72 20 74 6f 20 74 68 65 20 6f 6c 64 20 73 74  er to the old st
2d50: 61 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65 61  atement and clea
2d60: 72 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  r the temporary 
2d70: 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 73  one..          s
2d80: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
2d90: 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73   = tmp._sqlite_s
2da0: 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tmt;..          
2db0: 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmp._sqlite_stmt
2dc0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
2dd0: 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c 79        // Reapply
2de0: 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20   parameters..   
2df0: 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e 64         stmt.Bind
2e00: 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a 20  Parameters();.. 
2e10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2e20: 20 20 72 65 74 75 72 6e 20 2d 31 3b 20 2f 2f 20    return -1; // 
2e30: 52 65 73 65 74 20 77 61 73 20 4f 4b 2c 20 77 69  Reset was OK, wi
2e40: 74 68 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  th schema change
2e50: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
2e60: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 36   else if (n == 6
2e70: 20 7c 7c 20 6e 20 3d 3d 20 35 29 20 2f 2f 20 53   || n == 5) // S
2e80: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 7c 7c 20  QLITE_LOCKED || 
2e90: 53 51 4c 49 54 45 5f 42 55 53 59 0d 0a 20 20 20  SQLITE_BUSY..   
2ea0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a       return n;..
2eb0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20  ..      if (n > 
2ec0: 30 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  0)..        thro
2ed0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
2ee0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
2ef0: 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
2f00: 20 20 20 72 65 74 75 72 6e 20 30 3b 20 2f 2f 20     return 0; // 
2f10: 57 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20  We reset OK, no 
2f20: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a  schema changes..
2f30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
2f40: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
2f50: 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72  tring GetLastErr
2f60: 6f 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  or()..    {..   
2f70: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
2f80: 42 61 73 65 2e 47 65 74 4c 61 73 74 45 72 72 6f  Base.GetLastErro
2f90: 72 28 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a  r(_sql, _sql);..
2fa0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
2fb0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
2fc0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 50  QLiteStatement P
2fd0: 72 65 70 61 72 65 28 53 51 4c 69 74 65 43 6f 6e  repare(SQLiteCon
2fe0: 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72  nection cnn, str
2ff0: 69 6e 67 20 73 74 72 53 71 6c 2c 20 53 51 4c 69  ing strSql, SQLi
3000: 74 65 53 74 61 74 65 6d 65 6e 74 20 70 72 65 76  teStatement prev
3010: 69 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f  ious, uint timeo
3020: 75 74 4d 53 2c 20 6f 75 74 20 73 74 72 69 6e 67  utMS, out string
3030: 20 73 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20 20   strRemain)..   
3040: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 21 53   {..      if (!S
3050: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
3060: 70 74 79 28 73 74 72 53 71 6c 29 29 0d 0a 20 20  pty(strSql))..  
3070: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f      {..        /
3080: 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f  /..        // NO
3090: 54 45 3a 20 53 51 4c 69 74 65 20 64 6f 65 73 20  TE: SQLite does 
30a0: 6e 6f 74 20 73 75 70 70 6f 72 74 20 74 68 65 20  not support the 
30b0: 63 6f 6e 63 65 70 74 20 6f 66 20 73 65 70 61 72  concept of separ
30c0: 61 74 65 20 73 63 68 65 6d 61 73 0d 0a 20 20 20  ate schemas..   
30d0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e       //       in
30e0: 20 6f 6e 65 20 64 61 74 61 62 61 73 65 3b 20 74   one database; t
30f0: 68 65 72 65 66 6f 72 65 2c 20 72 65 6d 6f 76 65  herefore, remove
3100: 20 74 68 65 20 62 61 73 65 20 73 63 68 65 6d 61   the base schema
3110: 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f   name..        /
3120: 2f 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20  /       used to 
3130: 73 6d 6f 6f 74 68 20 69 6e 74 65 67 72 61 74 69  smooth integrati
3140: 6f 6e 20 77 69 74 68 20 74 68 65 20 62 61 73 65  on with the base
3150: 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d   .NET Framework.
3160: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
3170: 20 20 64 61 74 61 20 63 6c 61 73 73 65 73 2e 0d    data classes..
3180: 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
3190: 20 20 20 20 20 73 74 72 69 6e 67 20 62 61 73 65       string base
31a0: 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 28 63 6e  SchemaName = (cn
31b0: 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e  n != null) ? cnn
31c0: 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  ._baseSchemaName
31d0: 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   : null;....    
31e0: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
31f0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 62 61  IsNullOrEmpty(ba
3200: 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 29 0d 0a  seSchemaName))..
3210: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3220: 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74       strSql = st
3230: 72 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20  rSql.Replace(.. 
3240: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
3250: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 5b 7b 30 7d  ing.Format("[{0}
3260: 5d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e  ].", baseSchemaN
3270: 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70  ame), String.Emp
3280: 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ty);....        
3290: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71    strSql = strSq
32a0: 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20  l.Replace(..    
32b0: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
32c0: 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 2e 22 2c 20  .Format("{0}.", 
32d0: 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c  baseSchemaName),
32e0: 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d   String.Empty);.
32f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
3300: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 53 51 4c    }....      SQL
3310: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
3320: 67 73 20 66 6c 61 67 73 20 3d 0d 0a 20 20 20 20  gs flags =..    
3330: 20 20 20 20 20 20 28 63 6e 6e 20 21 3d 20 6e 75        (cnn != nu
3340: 6c 6c 29 20 3f 20 63 6e 6e 2e 46 6c 61 67 73 20  ll) ? cnn.Flags 
3350: 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  : SQLiteConnecti
3360: 6f 6e 46 6c 61 67 73 2e 44 65 66 61 75 6c 74 3b  onFlags.Default;
3370: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
3380: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
3390: 52 4b 0d 0a 20 20 20 20 20 20 69 66 20 28 28 66  RK..      if ((f
33a0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
33b0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
33c0: 50 72 65 70 61 72 65 29 20 3d 3d 20 53 51 4c 69  Prepare) == SQLi
33d0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
33e0: 73 2e 4c 6f 67 50 72 65 70 61 72 65 29 0d 0a 20  s.LogPrepare).. 
33f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3400: 20 20 69 66 20 28 28 73 74 72 53 71 6c 20 3d 3d    if ((strSql ==
3410: 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 74 72 53 71   null) || (strSq
3420: 6c 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 20 7c  l.Length == 0) |
3430: 7c 20 28 73 74 72 53 71 6c 2e 54 72 69 6d 28 29  | (strSql.Trim()
3440: 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 29 0d 0a  .Length == 0))..
3450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
3460: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
3470: 67 65 28 30 2c 20 22 50 72 65 70 61 72 69 6e 67  ge(0, "Preparing
3480: 20 7b 3c 6e 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22   {<nothing>}..."
3490: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c  );..          el
34a0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
34b0: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
34c0: 65 73 73 61 67 65 28 30 2c 20 53 74 72 69 6e 67  essage(0, String
34d0: 2e 46 6f 72 6d 61 74 28 22 50 72 65 70 61 72 69  .Format("Prepari
34e0: 6e 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20  ng {{{0}}}...", 
34f0: 73 74 72 53 71 6c 29 29 3b 0d 0a 20 20 20 20 20  strSql));..     
3500: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
3510: 20 20 20 20 49 6e 74 50 74 72 20 73 74 6d 74 20      IntPtr stmt 
3520: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
3530: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72        IntPtr ptr
3540: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
3550: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d  .      int len =
3560: 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e   0;..      int n
3570: 20 3d 20 31 37 3b 0d 0a 20 20 20 20 20 20 69 6e   = 17;..      in
3580: 74 20 72 65 74 72 69 65 73 20 3d 20 30 3b 0d 0a  t retries = 0;..
3590: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d        byte[] b =
35a0: 20 54 6f 55 54 46 38 28 73 74 72 53 71 6c 29 3b   ToUTF8(strSql);
35b0: 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 74  ..      string t
35c0: 79 70 65 64 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d  ypedefs = null;.
35d0: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61  .      SQLiteSta
35e0: 74 65 6d 65 6e 74 20 63 6d 64 20 3d 20 6e 75 6c  tement cmd = nul
35f0: 6c 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d  l;..      Random
3600: 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20   rnd = null;..  
3610: 20 20 20 20 75 69 6e 74 20 73 74 61 72 74 74 69      uint startti
3620: 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69 72  ck = (uint)Envir
3630: 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74  onment.TickCount
3640: 3b 0d 0a 0d 0a 20 20 20 20 20 20 47 43 48 61 6e  ;....      GCHan
3650: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 47 43 48  dle handle = GCH
3660: 61 6e 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20 47  andle.Alloc(b, G
3670: 43 48 61 6e 64 6c 65 54 79 70 65 2e 50 69 6e 6e  CHandleType.Pinn
3680: 65 64 29 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50  ed);..      IntP
3690: 74 72 20 70 73 71 6c 20 3d 20 68 61 6e 64 6c 65  tr psql = handle
36a0: 2e 41 64 64 72 4f 66 50 69 6e 6e 65 64 4f 62 6a  .AddrOfPinnedObj
36b0: 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 74 72  ect();..      tr
36c0: 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  y..      {..    
36d0: 20 20 20 20 77 68 69 6c 65 20 28 28 6e 20 3d 3d      while ((n ==
36e0: 20 31 37 20 7c 7c 20 6e 20 3d 3d 20 36 20 7c 7c   17 || n == 6 ||
36f0: 20 6e 20 3d 3d 20 35 29 20 26 26 20 72 65 74 72   n == 5) && retr
3700: 69 65 73 20 3c 20 33 29 0d 0a 20 20 20 20 20 20  ies < 3)..      
3710: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
3720: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
3730: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
3740: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
3750: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74  ite3_prepare_int
3760: 65 72 6f 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c  erop(_sql, psql,
3770: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 6f   b.Length - 1, o
3780: 75 74 20 73 74 6d 74 2c 20 6f 75 74 20 70 74 72  ut stmt, out ptr
3790: 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 23 65 6c  , out len);..#el
37a0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 20  se..          n 
37b0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
37c0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72  thods.sqlite3_pr
37d0: 65 70 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c  epare(_sql, psql
37e0: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
37f0: 6f 75 74 20 73 74 6d 74 2c 20 6f 75 74 20 70 74  out stmt, out pt
3800: 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c  r);..          l
3810: 65 6e 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69 66  en = -1;..#endif
3820: 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
3830: 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
3840: 5f 53 54 41 54 45 4d 45 4e 54 0d 0a 20 20 20 20  _STATEMENT..    
3850: 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
3860: 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72  eLine(String.For
3870: 6d 61 74 28 22 50 72 65 70 61 72 65 3a 20 7b 30  mat("Prepare: {0
3880: 7d 22 2c 20 73 74 6d 74 29 29 3b 0d 0a 23 65 6e  }", stmt));..#en
3890: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  dif....         
38a0: 20 69 66 20 28 6e 20 3d 3d 20 31 37 29 0d 0a 20   if (n == 17).. 
38b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72 69             retri
38c0: 65 73 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  es++;..         
38d0: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 31   else if (n == 1
38e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
38f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3900: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47  String.Compare(G
3910: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 22  etLastError(), "
3920: 6e 65 61 72 20 5c 22 54 59 50 45 53 5c 22 3a 20  near \"TYPES\": 
3930: 73 79 6e 74 61 78 20 65 72 72 6f 72 22 2c 20 53  syntax error", S
3940: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
3950: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
3960: 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  e) == 0)..      
3970: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3980: 20 20 20 20 20 20 20 69 6e 74 20 70 6f 73 20 3d         int pos =
3990: 20 73 74 72 53 71 6c 2e 49 6e 64 65 78 4f 66 28   strSql.IndexOf(
39a0: 27 3b 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ';');..         
39b0: 20 20 20 20 20 69 66 20 28 70 6f 73 20 3d 3d 20       if (pos == 
39c0: 2d 31 29 20 70 6f 73 20 3d 20 73 74 72 53 71 6c  -1) pos = strSql
39d0: 2e 4c 65 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a  .Length - 1;....
39e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
39f0: 70 65 64 65 66 73 20 3d 20 73 74 72 53 71 6c 2e  pedefs = strSql.
3a00: 53 75 62 73 74 72 69 6e 67 28 30 2c 20 70 6f 73  Substring(0, pos
3a10: 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20   + 1);..        
3a20: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
3a30: 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28  trSql.Substring(
3a40: 70 6f 73 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20  pos + 1);....   
3a50: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52 65             strRe
3a60: 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 0d 0a 20 20  main = "";....  
3a70: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
3a80: 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26  e (cmd == null &
3a90: 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  & strSql.Length 
3aa0: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
3ab0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3ac0: 20 20 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65         cmd = Pre
3ad0: 70 61 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c  pare(cnn, strSql
3ae0: 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65  , previous, time
3af0: 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74 72 52 65  outMS, out strRe
3b00: 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  main);..        
3b10: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
3b20: 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20   strRemain;..   
3b30: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
3b50: 20 28 63 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a   (cmd != null)..
3b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b70: 63 6d 64 2e 53 65 74 54 79 70 65 73 28 74 79 70  cmd.SetTypes(typ
3b80: 65 64 65 66 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  edefs);....     
3b90: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3ba0: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  cmd;..          
3bb0: 20 20 7d 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    }..#if !PLATFO
3bc0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
3bd0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
3be0: 20 65 6c 73 65 20 69 66 20 28 5f 62 75 69 6c 64   else if (_build
3bf0: 69 6e 67 53 63 68 65 6d 61 20 3d 3d 20 66 61 6c  ingSchema == fal
3c00: 73 65 20 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d  se && String.Com
3c10: 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f  pare(GetLastErro
3c20: 72 28 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68  r(), 0, "no such
3c30: 20 74 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48   table: TEMP.SCH
3c40: 45 4d 41 22 2c 20 30 2c 20 32 36 2c 20 53 74 72  EMA", 0, 26, Str
3c50: 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
3c60: 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
3c70: 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
3c80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3c90: 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d       strRemain =
3ca0: 20 22 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   "";..          
3cb0: 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68      _buildingSch
3cc0: 65 6d 61 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ema = true;..   
3cd0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
3cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3d00: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
3d10: 74 65 6e 73 69 6f 6e 73 20 65 78 74 20 3d 20 28  tensions ext = (
3d20: 28 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65  (IServiceProvide
3d30: 72 29 53 51 4c 69 74 65 46 61 63 74 6f 72 79 2e  r)SQLiteFactory.
3d40: 49 6e 73 74 61 6e 63 65 29 2e 47 65 74 53 65 72  Instance).GetSer
3d50: 76 69 63 65 28 74 79 70 65 6f 66 28 49 53 51 4c  vice(typeof(ISQL
3d60: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
3d70: 6f 6e 73 29 29 20 61 73 20 49 53 51 4c 69 74 65  ons)) as ISQLite
3d80: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
3d90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3da0: 20 20 20 20 20 69 66 20 28 65 78 74 20 21 3d 20       if (ext != 
3db0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
3dc0: 20 20 20 20 20 20 20 20 20 65 78 74 2e 42 75 69           ext.Bui
3dd0: 6c 64 54 65 6d 70 53 63 68 65 6d 61 28 63 6e 6e  ldTempSchema(cnn
3de0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
3df0: 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64        while (cmd
3e00: 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53   == null && strS
3e10: 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  ql.Length > 0)..
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3e40: 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61       cmd = Prepa
3e50: 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20  re(cnn, strSql, 
3e60: 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75  previous, timeou
3e70: 74 4d 53 2c 20 6f 75 74 20 73 74 72 52 65 6d 61  tMS, out strRema
3e80: 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  in);..          
3e90: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
3ea0: 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20   strRemain;..   
3eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
3ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3ed0: 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20    return cmd;.. 
3ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
3ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
3f00: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
3f10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3f20: 20 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e          _buildin
3f30: 67 53 63 68 65 6d 61 20 3d 20 66 61 6c 73 65 3b  gSchema = false;
3f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3f50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
3f60: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
3f70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
3f80: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 36   else if (n == 6
3f90: 20 7c 7c 20 6e 20 3d 3d 20 35 29 20 2f 2f 20 4c   || n == 5) // L
3fa0: 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61  ocked -- delay a
3fb0: 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65   small amount be
3fc0: 66 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20  fore retrying.. 
3fd0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3fe0: 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20          // Keep 
3ff0: 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  trying..        
4000: 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e      if (rnd == n
4010: 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69  ull) // First ti
4020: 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74  me we've encount
4030: 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20  ered the lock.. 
4040: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64               rnd
4050: 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b   = new Random();
4060: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4070: 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65  // If we've exce
4080: 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64  eded the command
4090: 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65  's timeout, give
40a0: 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e   up and throw an
40b0: 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
40c0: 20 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e      if ((uint)En
40d0: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
40e0: 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20  unt - starttick 
40f0: 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20  > timeoutMS)..  
4100: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4110: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
4120: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
4130: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
4140: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
4150: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4160: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
4170: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4180: 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72          // Other
4190: 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61  wise sleep for a
41a0: 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f   random amount o
41b0: 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30  f time up to 150
41c0: 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ms..            
41d0: 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69    System.Threadi
41e0: 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28  ng.Thread.Sleep(
41f0: 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29  rnd.Next(1, 150)
4200: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4210: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
4220: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4230: 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20       if (n > 0) 
4240: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
4250: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
4260: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
4270: 0a 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61  .        strRema
4280: 69 6e 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  in = UTF8ToStrin
4290: 67 28 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a  g(ptr, len);....
42a0: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 6d 74          if (stmt
42b0: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
42c0: 20 63 6d 64 20 3d 20 6e 65 77 20 53 51 4c 69 74   cmd = new SQLit
42d0: 65 53 74 61 74 65 6d 65 6e 74 28 74 68 69 73 2c  eStatement(this,
42e0: 20 66 6c 61 67 73 2c 20 6e 65 77 20 53 51 4c 69   flags, new SQLi
42f0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
4300: 65 28 5f 73 71 6c 2c 20 73 74 6d 74 29 2c 20 73  e(_sql, stmt), s
4310: 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28  trSql.Substring(
4320: 30 2c 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68  0, strSql.Length
4330: 20 2d 20 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e   - strRemain.Len
4340: 67 74 68 29 2c 20 70 72 65 76 69 6f 75 73 29 3b  gth), previous);
4350: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
4360: 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d  rn cmd;..      }
4370: 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d  ..      finally.
4380: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
4390: 20 20 68 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b    handle.Free();
43a0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
43b0: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
43c0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
43d0: 52 4b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  RK..    protecte
43e0: 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f  d static void Lo
43f0: 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74  gBind(SQLiteStat
4400: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
4410: 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  le, int index)..
4420: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
4430: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
4440: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
4450: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
4460: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 30 2c 20  g.LogMessage(0, 
4470: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
4480: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
4490: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
44a0: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
44b0: 20 61 73 20 4e 55 4c 4c 2e 2e 2e 22 2c 0d 0a 20   as NULL...",.. 
44c0: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
44d0: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 29 29  eIntPtr, index))
44e0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
44f0: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
4500: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
4510: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
4520: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
4530: 69 6e 64 65 78 2c 20 56 61 6c 75 65 54 79 70 65  index, ValueType
4540: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
4550: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
4560: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
4570: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
4580: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
4590: 73 73 61 67 65 28 30 2c 20 53 74 72 69 6e 67 2e  ssage(0, String.
45a0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
45b0: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
45c0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
45d0: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
45e0: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
45f0: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
4600: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
4610: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
4620: 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 2c  value.GetType(),
4630: 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d   value));..    }
4640: 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
4650: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 46 6f  static string Fo
4660: 72 6d 61 74 44 61 74 65 54 69 6d 65 28 44 61 74  rmatDateTime(Dat
4670: 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20  eTime value)..  
4680: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 74 72    {..        Str
4690: 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c  ingBuilder resul
46a0: 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  t = new StringBu
46b0: 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20  ilder();....    
46c0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
46d0: 64 28 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67  d(value.ToString
46e0: 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a  ("yyyy-MM-ddTHH:
46f0: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22 29  mm:ss.FFFFFFFK")
4700: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
4710: 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d  lt.Append(' ');.
4720: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
4730: 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b 69 6e  Append(value.Kin
4740: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73  d);..        res
4750: 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b  ult.Append(' ');
4760: 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74  ..        result
4770: 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54 69  .Append(value.Ti
4780: 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  cks);....       
4790: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54   return result.T
47a0: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
47b0: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
47c0: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
47d0: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
47e0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
47f0: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
4800: 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d  DateTime value).
4810: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
4820: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
4830: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
4840: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
4850: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 30 2c  og.LogMessage(0,
4860: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
4870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69  .            "Bi
4880: 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  nding statement 
4890: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31  {0} paramter #{1
48a0: 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69  } as type {2} wi
48b0: 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d  th value {{{3}}}
48c0: 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
48d0: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
48e0: 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 44   index, typeof(D
48f0: 61 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74  ateTime), Format
4900: 44 61 74 65 54 69 6d 65 28 76 61 6c 75 65 29 29  DateTime(value))
4910: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
4920: 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69   protected stati
4930: 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53  c void LogBind(S
4940: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
4950: 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74  ndle handle, int
4960: 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76   index, string v
4970: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
4980: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
4990: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
49a0: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  le;....        S
49b0: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
49c0: 61 67 65 28 30 2c 20 53 74 72 69 6e 67 2e 46 6f  age(0, String.Fo
49d0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
49e0: 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74     "Binding stat
49f0: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
4a00: 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20  er #{1} as type 
4a10: 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b  {2} with value {
4a20: 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20  {{3}}}...",..   
4a30: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
4a40: 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79  ntPtr, index, ty
4a50: 70 65 6f 66 28 53 74 72 69 6e 67 29 2c 20 28 76  peof(String), (v
4a60: 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  alue != null) ? 
4a70: 76 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22  value : "<null>"
4a80: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
4a90: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
4aa0: 20 73 74 72 69 6e 67 20 54 6f 48 65 78 61 64 65   string ToHexade
4ab0: 63 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a 20 20  cimalString(..  
4ac0: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 61 72 72        byte[] arr
4ad0: 61 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  ay..        ).. 
4ae0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
4af0: 20 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29   (array == null)
4b00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
4b10: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
4b20: 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c        StringBuil
4b30: 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  der result = new
4b40: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 61   StringBuilder(a
4b50: 72 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20 32 29  rray.Length * 2)
4b60: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ;....        int
4b70: 20 6c 65 6e 67 74 68 20 3d 20 61 72 72 61 79 2e   length = array.
4b80: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
4b90: 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65     for (int inde
4ba0: 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c  x = 0; index < l
4bb0: 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d  ength; index++).
4bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73  .            res
4bd0: 75 6c 74 2e 41 70 70 65 6e 64 28 61 72 72 61 79  ult.Append(array
4be0: 5b 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69 6e 67  [index].ToString
4bf0: 28 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20 20 20  ("x2"));....    
4c00: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
4c10: 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  t.ToString();.. 
4c20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74     }....    prot
4c30: 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69  ected static voi
4c40: 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65  d LogBind(SQLite
4c50: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
4c60: 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65  handle, int inde
4c70: 78 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29  x, byte[] value)
4c80: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4c90: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
4ca0: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
4cb0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
4cc0: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 30  Log.LogMessage(0
4cd0: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
4ce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42  ..            "B
4cf0: 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  inding statement
4d00: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b   {0} paramter #{
4d10: 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77  1} as type {2} w
4d20: 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d  ith value {{{3}}
4d30: 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  }...",..        
4d40: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
4d50: 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28  , index, typeof(
4d60: 42 79 74 65 5b 5d 29 2c 20 28 76 61 6c 75 65 20  Byte[]), (value 
4d70: 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 48 65 78  != null) ? ToHex
4d80: 61 64 65 63 69 6d 61 6c 53 74 72 69 6e 67 28 76  adecimalString(v
4d90: 61 6c 75 65 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22  alue) : "<null>"
4da0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64  ));..    }..#end
4db0: 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  if....    intern
4dc0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
4dd0: 20 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53 51 4c   Bind_Double(SQL
4de0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
4df0: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
4e00: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
4e10: 69 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c  int index, doubl
4e20: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  e value)..    {.
4e30: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
4e40: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
4e50: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
4e60: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69  lite_stmt;....#i
4e70: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
4e80: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
4e90: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
4ea0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
4eb0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
4ec0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
4ed0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
4ee0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
4f00: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
4f10: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
4f20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4f30: 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e   int n = UnsafeN
4f40: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
4f50: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
4f60: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
4f70: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
4f80: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20          int n = 
4f90: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4fa0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
4fb0: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
4fc0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
4fd0: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ef value);..#end
4fe0: 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  if..        if (
4ff0: 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77  n > 0) throw new
5000: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
5010: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
5020: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
5030: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
5040: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49  ride void Bind_I
5050: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
5060: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
5070: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5080: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
5090: 78 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20  x, int value).. 
50a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
50b0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
50c0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
50d0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
50e0: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
50f0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
5100: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
5110: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
5120: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
5130: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
5140: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5150: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
5160: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5170: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
5180: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
5190: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
51a0: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e  if....        in
51b0: 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  t n = UnsafeNati
51c0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
51d0: 33 5f 62 69 6e 64 5f 69 6e 74 28 68 61 6e 64 6c  3_bind_int(handl
51e0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
51f0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
5200: 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20   > 0) throw new 
5210: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
5220: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
5230: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
5240: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
5250: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49  ide void Bind_UI
5260: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
5270: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
5280: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5290: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
52a0: 78 2c 20 75 69 6e 74 20 76 61 6c 75 65 29 0d 0a  x, uint value)..
52b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
52c0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
52d0: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
52e0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
52f0: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
5300: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
5310: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
5320: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
5330: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
5340: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
5350: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5360: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
5370: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5380: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
5390: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
53a0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
53b0: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  dif....        i
53c0: 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nt n = UnsafeNat
53d0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
53e0: 65 33 5f 62 69 6e 64 5f 75 69 6e 74 28 68 61 6e  e3_bind_uint(han
53f0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
5400: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e);..        if 
5410: 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65  (n > 0) throw ne
5420: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
5430: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
5440: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
5450: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
5460: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
5470: 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74  Int64(SQLiteStat
5480: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
5490: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
54a0: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
54b0: 65 78 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d  ex, long value).
54c0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
54d0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
54e0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
54f0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
5500: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
5510: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
5520: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
5530: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
5540: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5550: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
5560: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
5570: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
5580: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5590: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
55a0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
55b0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
55c0: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20          int n = 
55d0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
55e0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
55f0: 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69  _int64(handle, i
5600: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
5610: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 69 6e  else..        in
5620: 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  t n = UnsafeNati
5630: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5640: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74  3_bind_int64_int
5650: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
5660: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
5670: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
5680: 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f   if (n > 0) thro
5690: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
56a0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
56b0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
56c0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
56d0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
56e0: 69 6e 64 5f 55 49 6e 74 36 34 28 53 51 4c 69 74  ind_UInt64(SQLit
56f0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
5700: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5710: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
5720: 74 20 69 6e 64 65 78 2c 20 75 6c 6f 6e 67 20 76  t index, ulong v
5730: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
5740: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
5750: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
5760: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
5770: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21  e_stmt;....#if !
5780: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
5790: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
57a0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
57b0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
57c0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
57d0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
57e0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
57f0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5800: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
5810: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
5820: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
5830: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e   }....        in
5840: 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  t n = UnsafeNati
5850: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5860: 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 28 68 61  3_bind_uint64(ha
5870: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
5880: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
5890: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73       int n = Uns
58a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
58b0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69  .sqlite3_bind_ui
58c0: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
58d0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
58e0: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
58f0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e  .        if (n >
5900: 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51   0) throw new SQ
5910: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
5920: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
5930: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5940: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
5950: 65 20 76 6f 69 64 20 42 69 6e 64 5f 54 65 78 74  e void Bind_Text
5960: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
5970: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
5980: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
5990: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 73  gs, int index, s
59a0: 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20  tring value)..  
59b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
59c0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
59d0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
59e0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
59f0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
5a00: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
5a10: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
5a20: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
5a30: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
5a40: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
5a50: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
5a60: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
5a70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5a80: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
5a90: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
5aa0: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
5ab0: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 79 74  f....        byt
5ac0: 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76  e[] b = ToUTF8(v
5ad0: 61 6c 75 65 29 3b 0d 0a 0d 0a 23 69 66 20 21 50  alue);....#if !P
5ae0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
5af0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
5b00: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
5b10: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5b20: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
5b30: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5b40: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
5b50: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
5b60: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
5b70: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
5b80: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
5b90: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
5ba0: 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e   int n = UnsafeN
5bb0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5bc0: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68  ite3_bind_text(h
5bd0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c  andle, index, b,
5be0: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28   b.Length - 1, (
5bf0: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
5c00: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30         if (n > 0
5c10: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
5c20: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
5c30: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
5c40: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
5c50: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5c60: 76 6f 69 64 20 42 69 6e 64 5f 44 61 74 65 54 69  void Bind_DateTi
5c70: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
5c80: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
5c90: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
5ca0: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
5cb0: 20 44 61 74 65 54 69 6d 65 20 64 74 29 0d 0a 20   DateTime dt).. 
5cc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
5cd0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
5ce0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
5cf0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
5d00: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
5d10: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
5d20: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
5d30: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
5d40: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
5d50: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
5d60: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5d70: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
5d80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5d90: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
5da0: 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d 0a 20 20   index, dt);..  
5db0: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
5dc0: 0a 0d 0a 20 20 20 20 20 20 20 20 73 77 69 74 63  ...        switc
5dd0: 68 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d  h (_datetimeForm
5de0: 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  at)..        {..
5df0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
5e00: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
5e10: 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20 20 20  ts.Ticks:..     
5e20: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e40: 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20 64    long value = d
5e50: 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 23 69 66 20  t.Ticks;....#if 
5e60: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
5e70: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
5e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e90: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
5ea0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
5eb0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
5ec0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5ed0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ef0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f                Lo
5f10: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
5f20: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
5f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5f50: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e             int n
5f60: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
5f70: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
5f80: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
5f90: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
5fa0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
5fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
5fc0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
5fd0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
5fe0: 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65  _bind_int64_inte
5ff0: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
6000: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
6010: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
6020: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6030: 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77  n > 0) throw new
6040: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
6050: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
6060: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
6070: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
6080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6090: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
60a0: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
60b0: 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61  Formats.JulianDa
60c0: 79 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y:..            
60d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
60e0: 20 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c             doubl
60f0: 65 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69  e value = ToJuli
6100: 61 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 23 69  anDay(dt);....#i
6110: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
6120: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
6130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6140: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
6150: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6160: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
6170: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6180: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
6190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
61a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
61b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61c0: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
61d0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
61e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6200: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
6210: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
6220: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6230: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e  _bind_double(han
6240: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
6250: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
6260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6270: 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  int n = UnsafeNa
6280: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
6290: 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f  te3_bind_double_
62a0: 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20  interop(handle, 
62b0: 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65  index, ref value
62c0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
62d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62e0: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
62f0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
6300: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
6310: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
6320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
6330: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
6340: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6350: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
6360: 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78  DateFormats.Unix
6370: 45 70 6f 63 68 3a 0d 0a 20 20 20 20 20 20 20 20  Epoch:..        
6380: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
63a0: 6f 6e 67 20 76 61 6c 75 65 20 3d 20 43 6f 6e 76  ong value = Conv
63b0: 65 72 74 2e 54 6f 49 6e 74 36 34 28 64 74 2e 53  ert.ToInt64(dt.S
63c0: 75 62 74 72 61 63 74 28 55 6e 69 78 45 70 6f 63  ubtract(UnixEpoc
63d0: 68 29 2e 54 6f 74 61 6c 53 65 63 6f 6e 64 73 29  h).TotalSeconds)
63e0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
63f0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
6400: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
6410: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c           if ((fl
6420: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
6430: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
6440: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
6450: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
6460: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
6470: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6490: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
64a0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
64b0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
64c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
64d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64e0: 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61      int n = Unsa
64f0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6500: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
6510: 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  64(handle, index
6520: 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  , value);..#else
6530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6540: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e        int n = Un
6550: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6560: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
6570: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
6580: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
6590: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
65a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
65b0: 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20       if (n > 0) 
65c0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
65d0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
65e0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
65f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6600: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
6610: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6620: 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
6630: 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t:..            
6640: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6650: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
6660: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 64 74 29  ] b = ToUTF8(dt)
6670: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
6680: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
6690: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
66a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c           if ((fl
66b0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
66c0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
66d0: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
66e0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
66f0: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
6700: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6720: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
6730: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29  andle, index, b)
6740: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6750: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
6760: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6770: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20          int n = 
6780: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6790: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
67a0: 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e  _text(handle, in
67b0: 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68  dex, b, b.Length
67c0: 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d   - 1, (IntPtr)(-
67d0: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  1));..          
67e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
67f0: 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53  > 0) throw new S
6800: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
6810: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
6820: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6830: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
6840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6850: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
6860: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
6870: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
6880: 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69  d Bind_Blob(SQLi
6890: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
68a0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
68b0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
68c0: 6e 74 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d  nt index, byte[]
68d0: 20 62 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20 20   blobData)..    
68e0: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
68f0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
6900: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
6910: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
6920: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
6930: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
6940: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
6950: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
6960: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
6970: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
6980: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
6990: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
69a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
69b0: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
69c0: 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 29 3b 0d  dex, blobData);.
69d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
69e0: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e  if....        in
69f0: 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  t n = UnsafeNati
6a00: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6a10: 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 68 61 6e 64  3_bind_blob(hand
6a20: 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44  le, index, blobD
6a30: 61 74 61 2c 20 62 6c 6f 62 44 61 74 61 2e 4c 65  ata, blobData.Le
6a40: 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28 2d  ngth, (IntPtr)(-
6a50: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  1));..        if
6a60: 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e   (n > 0) throw n
6a70: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
6a80: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
6a90: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
6aa0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6ab0: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
6ac0: 5f 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74  _Null(SQLiteStat
6ad0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
6ae0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6af0: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
6b00: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
6b10: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
6b20: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
6b30: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
6b40: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
6b50: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
6b60: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
6b70: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
6b80: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6b90: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
6ba0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6bb0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
6bc0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6bd0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
6be0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a  andle, index);..
6bf0: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
6c00: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  f....        int
6c10: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
6c20: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6c30: 5f 62 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c  _bind_null(handl
6c40: 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  e, index);..    
6c50: 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74      if (n > 0) t
6c60: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
6c70: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
6c80: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
6c90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
6ca0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
6cb0: 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74   Bind_ParamCount
6cc0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
6cd0: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
6ce0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
6cf0: 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  gs)..    {..    
6d00: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
6d10: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
6d20: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
6d30: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69  stmt;..        i
6d40: 6e 74 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66  nt value = Unsaf
6d50: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6d60: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
6d70: 6d 65 74 65 72 5f 63 6f 75 6e 74 28 68 61 6e 64  meter_count(hand
6d80: 6c 65 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  le);....#if !PLA
6d90: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
6da0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
6db0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
6dc0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6dd0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
6de0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6df0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
6e00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6e10: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
6e20: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
6e30: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
6e40: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
6e50: 4d 65 73 73 61 67 65 28 30 2c 20 53 74 72 69 6e  Message(0, Strin
6e60: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
6e70: 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61 74             "Stat
6e80: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
6e90: 65 72 20 63 6f 75 6e 74 20 69 73 20 7b 31 7d 2e  er count is {1}.
6ea0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
6eb0: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
6ec0: 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  , value));..    
6ed0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
6ee0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6ef0: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  value;..    }...
6f00: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6f10: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 42 69  erride string Bi
6f20: 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28 53 51 4c  nd_ParamName(SQL
6f30: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
6f40: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
6f50: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
6f60: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
6f70: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
6f80: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
6f90: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
6fa0: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20  sqlite_stmt;..  
6fb0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
6fc0: 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  e;....#if !SQLIT
6fd0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
6fe0: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20      int len;..  
6ff0: 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46        name = UTF
7000: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
7010: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
7020: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
7030: 65 74 65 72 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  eter_name_intero
7040: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
7050: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
7060: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
7070: 20 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74   name = UTF8ToSt
7080: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
7090: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
70a0: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
70b0: 6e 61 6d 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64  name(handle, ind
70c0: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
70d0: 66 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  f....#if !PLATFO
70e0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
70f0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
7100: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
7110: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7120: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
7130: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7140: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
7150: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7160: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
7170: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
7180: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7190: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
71a0: 73 61 67 65 28 30 2c 20 53 74 72 69 6e 67 2e 46  sage(0, String.F
71b0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
71c0: 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65          "Stateme
71d0: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
71e0: 23 7b 31 7d 20 6e 61 6d 65 20 69 73 20 7b 7b 7b  #{1} name is {{{
71f0: 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20  2}}}.",..       
7200: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
7210: 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 6e 61  ntPtr, index, na
7220: 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  me));..        }
7230: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
7240: 20 20 20 20 72 65 74 75 72 6e 20 6e 61 6d 65 3b      return name;
7250: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
7260: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
7270: 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 49   int Bind_ParamI
7280: 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61 74 65  ndex(SQLiteState
7290: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
72a0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
72b0: 20 66 6c 61 67 73 2c 20 73 74 72 69 6e 67 20 70   flags, string p
72c0: 61 72 61 6d 4e 61 6d 65 29 0d 0a 20 20 20 20 7b  aramName)..    {
72d0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
72e0: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
72f0: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
7300: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20  qlite_stmt;..   
7310: 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d       int index =
7320: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
7330: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
7340: 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65  d_parameter_inde
7350: 78 28 68 61 6e 64 6c 65 2c 20 54 6f 55 54 46 38  x(handle, ToUTF8
7360: 28 70 61 72 61 6d 4e 61 6d 65 29 29 3b 0d 0a 0d  (paramName));...
7370: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
7380: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
7390: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
73a0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
73b0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
73c0: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
73d0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
73e0: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
73f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  {..            I
7400: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
7410: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
7420: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
7430: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
7440: 28 30 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  (0, String.Forma
7450: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
7460: 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b      "Statement {
7470: 30 7d 20 70 61 72 61 6d 74 65 72 20 69 6e 64 65  0} paramter inde
7480: 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d  x of name {{{1}}
7490: 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20  } is #{2}.",..  
74a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
74b0: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70 61 72 61  ndleIntPtr, para
74c0: 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b 0d  mName, index));.
74d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
74e0: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  if....        re
74f0: 74 75 72 6e 20 69 6e 64 65 78 3b 0d 0a 20 20 20  turn index;..   
7500: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
7510: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
7520: 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51 4c 69  ColumnCount(SQLi
7530: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
7540: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7550: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
7560: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
7570: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
7580: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
7590: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
75a0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
75b0: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
75c0: 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  nName(SQLiteStat
75d0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
75e0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
75f0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
7600: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
7610: 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  en;..      retur
7620: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
7630: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
7640: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
7650: 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  n_name_interop(s
7660: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
7670: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e  , index, out len
7680: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
7690: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
76a0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
76b0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
76c0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
76d0: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
76e0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
76f0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
7700: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
7710: 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41  l override TypeA
7720: 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66  ffinity ColumnAf
7730: 66 69 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61  finity(SQLiteSta
7740: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
7750: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
7760: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
7770: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7780: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
7790: 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  type(stmt._sqlit
77a0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
77b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
77c0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
77d0: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70  string ColumnTyp
77e0: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
77f0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
7800: 78 2c 20 6f 75 74 20 54 79 70 65 41 66 66 69 6e  x, out TypeAffin
7810: 69 74 79 20 6e 41 66 66 69 6e 69 74 79 29 0d 0a  ity nAffinity)..
7820: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
7830: 20 6c 65 6e 3b 0d 0a 23 69 66 20 21 53 51 4c 49   len;..#if !SQLI
7840: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
7850: 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
7860: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7870: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
7880: 5f 64 65 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f  _decltype_intero
7890: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
78a0: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
78b0: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
78c0: 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20      len = -1;.. 
78d0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20       IntPtr p = 
78e0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
78f0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
7900: 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73 74 6d 74  mn_decltype(stmt
7910: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
7920: 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ndex);..#endif..
7930: 20 20 20 20 20 20 6e 41 66 66 69 6e 69 74 79 20        nAffinity 
7940: 3d 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  = ColumnAffinity
7950: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
7960: 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 21 3d  ..      if (p !=
7970: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65   IntPtr.Zero) re
7980: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
7990: 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20  g(p, len);..    
79a0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d    else..      {.
79b0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b  .        string[
79c0: 5d 20 61 72 20 3d 20 73 74 6d 74 2e 54 79 70 65  ] ar = stmt.Type
79d0: 44 65 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a 20 20  Definitions;..  
79e0: 20 20 20 20 20 20 69 66 20 28 61 72 20 21 3d 20        if (ar != 
79f0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
7a00: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
7a10: 69 6e 64 65 78 20 3c 20 61 72 2e 4c 65 6e 67 74  index < ar.Lengt
7a20: 68 20 26 26 20 61 72 5b 69 6e 64 65 78 5d 20 21  h && ar[index] !
7a30: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
7a40: 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 5b 69       return ar[i
7a50: 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20  ndex];..        
7a60: 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
7a70: 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  n String.Empty;.
7a80: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 73 77 69  ...        //swi
7a90: 74 63 68 20 28 6e 41 66 66 69 6e 69 74 79 29 0d  tch (nAffinity).
7aa0: 0a 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20  .        //{..  
7ab0: 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54        //  case T
7ac0: 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
7ad0: 34 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  4:..        //  
7ae0: 20 20 72 65 74 75 72 6e 20 22 42 49 47 49 4e 54    return "BIGINT
7af0: 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ";..        //  
7b00: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
7b10: 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20  y.Double:..     
7b20: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
7b30: 22 44 4f 55 42 4c 45 22 3b 0d 0a 20 20 20 20 20  "DOUBLE";..     
7b40: 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65     //  case Type
7b50: 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a  Affinity.Blob:..
7b60: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65          //    re
7b70: 74 75 72 6e 20 22 42 4c 4f 42 22 3b 0d 0a 20 20  turn "BLOB";..  
7b80: 20 20 20 20 20 20 2f 2f 20 20 64 65 66 61 75 6c        //  defaul
7b90: 74 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  t:..        //  
7ba0: 20 20 72 65 74 75 72 6e 20 22 54 45 58 54 22 3b    return "TEXT";
7bb0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 20  ..        //}.. 
7bc0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
7bd0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
7be0: 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d  erride int Colum
7bf0: 6e 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61  nIndex(SQLiteSta
7c00: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72  tement stmt, str
7c10: 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 0d  ing columnName).
7c20: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
7c30: 74 20 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f 75 6e  t x = ColumnCoun
7c40: 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20  t(stmt);....    
7c50: 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30    for (int n = 0
7c60: 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d 0a 20  ; n < x; n++).. 
7c70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7c80: 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61  if (String.Compa
7c90: 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 43  re(columnName, C
7ca0: 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d 74 2c 20  olumnName(stmt, 
7cb0: 6e 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  n), StringCompar
7cc0: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
7cd0: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
7ce0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7cf0: 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  n;..      }..   
7d00: 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20     return -1;.. 
7d10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
7d20: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
7d30: 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69 67 69  ring ColumnOrigi
7d40: 6e 61 6c 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  nalName(SQLiteSt
7d50: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
7d60: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
7d70: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
7d80: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
7d90: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74   len;..      ret
7da0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
7db0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
7dc0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
7dd0: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f  umn_origin_name_
7de0: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
7df0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
7e00: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
7e10: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
7e20: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
7e30: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
7e40: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7e50: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
7e60: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
7e70: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
7e80: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
7e90: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
7ea0: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
7eb0: 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65  g ColumnDatabase
7ec0: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
7ed0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
7ee0: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
7ef0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
7f00: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
7f10: 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n;..      return
7f20: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
7f30: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7f40: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
7f50: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69  _database_name_i
7f60: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
7f70: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
7f80: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
7f90: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
7fa0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
7fb0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
7fc0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
7fd0: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
7fe0: 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ame(stmt._sqlite
7ff0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d  _stmt, index), -
8000: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
8010: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
8020: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
8030: 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61  ng ColumnTableNa
8040: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
8050: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
8060: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
8070: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
8080: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
8090: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
80a0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
80b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
80c0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
80d0: 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  able_name_intero
80e0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
80f0: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
8100: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
8110: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
8120: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
8130: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
8140: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
8150: 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74  _table_name(stmt
8160: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
8170: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
8180: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
8190: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
81a0: 69 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d  ide void ColumnM
81b0: 65 74 61 44 61 74 61 28 73 74 72 69 6e 67 20 64  etaData(string d
81c0: 61 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20  ataBase, string 
81d0: 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f  table, string co
81e0: 6c 75 6d 6e 2c 20 6f 75 74 20 73 74 72 69 6e 67  lumn, out string
81f0: 20 64 61 74 61 54 79 70 65 2c 20 6f 75 74 20 73   dataType, out s
8200: 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71  tring collateSeq
8210: 75 65 6e 63 65 2c 20 6f 75 74 20 62 6f 6f 6c 20  uence, out bool 
8220: 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 62 6f 6f  notNull, out boo
8230: 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75  l primaryKey, ou
8240: 74 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65  t bool autoIncre
8250: 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ment)..    {..  
8260: 20 20 20 20 49 6e 74 50 74 72 20 64 61 74 61 54      IntPtr dataT
8270: 79 70 65 50 74 72 3b 0d 0a 20 20 20 20 20 20 49  ypePtr;..      I
8280: 6e 74 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72  ntPtr collSeqPtr
8290: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6e 6f  ;..      int nno
82a0: 74 4e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e  tNull;..      in
82b0: 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 3b 0d 0a  t nprimaryKey;..
82c0: 20 20 20 20 20 20 69 6e 74 20 6e 61 75 74 6f 49        int nautoI
82d0: 6e 63 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  nc;..      int n
82e0: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 64 74 4c  ;..      int dtL
82f0: 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63  en;..      int c
8300: 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  sLen;....#if !SQ
8310: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
8320: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
8330: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8340: 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d  ite3_table_colum
8350: 6e 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74 65 72  n_metadata_inter
8360: 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  op(_sql, ToUTF8(
8370: 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46  dataBase), ToUTF
8380: 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38  8(table), ToUTF8
8390: 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 64 61  (column), out da
83a0: 74 61 54 79 70 65 50 74 72 2c 20 6f 75 74 20 63  taTypePtr, out c
83b0: 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75 74 20 6e  ollSeqPtr, out n
83c0: 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e 70 72  notNull, out npr
83d0: 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20 6e 61  imaryKey, out na
83e0: 75 74 6f 49 6e 63 2c 20 6f 75 74 20 64 74 4c 65  utoInc, out dtLe
83f0: 6e 2c 20 6f 75 74 20 63 73 4c 65 6e 29 3b 0d 0a  n, out csLen);..
8400: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 64 74 4c  #else..      dtL
8410: 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20  en = -1;..      
8420: 63 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20  csLen = -1;.... 
8430: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
8440: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8450: 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d  ite3_table_colum
8460: 6e 5f 6d 65 74 61 64 61 74 61 28 5f 73 71 6c 2c  n_metadata(_sql,
8470: 20 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65   ToUTF8(dataBase
8480: 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29  ), ToUTF8(table)
8490: 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29  , ToUTF8(column)
84a0: 2c 20 6f 75 74 20 64 61 74 61 54 79 70 65 50 74  , out dataTypePt
84b0: 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71 50 74  r, out collSeqPt
84c0: 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c  r, out nnotNull,
84d0: 20 6f 75 74 20 6e 70 72 69 6d 61 72 79 4b 65 79   out nprimaryKey
84e0: 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e 63 29 3b  , out nautoInc);
84f0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
8500: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
8510: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
8520: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
8530: 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  rror());....    
8540: 20 20 64 61 74 61 54 79 70 65 20 3d 20 55 54 46    dataType = UTF
8550: 38 54 6f 53 74 72 69 6e 67 28 64 61 74 61 54 79  8ToString(dataTy
8560: 70 65 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d 0a  pePtr, dtLen);..
8570: 20 20 20 20 20 20 63 6f 6c 6c 61 74 65 53 65 71        collateSeq
8580: 75 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74  uence = UTF8ToSt
8590: 72 69 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72 2c  ring(collSeqPtr,
85a0: 20 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20   csLen);....    
85b0: 20 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e 6f    notNull = (nno
85c0: 74 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20 20  tNull == 1);..  
85d0: 20 20 20 20 70 72 69 6d 61 72 79 4b 65 79 20 3d      primaryKey =
85e0: 20 28 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 3d   (nprimaryKey ==
85f0: 20 31 29 3b 0d 0a 20 20 20 20 20 20 61 75 74 6f   1);..      auto
8600: 49 6e 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61 75  Increment = (nau
8610: 74 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20 20  toInc == 1);..  
8620: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
8630: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75  nal override dou
8640: 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 53 51  ble GetDouble(SQ
8650: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
8660: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
8670: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75      {..      dou
8680: 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20  ble value;..#if 
8690: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
86a0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
86b0: 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65    value = Unsafe
86c0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
86d0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
86e0: 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ble(stmt._sqlite
86f0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
8700: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73  #else..      Uns
8710: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8720: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
8730: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73  double_interop(s
8740: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8750: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c  , index, out val
8760: 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ue);..#endif..  
8770: 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65      return value
8780: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
8790: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
87a0: 65 20 69 6e 74 20 47 65 74 49 6e 74 33 32 28 53  e int GetInt32(S
87b0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
87c0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
87d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
87e0: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
87f0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8800: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d 74  _column_int(stmt
8810: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
8820: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ndex);..    }...
8830: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
8840: 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 49  erride long GetI
8850: 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65  nt64(SQLiteState
8860: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
8870: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
8880: 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 3b 0d      long value;.
8890: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
88a0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
88b0: 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55  .      value = U
88c0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
88d0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
88e0: 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e 5f 73 71  n_int64(stmt._sq
88f0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
8900: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
8910: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
8920: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
8930: 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  umn_int64_intero
8940: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
8950: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
8960: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
8970: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61  .      return va
8980: 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  lue;..    }.... 
8990: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
89a0: 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 54  ride string GetT
89b0: 65 78 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ext(SQLiteStatem
89c0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
89d0: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
89e0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
89f0: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
8a00: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
8a10: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
8a20: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8a30: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
8a40: 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d  text_interop(stm
8a50: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
8a60: 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c  index, out len),
8a70: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
8a80: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
8a90: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
8aa0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8ab0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
8ac0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
8ad0: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b  mt, index), -1);
8ae0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
8af0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
8b00: 6f 76 65 72 72 69 64 65 20 44 61 74 65 54 69 6d  override DateTim
8b10: 65 20 47 65 74 44 61 74 65 54 69 6d 65 28 53 51  e GetDateTime(SQ
8b20: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
8b30: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
8b40: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
8b50: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
8b60: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
8b70: 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65     return ToDate
8b80: 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76  Time(UnsafeNativ
8b90: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8ba0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74  _column_text_int
8bb0: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
8bc0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
8bd0: 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ut len), len);..
8be0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
8bf0: 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55  urn ToDateTime(U
8c00: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
8c10: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
8c20: 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c  n_text(stmt._sql
8c30: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
8c40: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
8c50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
8c60: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
8c70: 6f 6e 67 20 47 65 74 42 79 74 65 73 28 53 51 4c  ong GetBytes(SQL
8c80: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
8c90: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e  t, int index, in
8ca0: 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62  t nDataOffset, b
8cb0: 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74  yte[] bDest, int
8cc0: 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65   nStart, int nLe
8cd0: 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ngth)..    {..  
8ce0: 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55      int nlen = U
8cf0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
8d00: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
8d10: 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71  n_bytes(stmt._sq
8d20: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
8d30: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49  );....      // I
8d40: 66 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e  f no destination
8d50: 20 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20   buffer, return 
8d60: 74 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e  the size needed.
8d70: 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73  ..      if (bDes
8d80: 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
8d90: 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20  n nlen;....     
8da0: 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e   int nCopied = n
8db0: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
8dc0: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
8dd0: 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65  Start > bDest.Le
8de0: 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20  ngth) nCopied = 
8df0: 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e  bDest.Length - n
8e00: 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66  Start;..      if
8e10: 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74   (nCopied + nDat
8e20: 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20  aOffset > nlen) 
8e30: 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d  nCopied = nlen -
8e40: 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d   nDataOffset;...
8e50: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
8e60: 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b  ed > 0)..      {
8e70: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
8e80: 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74   ptr = UnsafeNat
8e90: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8ea0: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73  e3_column_blob(s
8eb0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8ec0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
8ed0: 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70       Marshal.Cop
8ee0: 79 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54  y((IntPtr)(ptr.T
8ef0: 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61  oInt64() + nData
8f00: 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20  Offset), bDest, 
8f10: 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29  nStart, nCopied)
8f20: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
8f30: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d    else..      {.
8f40: 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64  .        nCopied
8f50: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a   = 0;..      }..
8f60: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e  ..      return n
8f70: 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a  Copied;..    }..
8f80: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
8f90: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
8fa0: 43 68 61 72 73 28 53 51 4c 69 74 65 53 74 61 74  Chars(SQLiteStat
8fb0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
8fc0: 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61  index, int nData
8fd0: 4f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62  Offset, char[] b
8fe0: 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74  Dest, int nStart
8ff0: 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a  , int nLength)..
9000: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
9010: 20 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e   nlen;..      in
9020: 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e  t nCopied = nLen
9030: 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 74  gth;....      st
9040: 72 69 6e 67 20 73 74 72 20 3d 20 47 65 74 54 65  ring str = GetTe
9050: 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  xt(stmt, index);
9060: 0d 0a 20 20 20 20 20 20 6e 6c 65 6e 20 3d 20 73  ..      nlen = s
9070: 74 72 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  tr.Length;....  
9080: 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d      if (bDest ==
9090: 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c   null) return nl
90a0: 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  en;....      if 
90b0: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72  (nCopied + nStar
90c0: 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  t > bDest.Length
90d0: 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73  ) nCopied = bDes
90e0: 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72  t.Length - nStar
90f0: 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  t;..      if (nC
9100: 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66  opied + nDataOff
9110: 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70  set > nlen) nCop
9120: 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61  ied = nlen - nDa
9130: 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20  taOffset;....   
9140: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e     if (nCopied >
9150: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 73 74 72   0)..        str
9160: 2e 43 6f 70 79 54 6f 28 6e 44 61 74 61 4f 66 66  .CopyTo(nDataOff
9170: 73 65 74 2c 20 62 44 65 73 74 2c 20 6e 53 74 61  set, bDest, nSta
9180: 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20  rt, nCopied);.. 
9190: 20 20 20 20 20 65 6c 73 65 20 6e 43 6f 70 69 65       else nCopie
91a0: 64 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  d = 0;....      
91b0: 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d  return nCopied;.
91c0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
91d0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
91e0: 62 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69  bool IsNull(SQLi
91f0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
9200: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
9210: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
9220: 6e 20 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  n (ColumnAffinit
9230: 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 3d  y(stmt, index) =
9240: 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e  = TypeAffinity.N
9250: 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ull);..    }....
9260: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9270: 72 72 69 64 65 20 69 6e 74 20 41 67 67 72 65 67  rride int Aggreg
9280: 61 74 65 43 6f 75 6e 74 28 49 6e 74 50 74 72 20  ateCount(IntPtr 
9290: 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d  context)..    {.
92a0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
92b0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
92c0: 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67  s.sqlite3_aggreg
92d0: 61 74 65 5f 63 6f 75 6e 74 28 63 6f 6e 74 65 78  ate_count(contex
92e0: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
92f0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
9300: 69 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 46  ide void CreateF
9310: 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67 20 73  unction(string s
9320: 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20  trFunction, int 
9330: 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64  nArgs, bool need
9340: 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65 43  CollSeq, SQLiteC
9350: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53 51  allback func, SQ
9360: 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e  LiteCallback fun
9370: 63 73 74 65 70 2c 20 53 51 4c 69 74 65 46 69 6e  cstep, SQLiteFin
9380: 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66  alCallback funcf
9390: 69 6e 61 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  inal)..    {..  
93a0: 20 20 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 23 69      int n;....#i
93b0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
93c0: 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e  RD..      n = Un
93d0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
93e0: 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
93f0: 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f  _function_intero
9400: 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  p(_sql, ToUTF8(s
9410: 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72  trFunction), nAr
9420: 67 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65  gs, 4, IntPtr.Ze
9430: 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74  ro, func, funcst
9440: 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28  ep, funcfinal, (
9450: 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74  needCollSeq == t
9460: 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a  rue) ? 1 : 0);..
9470: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 30        if (n == 0
9480: 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ) n = UnsafeNati
9490: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
94a0: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
94b0: 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  n_interop(_sql, 
94c0: 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
94d0: 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49  on), nArgs, 1, I
94e0: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
94f0: 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
9500: 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c  final, (needColl
9510: 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31  Seq == true) ? 1
9520: 20 3a 20 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   : 0);..#else.. 
9530: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
9540: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
9550: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
9560: 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46  tion(_sql, ToUTF
9570: 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
9580: 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72  nArgs, 4, IntPtr
9590: 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
95a0: 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
95b0: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
95c0: 3d 3d 20 30 29 20 6e 20 3d 20 55 6e 73 61 66 65  == 0) n = Unsafe
95d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
95e0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
95f0: 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54  ction(_sql, ToUT
9600: 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c  F8(strFunction),
9610: 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74   nArgs, 1, IntPt
9620: 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75  r.Zero, func, fu
9630: 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61  ncstep, funcfina
9640: 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  l);..#endif..   
9650: 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68     if (n > 0) th
9660: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
9670: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
9680: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
9690: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
96a0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
96b0: 20 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e   CreateCollation
96c0: 28 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61  (string strColla
96d0: 74 69 6f 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c  tion, SQLiteColl
96e0: 61 74 69 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69  ation func, SQLi
96f0: 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63  teCollation func
9700: 31 36 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  16)..    {..    
9710: 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65    int n = Unsafe
9720: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9730: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
9740: 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55  lation(_sql, ToU
9750: 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e  TF8(strCollation
9760: 29 2c 20 32 2c 20 49 6e 74 50 74 72 2e 5a 65 72  ), 2, IntPtr.Zer
9770: 6f 2c 20 66 75 6e 63 31 36 29 3b 0d 0a 20 20 20  o, func16);..   
9780: 20 20 20 69 66 20 28 6e 20 3d 3d 20 30 29 20 6e     if (n == 0) n
9790: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
97a0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
97b0: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
97c0: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
97d0: 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 31 2c 20 49  Collation), 1, I
97e0: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
97f0: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
9800: 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53  > 0) throw new S
9810: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
9820: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
9830: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
9840: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
9850: 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f  de int ContextCo
9860: 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c  llateCompare(Col
9870: 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
9880: 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63  um enc, IntPtr c
9890: 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 73  ontext, string s
98a0: 31 2c 20 73 74 72 69 6e 67 20 73 32 29 0d 0a 20  1, string s2).. 
98b0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
98c0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
98d0: 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20    byte[] b1;..  
98e0: 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a      byte[] b2;..
98f0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78        System.Tex
9900: 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65  t.Encoding conve
9910: 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rter = null;....
9920: 20 20 20 20 20 20 73 77 69 74 63 68 20 28 65 6e        switch (en
9930: 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  c)..      {..   
9940: 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
9950: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
9960: 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20  UTF8:..         
9970: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
9980: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
9990: 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20  g.UTF8;..       
99a0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
99b0: 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
99c0: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
99d0: 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16LE:..        
99e0: 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
99f0: 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
9a00: 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20  ng.Unicode;..   
9a10: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
9a20: 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
9a30: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
9a40: 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20  m.UTF16BE:..    
9a50: 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
9a60: 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
9a70: 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e  coding.BigEndian
9a80: 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
9a90: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
9aa0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20    }....      b1 
9ab0: 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
9ac0: 79 74 65 73 28 73 31 29 3b 0d 0a 20 20 20 20 20  ytes(s1);..     
9ad0: 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e   b2 = converter.
9ae0: 47 65 74 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d  GetBytes(s2);...
9af0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
9b00: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9b10: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  s.sqlite3_contex
9b20: 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 28 63 6f  t_collcompare(co
9b30: 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65  ntext, b1, b1.Le
9b40: 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e  ngth, b2, b2.Len
9b50: 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  gth);..#else..  
9b60: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
9b70: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
9b80: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
9b90: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
9ba0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
9bb0: 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c   int ContextColl
9bc0: 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61  ateCompare(Colla
9bd0: 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
9be0: 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e   enc, IntPtr con
9bf0: 74 65 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c  text, char[] c1,
9c00: 20 63 68 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20   char[] c2)..   
9c10: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
9c20: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
9c30: 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20  byte[] b1;..    
9c40: 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20    byte[] b2;..  
9c50: 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e      System.Text.
9c60: 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74  Encoding convert
9c70: 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  er = null;....  
9c80: 20 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29      switch (enc)
9c90: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
9ca0: 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
9cb0: 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
9cc0: 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  F8:..          c
9cd0: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
9ce0: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
9cf0: 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  UTF8;..         
9d00: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
9d10: 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
9d20: 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31  ncodingEnum.UTF1
9d30: 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  6LE:..          
9d40: 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
9d50: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
9d60: 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20  .Unicode;..     
9d70: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
9d80: 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
9d90: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
9da0: 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20  UTF16BE:..      
9db0: 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
9dc0: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
9dd0: 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e  ding.BigEndianUn
9de0: 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20  icode;..        
9df0: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
9e00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20  }....      b1 = 
9e10: 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  converter.GetByt
9e20: 65 73 28 63 31 29 3b 0d 0a 20 20 20 20 20 20 62  es(c1);..      b
9e30: 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65  2 = converter.Ge
9e40: 74 42 79 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20  tBytes(c2);.... 
9e50: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
9e60: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9e70: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f  sqlite3_context_
9e80: 63 6f 6c 6c 63 6f 6d 70 61 72 65 28 63 6f 6e 74  collcompare(cont
9e90: 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67  ext, b1, b1.Leng
9ea0: 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74  th, b2, b2.Lengt
9eb0: 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  h);..#else..    
9ec0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
9ed0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
9ee0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
9ef0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
9f00: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 43  ernal override C
9f10: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
9f20: 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71   GetCollationSeq
9f30: 75 65 6e 63 65 28 53 51 4c 69 74 65 46 75 6e 63  uence(SQLiteFunc
9f40: 74 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74  tion func, IntPt
9f50: 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20  r context)..    
9f60: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
9f70: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 43  TANDARD..      C
9f80: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
9f90: 20 73 65 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61   seq = new Colla
9fa0: 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d  tionSequence();.
9fb0: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
9fc0: 0a 20 20 20 20 20 20 69 6e 74 20 74 79 70 65 3b  .      int type;
9fd0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 65 6e 63 3b  ..      int enc;
9fe0: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
9ff0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
a000: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
a010: 6f 6e 74 65 78 74 5f 63 6f 6c 6c 73 65 71 28 63  ontext_collseq(c
a020: 6f 6e 74 65 78 74 2c 20 6f 75 74 20 74 79 70 65  ontext, out type
a030: 2c 20 6f 75 74 20 65 6e 63 2c 20 6f 75 74 20 6c  , out enc, out l
a040: 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  en);....      if
a050: 20 28 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71   (p != null) seq
a060: 2e 4e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74  .Name = UTF8ToSt
a070: 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20  ring(p, len);.. 
a080: 20 20 20 20 20 73 65 71 2e 54 79 70 65 20 3d 20       seq.Type = 
a090: 28 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e  (CollationTypeEn
a0a0: 75 6d 29 74 79 70 65 3b 0d 0a 20 20 20 20 20 20  um)type;..      
a0b0: 73 65 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63  seq._func = func
a0c0: 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 45 6e 63  ;..      seq.Enc
a0d0: 6f 64 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69  oding = (Collati
a0e0: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65  onEncodingEnum)e
a0f0: 6e 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  nc;....      ret
a100: 75 72 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d  urn seq;..#else.
a110: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
a120: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
a130: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
a140: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
a150: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
a160: 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61  ide long GetPara
a170: 6d 56 61 6c 75 65 42 79 74 65 73 28 49 6e 74 50  mValueBytes(IntP
a180: 74 72 20 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f  tr p, int nDataO
a190: 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44  ffset, byte[] bD
a1a0: 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c  est, int nStart,
a1b0: 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20   int nLength).. 
a1c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
a1d0: 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nlen = UnsafeNat
a1e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a1f0: 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70  e3_value_bytes(p
a200: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49  );....      // I
a210: 66 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e  f no destination
a220: 20 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20   buffer, return 
a230: 74 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e  the size needed.
a240: 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73  ..      if (bDes
a250: 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
a260: 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20  n nlen;....     
a270: 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e   int nCopied = n
a280: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
a290: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
a2a0: 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65  Start > bDest.Le
a2b0: 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20  ngth) nCopied = 
a2c0: 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e  bDest.Length - n
a2d0: 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66  Start;..      if
a2e0: 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74   (nCopied + nDat
a2f0: 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20  aOffset > nlen) 
a300: 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d  nCopied = nlen -
a310: 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d   nDataOffset;...
a320: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
a330: 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b  ed > 0)..      {
a340: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
a350: 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74   ptr = UnsafeNat
a360: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a370: 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 70 29  e3_value_blob(p)
a380: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72  ;....        Mar
a390: 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74  shal.Copy((IntPt
a3a0: 72 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29  r)(ptr.ToInt64()
a3b0: 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c   + nDataOffset),
a3c0: 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20   bDest, nStart, 
a3d0: 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20  nCopied);..     
a3e0: 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a   }..      else..
a3f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a400: 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20   nCopied = 0;.. 
a410: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
a420: 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d  return nCopied;.
a430: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
a440: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
a450: 64 6f 75 62 6c 65 20 47 65 74 50 61 72 61 6d 56  double GetParamV
a460: 61 6c 75 65 44 6f 75 62 6c 65 28 49 6e 74 50 74  alueDouble(IntPt
a470: 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20  r ptr)..    {.. 
a480: 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75       double valu
a490: 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  e;..#if !PLATFOR
a4a0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
a4b0: 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20  RK..      value 
a4c0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
a4d0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
a4e0: 6c 75 65 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b  lue_double(ptr);
a4f0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 55  ..#else..      U
a500: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
a510: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
a520: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
a530: 70 74 72 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b  ptr, out value);
a540: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
a550: 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20  return value;.. 
a560: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
a570: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
a580: 74 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49  t GetParamValueI
a590: 6e 74 33 32 28 49 6e 74 50 74 72 20 70 74 72 29  nt32(IntPtr ptr)
a5a0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
a5b0: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
a5c0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
a5d0: 33 5f 76 61 6c 75 65 5f 69 6e 74 28 70 74 72 29  3_value_int(ptr)
a5e0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
a5f0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
a600: 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56  e long GetParamV
a610: 61 6c 75 65 49 6e 74 36 34 28 49 6e 74 50 74 72  alueInt64(IntPtr
a620: 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   ptr)..    {..  
a630: 20 20 20 20 49 6e 74 36 34 20 76 61 6c 75 65 3b      Int64 value;
a640: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
a650: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
a660: 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
a670: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a680: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
a690: 65 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d 0a 23  e_int64(ptr);..#
a6a0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61  else..      Unsa
a6b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a6c0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
a6d0: 74 36 34 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c  t64_interop(ptr,
a6e0: 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65   out value);..#e
a6f0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75  ndif..      retu
a700: 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d  rn value;..    }
a710: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
a720: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
a730: 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 65   GetParamValueTe
a740: 78 74 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a  xt(IntPtr ptr)..
a750: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
a760: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
a770: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
a780: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
a790: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
a7a0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a7b0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e  e3_value_text_in
a7c0: 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 6c  terop(ptr, out l
a7d0: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
a7e0: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
a7f0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
a800: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
a810: 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  .sqlite3_value_t
a820: 65 78 74 28 70 74 72 29 2c 20 2d 31 29 3b 0d 0a  ext(ptr), -1);..
a830: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
a840: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
a850: 65 72 72 69 64 65 20 54 79 70 65 41 66 66 69 6e  erride TypeAffin
a860: 69 74 79 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ity GetParamValu
a870: 65 54 79 70 65 28 49 6e 74 50 74 72 20 70 74 72  eType(IntPtr ptr
a880: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
a890: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
a8a0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a8b0: 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 74  e3_value_type(pt
a8c0: 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  r);..    }....  
a8d0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
a8e0: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 42  ide void ReturnB
a8f0: 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  lob(IntPtr conte
a900: 78 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65  xt, byte[] value
a910: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
a920: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a930: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
a940: 6c 74 5f 62 6c 6f 62 28 63 6f 6e 74 65 78 74 2c  lt_blob(context,
a950: 20 76 61 6c 75 65 2c 20 76 61 6c 75 65 2e 4c 65   value, value.Le
a960: 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28 2d  ngth, (IntPtr)(-
a970: 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  1));..    }.... 
a980: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
a990: 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
a9a0: 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 63 6f  Double(IntPtr co
a9b0: 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65 20 76 61  ntext, double va
a9c0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  lue)..    {..#if
a9d0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
a9e0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
a9f0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
aa00: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
aa10: 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f 6e  esult_double(con
aa20: 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  text, value);..#
aa30: 65 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61  else..      Unsa
aa40: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
aa50: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64  sqlite3_result_d
aa60: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 63 6f  ouble_interop(co
aa70: 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65  ntext, ref value
aa80: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
aa90: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
aaa0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
aab0: 52 65 74 75 72 6e 45 72 72 6f 72 28 49 6e 74 50  ReturnError(IntP
aac0: 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69  tr context, stri
aad0: 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
aae0: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
aaf0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
ab00: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
ab10: 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38  (context, ToUTF8
ab20: 28 76 61 6c 75 65 29 2c 20 76 61 6c 75 65 2e 4c  (value), value.L
ab30: 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ength);..    }..
ab40: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ab50: 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
ab60: 75 72 6e 49 6e 74 33 32 28 49 6e 74 50 74 72 20  urnInt32(IntPtr 
ab70: 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 76 61 6c  context, int val
ab80: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
ab90: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
aba0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
abb0: 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74  sult_int(context
abc0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d  , value);..    }
abd0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
abe0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
abf0: 65 74 75 72 6e 49 6e 74 36 34 28 49 6e 74 50 74  eturnInt64(IntPt
ac00: 72 20 63 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67 20  r context, long 
ac10: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23  value)..    {..#
ac20: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
ac30: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
ac40: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
ac50: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ac60: 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f  _result_int64(co
ac70: 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
ac80: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73  #else..      Uns
ac90: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
aca0: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
acb0: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 63 6f  int64_interop(co
acc0: 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65  ntext, ref value
acd0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
ace0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
acf0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
ad00: 52 65 74 75 72 6e 4e 75 6c 6c 28 49 6e 74 50 74  ReturnNull(IntPt
ad10: 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20  r context)..    
ad20: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
ad30: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
ad40: 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c  ite3_result_null
ad50: 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20  (context);..    
ad60: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
ad70: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
ad80: 52 65 74 75 72 6e 54 65 78 74 28 49 6e 74 50 74  ReturnText(IntPt
ad90: 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e  r context, strin
ada0: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
adb0: 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20  .      byte[] b 
adc0: 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b  = ToUTF8(value);
add0: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
ade0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
adf0: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
ae00: 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28  context, ToUTF8(
ae10: 76 61 6c 75 65 29 2c 20 62 2e 4c 65 6e 67 74 68  value), b.Length
ae20: 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d   - 1, (IntPtr)(-
ae30: 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  1));..    }.... 
ae40: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
ae50: 72 69 64 65 20 49 6e 74 50 74 72 20 41 67 67 72  ride IntPtr Aggr
ae60: 65 67 61 74 65 43 6f 6e 74 65 78 74 28 49 6e 74  egateContext(Int
ae70: 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20  Ptr context)..  
ae80: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
ae90: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
aea0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67  thods.sqlite3_ag
aeb0: 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28  gregate_context(
aec0: 63 6f 6e 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20  context, 1);..  
aed0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45    }....    /// E
aee0: 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c  nables or disabl
aef0: 65 64 20 65 78 74 65 6e 64 65 64 20 72 65 73 75  ed extended resu
af00: 6c 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e 65  lt codes returne
af10: 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20 20  d by SQLite..   
af20: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
af30: 64 65 20 76 6f 69 64 20 53 65 74 45 78 74 65 6e  de void SetExten
af40: 64 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28 62  dedResultCodes(b
af50: 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20  ool bOnOff)..   
af60: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
af70: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
af80: 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72  lite3_extended_r
af90: 65 73 75 6c 74 5f 63 6f 64 65 73 28 5f 73 71 6c  esult_codes(_sql
afa0: 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a  , (bOnOff ? -1 :
afb0: 20 30 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20   0));..    }..  
afc0: 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c    /// Gets the l
afd0: 61 73 74 20 53 51 4c 69 74 65 20 65 72 72 6f 72  ast SQLite error
afe0: 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72   code..    inter
aff0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
b000: 20 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20   ResultCode().. 
b010: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
b020: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
b030: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
b040: 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20  rrcode(_sql);.. 
b050: 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65     }..    /// Ge
b060: 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69  ts the last SQLi
b070: 74 65 20 65 78 74 65 6e 64 65 64 20 65 72 72 6f  te extended erro
b080: 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65  r code..    inte
b090: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
b0a0: 74 20 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74  t ExtendedResult
b0b0: 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Code()..    {.. 
b0c0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
b0d0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b0e0: 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64  sqlite3_extended
b0f0: 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d  _errcode(_sql);.
b100: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
b110: 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73  / Add a log mess
b120: 61 67 65 20 76 69 61 20 74 68 65 20 53 51 4c 69  age via the SQLi
b130: 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69  te sqlite3_log i
b140: 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69  nterface...    i
b150: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
b160: 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67 65   void LogMessage
b170: 28 69 6e 74 20 69 45 72 72 43 6f 64 65 2c 20 73  (int iErrCode, s
b180: 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d  tring zMessage).
b190: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
b1a0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
b1b0: 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28 69 45  s.sqlite3_log(iE
b1c0: 72 72 43 6f 64 65 2c 20 54 6f 55 54 46 38 28 7a  rrCode, ToUTF8(z
b1d0: 4d 65 73 73 61 67 65 29 29 3b 0d 0a 20 20 20 20  Message));..    
b1e0: 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  }....#if INTEROP
b1f0: 5f 43 4f 44 45 43 0d 0a 20 20 20 20 69 6e 74 65  _CODEC..    inte
b200: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
b210: 69 64 20 53 65 74 50 61 73 73 77 6f 72 64 28 62  id SetPassword(b
b220: 79 74 65 5b 5d 20 70 61 73 73 77 6f 72 64 42 79  yte[] passwordBy
b230: 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tes)..    {..   
b240: 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66     int n = Unsaf
b250: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b260: 71 6c 69 74 65 33 5f 6b 65 79 28 5f 73 71 6c 2c  qlite3_key(_sql,
b270: 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20   passwordBytes, 
b280: 70 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65  passwordBytes.Le
b290: 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66  ngth);..      if
b2a0: 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e   (n > 0) throw n
b2b0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
b2c0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
b2d0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
b2e0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b2f0: 65 72 72 69 64 65 20 76 6f 69 64 20 43 68 61 6e  erride void Chan
b300: 67 65 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b  gePassword(byte[
b310: 5d 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74  ] newPasswordByt
b320: 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  es)..    {..    
b330: 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65    int n = Unsafe
b340: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b350: 6c 69 74 65 33 5f 72 65 6b 65 79 28 5f 73 71 6c  lite3_rekey(_sql
b360: 2c 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74  , newPasswordByt
b370: 65 73 2c 20 28 6e 65 77 50 61 73 73 77 6f 72 64  es, (newPassword
b380: 42 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f  Bytes == null) ?
b390: 20 30 20 3a 20 6e 65 77 50 61 73 73 77 6f 72 64   0 : newPassword
b3a0: 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a  Bytes.Length);..
b3b0: 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29        if (n > 0)
b3c0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
b3d0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
b3e0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
b3f0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
b400: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b410: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 55  erride void SetU
b420: 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c 69 74 65  pdateHook(SQLite
b430: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 66  UpdateCallback f
b440: 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  unc)..    {..   
b450: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
b460: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 75  ethods.sqlite3_u
b470: 70 64 61 74 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c  pdate_hook(_sql,
b480: 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
b490: 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
b4a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
b4b0: 72 69 64 65 20 76 6f 69 64 20 53 65 74 43 6f 6d  ride void SetCom
b4c0: 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f  mitHook(SQLiteCo
b4d0: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e  mmitCallback fun
b4e0: 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
b4f0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
b500: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d  hods.sqlite3_com
b510: 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66  mit_hook(_sql, f
b520: 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
b530: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
b540: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b550: 64 65 20 76 6f 69 64 20 53 65 74 54 72 61 63 65  de void SetTrace
b560: 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 54  Callback(SQLiteT
b570: 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e  raceCallback fun
b580: 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
b590: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
b5a0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 72 61  hods.sqlite3_tra
b5b0: 63 65 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49  ce(_sql, func, I
b5c0: 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
b5d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
b5e0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
b5f0: 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f  d SetRollbackHoo
b600: 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63 6b  k(SQLiteRollback
b610: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
b620: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
b630: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b640: 2e 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63  .sqlite3_rollbac
b650: 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e  k_hook(_sql, fun
b660: 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
b670: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
b680: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
b690: 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74 68 65    /// Allows the
b6a0: 20 73 65 74 74 69 6e 67 20 6f 66 20 61 20 6c 6f   setting of a lo
b6b0: 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69  gging callback i
b6c0: 6e 76 6f 6b 65 64 20 62 79 20 53 51 4c 69 74 65  nvoked by SQLite
b6d0: 20 77 68 65 6e 20 61 0d 0a 20 20 20 20 2f 2f 2f   when a..    ///
b6e0: 20 6c 6f 67 20 65 76 65 6e 74 20 6f 63 63 75 72   log event occur
b6f0: 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20 63 61 6c  s.  Only one cal
b700: 6c 62 61 63 6b 20 6d 61 79 20 62 65 20 73 65 74  lback may be set
b710: 2e 20 20 49 66 20 4e 55 4c 4c 20 69 73 20 70 61  .  If NULL is pa
b720: 73 73 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74  ssed,..    /// t
b730: 68 65 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62  he logging callb
b740: 61 63 6b 20 69 73 20 75 6e 72 65 67 69 73 74 65  ack is unregiste
b750: 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  red...    /// </
b760: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
b770: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
b780: 75 6e 63 22 3e 54 68 65 20 63 61 6c 6c 62 61 63  unc">The callbac
b790: 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e  k function to in
b7a0: 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  voke.</param>.. 
b7b0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
b7c0: 52 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74  Returns a result
b7d0: 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d   code</returns>.
b7e0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
b7f0: 65 72 72 69 64 65 20 69 6e 74 20 53 65 74 4c 6f  erride int SetLo
b800: 67 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65  gCallback(SQLite
b810: 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  LogCallback func
b820: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
b830: 20 20 69 6e 74 20 72 63 20 3d 20 55 6e 73 61 66    int rc = Unsaf
b840: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b850: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f  qlite3_config_lo
b860: 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g(..            
b870: 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
b880: 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
b890: 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20 28 49 6e  G_LOG, func, (In
b8a0: 74 50 74 72 29 30 29 3b 0d 0a 0d 0a 20 20 20 20  tPtr)0);....    
b8b0: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a      return rc;..
b8c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
b8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b930: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
b940: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74  >..    /// Creat
b950: 65 73 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20  es a new SQLite 
b960: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 62 61  backup object ba
b970: 73 65 64 20 6f 6e 20 74 68 65 20 70 72 6f 76 69  sed on the provi
b980: 64 65 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d  ded destination.
b990: 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73  .    /// databas
b9a0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
b9b0: 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
b9c0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
b9d0: 20 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f   the one..    //
b9e0: 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  / associated wit
b9f0: 68 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20  h this object.  
ba00: 54 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 64  The source and d
ba10: 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62  estination datab
ba20: 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e  ase..    /// con
ba30: 6e 65 63 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20  nections cannot 
ba40: 62 65 20 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20  be the same...  
ba50: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
ba60: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
ba70: 20 6e 61 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e   name="destCnn">
ba80: 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  The destination 
ba90: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
baa0: 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ion.</param>..  
bab0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
bac0: 65 3d 22 64 65 73 74 4e 61 6d 65 22 3e 54 68 65  e="destName">The
bad0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
bae0: 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72  abase name.</par
baf0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
bb00: 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65  ram name="source
bb10: 4e 61 6d 65 22 3e 54 68 65 20 73 6f 75 72 63 65  Name">The source
bb20: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c   database name.<
bb30: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
bb40: 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 65   <returns>The ne
bb50: 77 6c 79 20 63 72 65 61 74 65 64 20 62 61 63 6b  wly created back
bb60: 75 70 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75  up object.</retu
bb70: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
bb80: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
bb90: 74 65 42 61 63 6b 75 70 20 49 6e 69 74 69 61 6c  teBackup Initial
bba0: 69 7a 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  izeBackup(..    
bbb0: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
bbc0: 74 69 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20  tion destCnn,.. 
bbd0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
bbe0: 73 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  stName,..       
bbf0: 20 73 74 72 69 6e 67 20 73 6f 75 72 63 65 4e 61   string sourceNa
bc00: 6d 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  me..        ).. 
bc10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
bc20: 20 28 64 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c   (destCnn == nul
bc30: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
bc40: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
bc50: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
bc60: 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20  "destCnn");.... 
bc70: 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74 4e         if (destN
bc80: 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame == null)..  
bc90: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
bca0: 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
bcb0: 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74 4e  Exception("destN
bcc0: 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ame");....      
bcd0: 20 20 69 66 20 28 73 6f 75 72 63 65 4e 61 6d 65    if (sourceName
bce0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
bcf0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
bd00: 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
bd10: 65 70 74 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61  eption("sourceNa
bd20: 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me");....       
bd30: 20 53 51 4c 69 74 65 33 20 64 65 73 74 53 71 6c   SQLite3 destSql
bd40: 69 74 65 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f  ite3 = destCnn._
bd50: 73 71 6c 20 61 73 20 53 51 4c 69 74 65 33 3b 0d  sql as SQLite3;.
bd60: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  ...        if (d
bd70: 65 73 74 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75  estSqlite3 == nu
bd80: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
bd90: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
bda0: 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  entException(.. 
bdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
bdc0: 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e  Destination conn
bdd0: 65 63 74 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72  ection has no wr
bde0: 61 70 70 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20  apper.",..      
bdf0: 20 20 20 20 20 20 20 20 20 20 22 64 65 73 74 43            "destC
be00: 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nn");....       
be10: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
be20: 6e 48 61 6e 64 6c 65 20 64 65 73 74 48 61 6e 64  nHandle destHand
be30: 6c 65 20 3d 20 64 65 73 74 53 71 6c 69 74 65 33  le = destSqlite3
be40: 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20  ._sql;....      
be50: 20 20 69 66 20 28 64 65 73 74 48 61 6e 64 6c 65    if (destHandle
be60: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
be70: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
be80: 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69   ArgumentExcepti
be90: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
bea0: 20 20 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f       "Destinatio
beb0: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73  n connection has
bec0: 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
bed0: 6c 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  le.",..         
bee0: 20 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22         "destCnn"
bef0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
bf00: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
bf10: 6e 64 6c 65 20 73 6f 75 72 63 65 48 61 6e 64 6c  ndle sourceHandl
bf20: 65 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20  e = _sql;....   
bf30: 20 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 48       if (sourceH
bf40: 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
bf50: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
bf60: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
bf70: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
bf80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bf90: 20 20 22 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63    "Source connec
bfa0: 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61  tion has an inva
bfb0: 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
bfc0: 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d  ..        byte[]
bfd0: 20 7a 44 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55   zDestName = ToU
bfe0: 54 46 38 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a  TF8(destName);..
bff0: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a          byte[] z
c000: 53 6f 75 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55  SourceName = ToU
c010: 54 46 38 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b  TF8(sourceName);
c020: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
c030: 74 72 20 62 61 63 6b 75 70 20 3d 20 55 6e 73 61  tr backup = Unsa
c040: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
c050: 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 69  sqlite3_backup_i
c060: 6e 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  nit(..          
c070: 20 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44    destHandle, zD
c080: 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48  estName, sourceH
c090: 61 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65 4e 61  andle, zSourceNa
c0a0: 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
c0b0: 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e  if (backup == In
c0c0: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
c0d0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
c0e0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
c0f0: 6e 28 52 65 73 75 6c 74 43 6f 64 65 28 29 2c 20  n(ResultCode(), 
c100: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
c110: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
c120: 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63  rn new SQLiteBac
c130: 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20  kup(..          
c140: 20 20 74 68 69 73 2c 20 6e 65 77 20 53 51 4c 69    this, new SQLi
c150: 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 28 64  teBackupHandle(d
c160: 65 73 74 48 61 6e 64 6c 65 2c 20 62 61 63 6b 75  estHandle, backu
c170: 70 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  p),..           
c180: 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65   destHandle, zDe
c190: 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61  stName, sourceHa
c1a0: 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65 4e 61 6d  ndle, zSourceNam
c1b0: 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  e);..    }....  
c1c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
c1d0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 70 69 65 73 20  .    /// Copies 
c1e0: 75 70 20 74 6f 20 4e 20 70 61 67 65 73 20 66 72  up to N pages fr
c1f0: 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 20 64 61  om the source da
c200: 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 64 65  tabase to the de
c210: 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f  stination..    /
c220: 2f 2f 20 64 61 74 61 62 61 73 65 20 61 73 73 6f  // database asso
c230: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
c240: 73 70 65 63 69 66 69 65 64 20 62 61 63 6b 75 70  specified backup
c250: 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f   object...    //
c260: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
c270: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
c280: 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62  e="backup">The b
c290: 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20  ackup object to 
c2a0: 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  use.</param>..  
c2b0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
c2c0: 65 3d 22 6e 50 61 67 65 22 3e 0d 0a 20 20 20 20  e="nPage">..    
c2d0: 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
c2e0: 66 20 70 61 67 65 73 20 74 6f 20 63 6f 70 79 2c  f pages to copy,
c2f0: 20 6e 65 67 61 74 69 76 65 20 74 6f 20 63 6f 70   negative to cop
c300: 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20  y all remaining 
c310: 70 61 67 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  pages...    /// 
c320: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
c330: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72  / <param name="r
c340: 65 74 72 79 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  etry">..    /// 
c350: 53 65 74 20 74 6f 20 74 72 75 65 20 69 66 20 74  Set to true if t
c360: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6e 65 65  he operation nee
c370: 64 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 64  ds to be retried
c380: 20 64 75 65 20 74 6f 20 64 61 74 61 62 61 73 65   due to database
c390: 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 63 6b 69 6e  ..    /// lockin
c3a0: 67 20 69 73 73 75 65 73 3b 20 6f 74 68 65 72 77  g issues; otherw
c3b0: 69 73 65 2c 20 73 65 74 20 74 6f 20 66 61 6c 73  ise, set to fals
c3c0: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
c3d0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
c3e0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
c3f0: 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20 61   True if there a
c400: 72 65 20 6d 6f 72 65 20 70 61 67 65 73 20 74 6f  re more pages to
c410: 20 62 65 20 63 6f 70 69 65 64 2c 20 66 61 6c 73   be copied, fals
c420: 65 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20 20  e otherwise...  
c430: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
c440: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
c450: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53 74 65  verride bool Ste
c460: 70 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  pBackup(..      
c470: 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62    SQLiteBackup b
c480: 61 63 6b 75 70 2c 0d 0a 20 20 20 20 20 20 20 20  ackup,..        
c490: 69 6e 74 20 6e 50 61 67 65 2c 0d 0a 20 20 20 20  int nPage,..    
c4a0: 20 20 20 20 6f 75 74 20 62 6f 6f 6c 20 72 65 74      out bool ret
c4b0: 72 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  ry..        ).. 
c4c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
c4d0: 74 72 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  try = false;....
c4e0: 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b          if (back
c4f0: 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  up == null)..   
c500: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
c510: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
c520: 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70  xception("backup
c530: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
c540: 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c  QLiteBackupHandl
c550: 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75  e handle = backu
c560: 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70  p._sqlite_backup
c570: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
c580: 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (handle == null)
c590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
c5a0: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
c5b0: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
c5c0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
c5d0: 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
c5e0: 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
c5f0: 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a  d handle.");....
c600: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
c610: 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c  andlePtr = handl
c620: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
c630: 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49   (handlePtr == I
c640: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
c650: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
c660: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
c670: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
c680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
c690: 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
c6a0: 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
c6b0: 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d  dle pointer.");.
c6c0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  ...        int n
c6d0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
c6e0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
c6f0: 61 63 6b 75 70 5f 73 74 65 70 28 68 61 6e 64 6c  ackup_step(handl
c700: 65 50 74 72 2c 20 6e 50 61 67 65 29 3b 0d 0a 20  ePtr, nPage);.. 
c710: 20 20 20 20 20 20 20 62 61 63 6b 75 70 2e 5f 73         backup._s
c720: 74 65 70 52 65 73 75 6c 74 20 3d 20 6e 3b 20 2f  tepResult = n; /
c730: 2a 20 4e 4f 54 45 3a 20 53 61 76 65 20 66 6f 72  * NOTE: Save for
c740: 20 75 73 65 20 62 79 20 46 69 6e 69 73 68 42 61   use by FinishBa
c750: 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20  ckup. */....    
c760: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 28 69 6e      if (n == (in
c770: 74 29 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  t)SQLiteErrorCod
c780: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b  e.Ok)..        {
c790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
c7a0: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
c7b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
c7c0: 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 28 69 6e  lse if (n == (in
c7d0: 74 29 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  t)SQLiteErrorCod
c7e0: 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20  e.Busy)..       
c7f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c800: 72 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20  retry = true;.. 
c810: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
c820: 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
c830: 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
c840: 20 69 66 20 28 6e 20 3d 3d 20 28 69 6e 74 29 53   if (n == (int)S
c850: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c  QLiteErrorCode.L
c860: 6f 63 6b 65 64 29 0d 0a 20 20 20 20 20 20 20 20  ocked)..        
c870: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
c880: 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  etry = true;..  
c890: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c8a0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
c8b0: 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20  }..        else 
c8c0: 69 66 20 28 6e 20 3d 3d 20 28 69 6e 74 29 53 51  if (n == (int)SQ
c8d0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f  LiteErrorCode.Do
c8e0: 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ne)..        {..
c8f0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
c900: 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
c910: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
c920: 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  se..        {.. 
c930: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
c940: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
c950: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
c960: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
c970: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
c980: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
c990: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
c9a0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
c9b0: 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74  ages remaining t
c9c0: 6f 20 62 65 20 63 6f 70 69 65 64 20 66 72 6f 6d  o be copied from
c9d0: 20 74 68 65 20 73 6f 75 72 63 65 0d 0a 20 20 20   the source..   
c9e0: 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 74 6f   /// database to
c9f0: 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e   the destination
ca00: 20 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69   database associ
ca10: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70  ated with the sp
ca20: 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f  ecified..    ///
ca30: 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d   backup object..
ca40: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
ca50: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
ca60: 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
ca70: 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
ca80: 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70  ect to check.</p
ca90: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
caa0: 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62  returns>The numb
cab0: 65 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61  er of pages rema
cac0: 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69  ining to be copi
cad0: 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ed.</returns>.. 
cae0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
caf0: 72 69 64 65 20 69 6e 74 20 52 65 6d 61 69 6e 69  ride int Remaini
cb00: 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  ngBackup(..     
cb10: 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20     SQLiteBackup 
cb20: 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20  backup..        
cb30: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
cb40: 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
cb50: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
cb60: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
cb70: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
cb80: 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
cb90: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
cba0: 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
cbb0: 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
cbc0: 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
cbd0: 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
cbe0: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
cbf0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
cc00: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
cc10: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
cc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
cc30: 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
cc40: 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
cc50: 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
cc60: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50    IntPtr handleP
cc70: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
cc80: 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
cc90: 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e  lePtr == IntPtr.
cca0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
ccb0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
ccc0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
ccd0: 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
cce0: 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
ccf0: 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
cd00: 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f  nvalid handle po
cd10: 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20  inter.");....   
cd20: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
cd30: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
cd40: 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 72  sqlite3_backup_r
cd50: 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64 6c 65 50  emaining(handleP
cd60: 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
cd70: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
cd80: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
cd90: 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
cda0: 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
cdb0: 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
cdc0: 73 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  se associated.. 
cdd0: 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 65 20     /// with the 
cde0: 73 70 65 63 69 66 69 65 64 20 62 61 63 6b 75 70  specified backup
cdf0: 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f   object...    //
ce00: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
ce10: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
ce20: 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62  e="backup">The b
ce30: 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20  ackup object to 
ce40: 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  check.</param>..
ce50: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
ce60: 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65  >The total numbe
ce70: 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
ce80: 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
ce90: 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  e.</returns>..  
cea0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
ceb0: 69 64 65 20 69 6e 74 20 50 61 67 65 43 6f 75 6e  ide int PageCoun
cec0: 74 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  tBackup(..      
ced0: 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62    SQLiteBackup b
cee0: 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29  ackup..        )
cef0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
cf00: 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e   if (backup == n
cf10: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
cf20: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
cf30: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
cf40: 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a  n("backup");....
cf50: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
cf60: 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c  ckupHandle handl
cf70: 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69  e = backup._sqli
cf80: 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20  te_backup;....  
cf90: 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
cfa0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
cfb0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
cfc0: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
cfd0: 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
cff0: 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
d000: 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
d010: 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
d020: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74   IntPtr handlePt
d030: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
d040: 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
d050: 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  ePtr == IntPtr.Z
d060: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
d070: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
d080: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
d090: 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
d0a0: 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
d0b0: 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
d0c0: 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69  valid handle poi
d0d0: 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  nter.");....    
d0e0: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
d0f0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
d100: 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 70 61  qlite3_backup_pa
d110: 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c 65 50 74  gecount(handlePt
d120: 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  r);..    }....  
d130: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
d140: 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74 72 6f 79  .    /// Destroy
d150: 73 20 74 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  s the backup obj
d160: 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62 61 63  ect, rolling bac
d170: 6b 20 61 6e 79 20 62 61 63 6b 75 70 20 74 68 61  k any backup tha
d180: 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20 20 20  t may be in..   
d190: 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d 0a 20   /// progess... 
d1a0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
d1b0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
d1c0: 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
d1d0: 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
d1e0: 74 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c 2f 70  t to destroy.</p
d1f0: 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
d200: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
d210: 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70 28 0d  d FinishBackup(.
d220: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
d230: 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20  ackup backup..  
d240: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
d250: 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b          if (back
d260: 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  up == null)..   
d270: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
d280: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
d290: 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70  xception("backup
d2a0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
d2b0: 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c  QLiteBackupHandl
d2c0: 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75  e handle = backu
d2d0: 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70  p._sqlite_backup
d2e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
d2f0: 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (handle == null)
d300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
d310: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
d320: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
d330: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
d340: 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
d350: 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
d360: 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a  d handle.");....
d370: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
d380: 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c  andlePtr = handl
d390: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
d3a0: 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49   (handlePtr == I
d3b0: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
d3c0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
d3d0: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
d3e0: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
d400: 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
d410: 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
d420: 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d  dle pointer.");.
d430: 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  ...        int n
d440: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
d450: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
d460: 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 68 61 6e  ackup_finish(han
d470: 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 20 20  dlePtr);..      
d480: 20 20 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64    handle.SetHand
d490: 6c 65 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a  leAsInvalid();..
d4a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 6e  ..        if ((n
d4b0: 20 3e 20 30 29 20 26 26 20 28 6e 20 21 3d 20 62   > 0) && (n != b
d4c0: 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c  ackup._stepResul
d4d0: 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
d4e0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
d4f0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
d500: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
d510: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
d520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
d580: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
d590: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72  >..    /// Deter
d5a0: 6d 69 6e 65 73 20 69 66 20 74 68 65 20 53 51 4c  mines if the SQL
d5b0: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
d5c0: 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61   has been initia
d5d0: 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a 20  lized for the.. 
d5e0: 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70     /// current p
d5f0: 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
d600: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
d610: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
d620: 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61      /// A boolea
d630: 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  n indicating whe
d640: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
d650: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
d660: 61 72 79 20 68 61 73 20 62 65 65 6e 0d 0a 20 20  ary has been..  
d670: 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65    /// initialize
d680: 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
d690: 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
d6a0: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
d6b0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d6c0: 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 49 6e 69  rride bool IsIni
d6d0: 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20  tialized()..    
d6e0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
d6f0: 6e 20 53 74 61 74 69 63 49 73 49 6e 69 74 69 61  n StaticIsInitia
d700: 6c 69 7a 65 64 28 29 3b 0d 0a 20 20 20 20 7d 0d  lized();..    }.
d710: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
d720: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65  ary>..    /// De
d730: 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20  termines if the 
d740: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
d750: 61 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69  ary has been ini
d760: 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65  tialized for the
d770: 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e  ..    /// curren
d780: 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
d790: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
d7a0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
d7b0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f  >..    /// A boo
d7c0: 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20  lean indicating 
d7d0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
d7e0: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
d7f0: 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d  ibrary has been.
d800: 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c  .    /// initial
d810: 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75 72  ized for the cur
d820: 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process... 
d830: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
d840: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
d850: 73 74 61 74 69 63 20 62 6f 6f 6c 20 53 74 61 74  static bool Stat
d860: 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  icIsInitialized(
d870: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
d880: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
d890: 20 42 55 47 46 49 58 3a 20 50 72 65 76 65 6e 74   BUGFIX: Prevent
d8a0: 20 72 61 63 65 73 20 77 69 74 68 20 6f 74 68 65   races with othe
d8b0: 72 20 74 68 72 65 61 64 73 20 66 6f 72 20 74 68  r threads for th
d8c0: 69 73 20 65 6e 74 69 72 65 20 62 6c 6f 63 6b 2c  is entire block,
d8d0: 20 64 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   due..        //
d8e0: 20 20 20 20 20 20 20 20 20 74 6f 20 74 68 65 20           to the 
d8f0: 74 72 79 2f 66 69 6e 61 6c 6c 79 20 73 65 6d 61  try/finally sema
d900: 6e 74 69 63 73 2e 20 20 53 65 65 20 74 69 63 6b  ntics.  See tick
d910: 65 74 20 5b 37 32 39 30 35 63 39 61 37 37 5d 2e  et [72905c9a77].
d920: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
d930: 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63        lock (sync
d940: 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 7b  Root)..        {
d950: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
d960: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
d970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
d980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
d990: 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20   NOTE: Save the 
d9a0: 73 74 61 74 65 20 6f 66 20 74 68 65 20 6c 6f 67  state of the log
d9b0: 67 69 6e 67 20 63 6c 61 73 73 20 61 6e 64 20 74  ging class and t
d9c0: 68 65 6e 20 72 65 73 74 6f 72 65 20 69 74 0d 0a  hen restore it..
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
d9e0: 20 20 20 20 20 61 66 74 65 72 20 77 65 20 61 72       after we ar
d9f0: 65 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20  e done to avoid 
da00: 6c 6f 67 67 69 6e 67 20 74 6f 6f 20 6d 61 6e 79  logging too many
da10: 20 66 61 6c 73 65 20 65 72 72 6f 72 73 2e 0d 0a   false errors...
da20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
da30: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
da40: 20 73 61 76 65 64 45 6e 61 62 6c 65 64 20 3d 20   savedEnabled = 
da50: 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65  SQLiteLog.Enable
da60: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
da70: 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65  SQLiteLog.Enable
da80: 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  d = false;....  
da90: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
daa0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 65             {..#e
dab0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
dac0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
dad0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
dae0: 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20 5b  E: This method [
daf0: 61 62 5d 75 73 65 73 20 74 68 65 20 66 61 63 74  ab]uses the fact
db00: 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c   that SQLite wil
db10: 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20  l always..      
db20: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
db30: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
db40: 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79 20 75  _ERROR for any u
db50: 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72 61  nknown configura
db60: 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20 20  tion option..   
db70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
db80: 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20 74        *unless* t
db90: 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
dba0: 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  y has already be
dbb0: 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0d  en initialized..
dbc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dbd0: 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74 68 61   //       In tha
dbe0: 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c 20 61  t case it will a
dbf0: 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53 51 4c  lways return SQL
dc00: 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20 20  ITE_MISUSE...   
dc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
dc20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dc30: 20 69 6e 74 20 72 63 20 3d 20 55 6e 73 61 66 65   int rc = Unsafe
dc40: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
dc50: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e  lite3_config_non
dc60: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
dc70: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
dc80: 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  nfigOpsEnum.SQLI
dc90: 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b  TE_CONFIG_NONE);
dca0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
dcb0: 20 20 20 20 72 65 74 75 72 6e 20 28 72 63 20 3d      return (rc =
dcc0: 3d 20 2f 2a 20 53 51 4c 49 54 45 5f 4d 49 53 55  = /* SQLITE_MISU
dcd0: 53 45 20 2a 2f 20 32 31 29 3b 0d 0a 23 69 66 20  SE */ 21);..#if 
dce0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
dcf0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
dd00: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
dd10: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
dd20: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
dd40: 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64  QLiteLog.Enabled
dd50: 20 3d 20 73 61 76 65 64 45 6e 61 62 6c 65 64 3b   = savedEnabled;
dd60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
dd70: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
dd80: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
dd90: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
dda0: 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20 66      /// Helper f
ddb0: 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74 72 69  unction to retri
ddc0: 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20  eve a column of 
ddd0: 64 61 74 61 20 66 72 6f 6d 20 61 6e 20 61 63 74  data from an act
dde0: 69 76 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a  ive statement...
ddf0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
de00: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
de10: 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54  am name="stmt">T
de20: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
de30: 6e 67 20 73 74 65 70 28 29 27 64 20 74 68 72 6f  ng step()'d thro
de40: 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ugh</param>..   
de50: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
de60: 3d 22 69 6e 64 65 78 22 3e 54 68 65 20 63 6f 6c  ="index">The col
de70: 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72 65 74  umn index to ret
de80: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20  rieve</param>.. 
de90: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
dea0: 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70  me="typ">The typ
deb0: 65 20 6f 66 20 64 61 74 61 20 63 6f 6e 74 61 69  e of data contai
dec0: 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ned in the colum
ded0: 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74 69 61 6c  n.  If Uninitial
dee0: 69 7a 65 64 2c 20 74 68 69 73 20 66 75 6e 63 74  ized, this funct
def0: 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69 65 76  ion will retriev
df00: 65 20 74 68 65 20 64 61 74 61 74 79 70 65 20 69  e the datatype i
df10: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61 72  nformation.</par
df20: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
df30: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 74 68  turns>Returns th
df40: 65 20 64 61 74 61 20 69 6e 20 74 68 65 20 63 6f  e data in the co
df50: 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  lumn</returns>..
df60: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
df70: 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74  rride object Get
df80: 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61 74  Value(SQLiteStat
df90: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
dfa0: 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54 79 70  index, SQLiteTyp
dfb0: 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20  e typ)..    {.. 
dfc0: 20 20 20 20 20 69 66 20 28 49 73 4e 75 6c 6c 28       if (IsNull(
dfd0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 20 72 65  stmt, index)) re
dfe0: 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75  turn DBNull.Valu
dff0: 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66  e;..      TypeAf
e000: 66 69 6e 69 74 79 20 61 66 66 20 3d 20 74 79 70  finity aff = typ
e010: 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20  .Affinity;..    
e020: 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c 3b    Type t = null;
e030: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 74 79  ....      if (ty
e040: 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79 70 65  p.Type != DbType
e050: 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20 20  .Object)..      
e060: 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d 20 53  {..        t = S
e070: 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c  QLiteConvert.SQL
e080: 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 74 79  iteTypeToType(ty
e090: 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61 66 66  p);..        aff
e0a0: 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e 69 74   = TypeToAffinit
e0b0: 79 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  y(t);..      }..
e0c0: 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28  ..      switch (
e0d0: 61 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  aff)..      {.. 
e0e0: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
e0f0: 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a  Affinity.Blob:..
e100: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
e110: 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65  p.Type == DbType
e120: 2e 47 75 69 64 20 26 26 20 74 79 70 2e 41 66 66  .Guid && typ.Aff
e130: 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66  inity == TypeAff
e140: 69 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20 20 20  inity.Text)..   
e150: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
e160: 6e 65 77 20 47 75 69 64 28 47 65 74 54 65 78 74  new Guid(GetText
e170: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d  (stmt, index));.
e180: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ...          int
e190: 20 6e 20 3d 20 28 69 6e 74 29 47 65 74 42 79 74   n = (int)GetByt
e1a0: 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  es(stmt, index, 
e1b0: 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d  0, null, 0, 0);.
e1c0: 0a 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b  .          byte[
e1d0: 5d 20 62 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e  ] b = new byte[n
e1e0: 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 47 65  ];..          Ge
e1f0: 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64  tBytes(stmt, ind
e200: 65 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29 3b  ex, 0, b, 0, n);
e210: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
e220: 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62   (typ.Type == Db
e230: 54 79 70 65 2e 47 75 69 64 20 26 26 20 6e 20 3d  Type.Guid && n =
e240: 3d 20 31 36 29 0d 0a 20 20 20 20 20 20 20 20 20  = 16)..         
e250: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75     return new Gu
e260: 69 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  id(b);....      
e270: 20 20 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a 20      return b;.. 
e280: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
e290: 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d  Affinity.DateTim
e2a0: 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  e:..          re
e2b0: 74 75 72 6e 20 47 65 74 44 61 74 65 54 69 6d 65  turn GetDateTime
e2c0: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
e2d0: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
e2e0: 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65  eAffinity.Double
e2f0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  :..          if 
e300: 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75  (t == null) retu
e310: 72 6e 20 47 65 74 44 6f 75 62 6c 65 28 73 74 6d  rn GetDouble(stm
e320: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
e330: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
e340: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43          return C
e350: 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70  onvert.ChangeTyp
e360: 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74  e(GetDouble(stmt
e370: 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c  , index), t, nul
e380: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  l);..        cas
e390: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49  e TypeAffinity.I
e3a0: 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20  nt64:..         
e3b0: 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20   if (t == null) 
e3c0: 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28  return GetInt64(
e3d0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
e3e0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
e3f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
e400: 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65  n Convert.Change
e410: 54 79 70 65 28 47 65 74 49 6e 74 36 34 28 73 74  Type(GetInt64(st
e420: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e  mt, index), t, n
e430: 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 64  ull);..        d
e440: 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20  efault:..       
e450: 20 20 20 72 65 74 75 72 6e 20 47 65 74 54 65 78     return GetTex
e460: 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  t(stmt, index);.
e470: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
e480: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
e490: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74  override int Get
e4a0: 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65 28 53  CursorForTable(S
e4b0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
e4c0: 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e 74  tmt, int db, int
e4d0: 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20 20   rootPage)..    
e4e0: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
e4f0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 72  TANDARD..      r
e500: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
e510: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
e520: 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72 28 73  3_table_cursor(s
e530: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
e540: 2c 20 64 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b  , db, rootPage);
e550: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
e560: 65 74 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69  eturn -1;..#endi
e570: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
e580: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
e590: 65 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64 46  e long GetRowIdF
e5a0: 6f 72 43 75 72 73 6f 72 28 53 51 4c 69 74 65 53  orCursor(SQLiteS
e5b0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
e5c0: 6e 74 20 63 75 72 73 6f 72 29 0d 0a 20 20 20 20  nt cursor)..    
e5d0: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
e5e0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c  TANDARD..      l
e5f0: 6f 6e 67 20 72 6f 77 69 64 3b 0d 0a 20 20 20 20  ong rowid;..    
e600: 20 20 69 6e 74 20 72 63 20 3d 20 55 6e 73 61 66    int rc = Unsaf
e610: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
e620: 71 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f  qlite3_cursor_ro
e630: 77 69 64 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  wid(stmt._sqlite
e640: 5f 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20 6f  _stmt, cursor, o
e650: 75 74 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20  ut rowid);..    
e660: 20 20 69 66 20 28 72 63 20 3d 3d 20 30 29 20 72    if (rc == 0) r
e670: 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a  eturn rowid;....
e680: 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d        return 0;.
e690: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
e6a0: 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d  turn 0;..#endif.
e6b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
e6c0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
e6d0: 76 6f 69 64 20 47 65 74 49 6e 64 65 78 43 6f 6c  void GetIndexCol
e6e0: 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f 28  umnExtendedInfo(
e6f0: 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 2c  string database,
e700: 20 73 74 72 69 6e 67 20 69 6e 64 65 78 2c 20 73   string index, s
e710: 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75  tring column, ou
e720: 74 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20  t int sortMode, 
e730: 6f 75 74 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c  out int onError,
e740: 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c   out string coll
e750: 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a  ationSequence)..
e760: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
e770: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
e780: 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 3b 0d     IntPtr coll;.
e790: 0a 20 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c  .      int colll
e7a0: 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72  en;..      int r
e7b0: 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 63 20 3d  c;....      rc =
e7c0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
e7d0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
e7e0: 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69  ex_column_info_i
e7f0: 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55  nterop(_sql, ToU
e800: 54 46 38 28 64 61 74 61 62 61 73 65 29 2c 20 54  TF8(database), T
e810: 6f 55 54 46 38 28 69 6e 64 65 78 29 2c 20 54 6f  oUTF8(index), To
e820: 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75  UTF8(column), ou
e830: 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74 20  t sortMode, out 
e840: 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20 63 6f 6c  onError, out col
e850: 6c 2c 20 6f 75 74 20 63 6f 6c 6c 6c 65 6e 29 3b  l, out colllen);
e860: 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63 20 21  ..      if (rc !
e870: 3d 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53  = 0) throw new S
e880: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72  QLiteException(r
e890: 63 2c 20 22 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  c, "");....     
e8a0: 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   collationSequen
e8b0: 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  ce = UTF8ToStrin
e8c0: 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29  g(coll, colllen)
e8d0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
e8e0: 73 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20  sortMode = 0;.. 
e8f0: 20 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20 32       onError = 2
e900: 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69  ;..      collati
e910: 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 22 42 49  onSequence = "BI
e920: 4e 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a  NARY";..#endif..
e930: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
e940: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
e950: 6e 74 20 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 73  nt FileControl(s
e960: 74 72 69 6e 67 20 7a 44 62 4e 61 6d 65 2c 20 69  tring zDbName, i
e970: 6e 74 20 6f 70 2c 20 49 6e 74 50 74 72 20 70 41  nt op, IntPtr pA
e980: 72 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  rg)..    {..    
e990: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
e9a0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
e9b0: 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
e9c0: 6c 28 5f 73 71 6c 2c 20 28 7a 44 62 4e 61 6d 65  l(_sql, (zDbName
e9d0: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 55 54   != null) ? ToUT
e9e0: 46 38 28 7a 44 62 4e 61 6d 65 29 20 3a 20 6e 75  F8(zDbName) : nu
e9f0: 6c 6c 2c 20 6f 70 2c 20 70 41 72 67 29 3b 0d 0a  ll, op, pArg);..
ea00: 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a         }..  }..}..