System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 92e462c8835a8c89d4d538ac26eabdc674badfea:


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 23 69 66 20 44 45 42 55 47 0d 0a 20 20 75 73  .#if DEBUG..  us
0190: 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e  ing System.Diagn
01a0: 6f 73 74 69 63 73 3b 0d 0a 23 65 6e 64 69 66 0d  ostics;..#endif.
01b0: 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  .  using System.
01c0: 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72 6f 70 53  Runtime.InteropS
01d0: 65 72 76 69 63 65 73 3b 0d 0a 20 20 75 73 69 6e  ervices;..  usin
01e0: 67 20 53 79 73 74 65 6d 2e 54 65 78 74 3b 0d 0a  g System.Text;..
01f0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
0200: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
0210: 0d 0a 20 20 5b 55 6e 6d 61 6e 61 67 65 64 46 75  ..  [UnmanagedFu
0220: 6e 63 74 69 6f 6e 50 6f 69 6e 74 65 72 28 43 61  nctionPointer(Ca
0230: 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 2e  llingConvention.
0240: 43 64 65 63 6c 29 5d 0d 0a 23 65 6e 64 69 66 0d  Cdecl)]..#endif.
0250: 0a 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65  .  internal dele
0260: 67 61 74 65 20 76 6f 69 64 20 53 51 4c 69 74 65  gate void SQLite
0270: 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 49 6e 74 50  LogCallback(IntP
0280: 74 72 20 70 75 73 65 72 2c 20 69 6e 74 20 65 72  tr puser, int er
0290: 72 5f 63 6f 64 65 2c 20 49 6e 74 50 74 72 20 6d  r_code, IntPtr m
02a0: 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 2f 2f  essage);....  //
02b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f  / <summary>..  /
02c0: 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20 69 6d  // This class im
02d0: 70 6c 65 6d 65 6e 74 73 20 53 51 4c 69 74 65 42  plements SQLiteB
02e0: 61 73 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2c 20  ase completely, 
02f0: 61 6e 64 20 69 73 20 74 68 65 20 67 75 74 73 20  and is the guts 
0300: 6f 66 20 74 68 65 20 63 6f 64 65 20 74 68 61 74  of the code that
0310: 20 69 6e 74 65 72 6f 70 27 73 20 53 51 4c 69 74   interop's SQLit
0320: 65 20 77 69 74 68 20 2e 4e 45 54 0d 0a 20 20 2f  e with .NET..  /
0330: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0340: 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20   internal class 
0350: 53 51 4c 69 74 65 33 20 3a 20 53 51 4c 69 74 65  SQLite3 : SQLite
0360: 42 61 73 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 70  Base..  {..    p
0370: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62  rivate static ob
0380: 6a 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20  ject syncRoot = 
0390: 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 0d  new object();...
03a0: 0a 20 20 20 20 2f 2f 0d 0a 20 20 20 20 2f 2f 20  .    //..    // 
03b0: 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20 74 68  NOTE: This is th
03c0: 65 20 70 75 62 6c 69 63 20 6b 65 79 20 66 6f 72  e public key for
03d0: 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61   the System.Data
03e0: 2e 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79  .SQLite assembly
03f0: 2e 20 20 49 66 20 79 6f 75 20 63 68 61 6e 67 65  .  If you change
0400: 20 74 68 65 0d 0a 20 20 20 20 2f 2f 20 20 20 20   the..    //    
0410: 20 20 20 53 4e 4b 20 66 69 6c 65 2c 20 79 6f 75     SNK file, you
0420: 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 63 68   will need to ch
0430: 61 6e 67 65 20 74 68 69 73 20 61 73 20 77 65 6c  ange this as wel
0440: 6c 2e 0d 0a 20 20 20 20 2f 2f 0d 0a 20 20 20 20  l...    //..    
0450: 69 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73  internal const s
0460: 74 72 69 6e 67 20 50 75 62 6c 69 63 4b 65 79 20  tring PublicKey 
0470: 3d 0d 0a 20 20 20 20 20 20 20 20 22 30 30 32 34  =..        "0024
0480: 30 30 30 30 30 34 38 30 30 30 30 30 39 34 30 30  0000048000009400
0490: 30 30 30 30 30 36 30 32 30 30 30 30 30 30 32 34  0000060200000024
04a0: 30 30 30 30 35 32 35 33 34 31 33 31 30 30 30 34  0000525341310004
04b0: 30 30 30 30 30 31 30 30 30 31 30 30 30 35 61 32  00000100010005a2
04c0: 38 38 64 65 35 36 38 37 63 34 65 31 22 20 2b 0d  88de5687c4e1" +.
04d0: 0a 20 20 20 20 20 20 20 20 22 62 36 32 31 64 64  .        "b621dd
04e0: 66 66 35 64 38 34 34 37 32 37 34 31 38 39 35 36  ff5d844727418956
04f0: 39 39 37 66 34 37 35 65 62 38 32 39 34 32 39 65  997f475eb829429e
0500: 34 31 31 61 66 66 33 65 39 33 66 39 37 62 37 30  411aff3e93f97b70
0510: 64 65 36 39 38 62 39 37 32 36 34 30 39 32 35 62  de698b972640925b
0520: 64 64 34 34 32 38 30 64 66 30 22 20 2b 0d 0a 20  dd44280df0" +.. 
0530: 20 20 20 20 20 20 20 22 61 32 35 61 38 34 33 32         "a25a8432
0540: 36 36 39 37 33 37 30 34 31 33 37 63 62 62 30 65  66973704137cbb0e
0550: 37 34 34 31 63 31 66 65 37 63 61 65 34 65 32 34  7441c1fe7cae4e24
0560: 34 30 61 65 39 31 61 62 38 63 64 65 33 39 33 33  40ae91ab8cde3933
0570: 66 65 62 63 62 31 61 63 34 38 64 64 33 33 62 34  febcb1ac48dd33b4
0580: 30 65 31 33 63 34 32 31 22 20 2b 0d 0a 20 20 20  0e13c421" +..   
0590: 20 20 20 20 20 22 64 38 32 31 35 63 31 38 61 34       "d8215c18a4
05a0: 33 34 39 61 34 33 36 64 64 34 39 39 65 33 63 33  349a436dd499e3c3
05b0: 38 35 63 63 36 38 33 30 31 35 66 38 38 36 66 36  85cc683015f886f6
05c0: 63 31 30 62 64 39 30 31 31 35 65 62 32 62 64 36  c10bd90115eb2bd6
05d0: 31 62 36 37 37 35 30 38 33 39 65 33 61 31 39 39  1b67750839e3a199
05e0: 34 31 64 63 39 63 22 3b 0d 0a 0d 0a 23 69 66 20  41dc9c";....#if 
05f0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
0600: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
0610: 69 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73  internal const s
0620: 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72 56 65  tring DesignerVe
0630: 72 73 69 6f 6e 20 3d 20 22 31 2e 30 2e 38 31 2e  rsion = "1.0.81.
0640: 30 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  0";..#endif.... 
0650: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0660: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 70  ..    /// The op
0670: 61 71 75 65 20 70 6f 69 6e 74 65 72 20 72 65 74  aque pointer ret
0680: 75 72 6e 65 64 20 74 6f 20 75 73 20 62 79 20 74  urned to us by t
0690: 68 65 20 73 71 6c 69 74 65 20 70 72 6f 76 69 64  he sqlite provid
06a0: 65 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  er..    /// </su
06b0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74  mmary>..    prot
06c0: 65 63 74 65 64 20 53 51 4c 69 74 65 43 6f 6e 6e  ected SQLiteConn
06d0: 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 5f 73 71  ectionHandle _sq
06e0: 6c 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  l;..    protecte
06f0: 64 20 73 74 72 69 6e 67 20 5f 66 69 6c 65 4e 61  d string _fileNa
0700: 6d 65 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  me;..    protect
0710: 65 64 20 62 6f 6f 6c 20 5f 75 73 65 50 6f 6f 6c  ed bool _usePool
0720: 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ;..    protected
0730: 20 69 6e 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f   int _poolVersio
0740: 6e 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  n;....#if !PLATF
0750: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
0760: 57 4f 52 4b 0d 0a 20 20 20 20 70 72 69 76 61 74  WORK..    privat
0770: 65 20 62 6f 6f 6c 20 5f 62 75 69 6c 64 69 6e 67  e bool _building
0780: 53 63 68 65 6d 61 3b 0d 0a 23 65 6e 64 69 66 0d  Schema;..#endif.
0790: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
07a0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
07b0: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
07c0: 63 74 69 6f 6e 73 20 72 65 67 69 73 74 65 72 65  ctions registere
07d0: 64 20 6f 6e 20 74 68 69 73 20 63 6f 6e 6e 65 63  d on this connec
07e0: 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  tion..    /// </
07f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
0800: 6f 74 65 63 74 65 64 20 53 51 4c 69 74 65 46 75  otected SQLiteFu
0810: 6e 63 74 69 6f 6e 5b 5d 20 5f 66 75 6e 63 74 69  nction[] _functi
0820: 6f 6e 73 41 72 72 61 79 3b 0d 0a 0d 0a 20 20 20  onsArray;....   
0830: 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65   internal SQLite
0840: 33 28 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  3(SQLiteDateForm
0850: 61 74 73 20 66 6d 74 2c 20 44 61 74 65 54 69 6d  ats fmt, DateTim
0860: 65 4b 69 6e 64 20 6b 69 6e 64 29 0d 0a 20 20 20  eKind kind)..   
0870: 20 20 20 3a 20 62 61 73 65 28 66 6d 74 2c 20 6b     : base(fmt, k
0880: 69 6e 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ind)..    {..   
0890: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
08a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
0900: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
0910: 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d  able "Pattern" M
0920: 65 6d 62 65 72 73 0d 0a 20 20 20 20 70 72 69 76  embers..    priv
0930: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
0940: 64 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  d;..    private 
0950: 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73  void CheckDispos
0960: 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ed() /* throw */
0970: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52  ..    {..#if THR
0980: 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a  OW_ON_DISPOSED..
0990: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
09a0: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
09b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a     throw new Obj
09c0: 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70  ectDisposedExcep
09d0: 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c 69  tion(typeof(SQLi
09e0: 74 65 33 29 2e 4e 61 6d 65 29 3b 0d 0a 23 65 6e  te3).Name);..#en
09f0: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
0a00: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
0a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a40: 2f 2f 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 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  /....    protect
0a70: 65 64 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  ed override void
0a80: 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69   Dispose(bool di
0a90: 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d  sposing)..    {.
0aa0: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
0ab0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
0ac0: 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73       if (!dispos
0ad0: 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
0ae0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
0af0: 20 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73      //if (dispos
0b00: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
0b10: 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20        //{..     
0b20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
0b30: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
0b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b50: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
0b60: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20         //    // 
0b70: 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20  dispose managed 
0b80: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
0b90: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
0ba0: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
0bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
0bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0be0: 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  /}....          
0bf0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
0c30: 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67   release unmanag
0c40: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
0c50: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
0c60: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
0c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ca0: 43 6c 6f 73 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  Close();....    
0cb0: 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70              disp
0cc0: 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20  osed = true;..  
0cd0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
0ce0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
0cf0: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
0d00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
0d10: 62 61 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73  base.Dispose(dis
0d20: 70 6f 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20  posing);..      
0d30: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20    }..    }..    
0d40: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
0d50: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
0d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d90: 2f 2f 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 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49 74 20 69  /....    // It i
0dc0: 73 6e 27 74 20 6e 65 63 65 73 73 61 72 79 20 74  sn't necessary t
0dd0: 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79 20 66 75  o cleanup any fu
0de0: 6e 63 74 69 6f 6e 73 20 77 65 27 76 65 20 72 65  nctions we've re
0df0: 67 69 73 74 65 72 65 64 2e 20 20 49 66 20 74 68  gistered.  If th
0e00: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20  e connection..  
0e10: 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20 74 68 65    // goes to the
0e20: 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20 72 65 73   pool and is res
0e30: 75 72 72 65 63 74 65 64 20 6c 61 74 65 72 2c 20  urrected later, 
0e40: 72 65 2d 72 65 67 69 73 74 65 72 65 64 20 66 75  re-registered fu
0e50: 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 6f 76 65  nctions will ove
0e60: 72 77 72 69 74 65 20 74 68 65 0d 0a 20 20 20 20  rwrite the..    
0e70: 2f 2f 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63  // previous func
0e80: 74 69 6f 6e 73 2e 20 20 54 68 65 20 53 51 4c 69  tions.  The SQLi
0e90: 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69 65  teFunctionCookie
0ea0: 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74 61 6b 65  Handle will take
0eb0: 20 63 61 72 65 20 6f 66 20 66 72 65 65 69 6e 67   care of freeing
0ec0: 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20   unmanaged..    
0ed0: 2f 2f 20 72 65 73 6f 75 72 63 65 73 20 62 65 6c  // resources bel
0ee0: 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20 70 72  onging to the pr
0ef0: 65 76 69 6f 75 73 6c 79 2d 72 65 67 69 73 74 65  eviously-registe
0f00: 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a  red functions...
0f10: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
0f20: 72 72 69 64 65 20 76 6f 69 64 20 43 6c 6f 73 65  rride void Close
0f30: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
0f40: 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c   if (_sql != nul
0f50: 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
0f60: 20 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50         if (_useP
0f70: 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ool)..          
0f80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
0f90: 20 53 51 4c 69 74 65 42 61 73 65 2e 52 65 73 65   SQLiteBase.Rese
0fa0: 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f 73 71 6c  tConnection(_sql
0fb0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
0fc0: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
0fd0: 6f 6e 50 6f 6f 6c 2e 41 64 64 28 5f 66 69 6c 65  onPool.Add(_file
0fe0: 4e 61 6d 65 2c 20 5f 73 71 6c 2c 20 5f 70 6f 6f  Name, _sql, _poo
0ff0: 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 23 69  lVersion);....#i
1000: 66 20 44 45 42 55 47 20 26 26 20 21 4e 45 54 5f  f DEBUG && !NET_
1010: 43 4f 4d 50 41 43 54 5f 32 30 0d 0a 20 20 20 20  COMPACT_20..    
1020: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
1030: 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67  WriteLine(String
1040: 2e 46 6f 72 6d 61 74 28 22 43 6c 6f 73 65 20 28  .Format("Close (
1050: 50 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 5f 73 71  Pool): {0}", _sq
1060: 6c 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  l));..#endif..  
1070: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1080: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
1090: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10a0: 20 20 20 20 20 20 5f 73 71 6c 2e 44 69 73 70 6f        _sql.Dispo
10b0: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
10c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73   }..          _s
10d0: 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ql = null;..    
10e0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
10f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  /....    interna
1160: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
1170: 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20 20 7b 0d  Cancel()..    {.
1180: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
1190: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
11a0: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 5f 73 71  e3_interrupt(_sq
11b0: 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
11c0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
11d0: 69 64 65 20 73 74 72 69 6e 67 20 56 65 72 73 69  ide string Versi
11e0: 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  on..    {..     
11f0: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
1200: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
1210: 4c 69 74 65 33 2e 53 51 4c 69 74 65 56 65 72 73  Lite3.SQLiteVers
1220: 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ion;..      }.. 
1230: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
1240: 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69  rnal static stri
1250: 6e 67 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e  ng DefineConstan
1260: 74 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ts..    {..     
1270: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
1280: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
1290: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73  tringBuilder res
12a0: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
12b0: 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20  Builder();..    
12c0: 20 20 20 20 20 20 20 20 49 4c 69 73 74 3c 73 74          IList<st
12d0: 72 69 6e 67 3e 20 6c 69 73 74 20 3d 20 53 51 4c  ring> list = SQL
12e0: 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e  iteDefineConstan
12f0: 74 73 2e 4f 70 74 69 6f 6e 4c 69 73 74 3b 0d 0a  ts.OptionList;..
1300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1310: 20 28 6c 69 73 74 20 21 3d 20 6e 75 6c 6c 29 0d   (list != null).
1320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1340: 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67 20  foreach (string 
1350: 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 73 74 29  element in list)
1360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1370: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1380: 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6c 65           if (ele
1390: 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ment == null).. 
13a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b0: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
13c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13d0: 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
13e0: 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  lt.Length > 0)..
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 72 65 73 75 6c 74 2e 41          result.A
1410: 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a 20  ppend(' ');.... 
1420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1430: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
1440: 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20  (element);..    
1450: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1460: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1470: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1480: 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69  rn result.ToStri
1490: 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ng();..        }
14a0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
14b0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73  nternal static s
14c0: 74 72 69 6e 67 20 53 51 4c 69 74 65 56 65 72 73  tring SQLiteVers
14d0: 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ion..    {..    
14e0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
14f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
1500: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
1510: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1520: 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
1530: 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a 20 20 20 20  on(), -1);..    
1540: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
1550: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
1560: 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65 53  c string SQLiteS
1570: 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a  ourceId..    {..
1580: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
1590: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
15a0: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
15b0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
15c0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 6f 75 72  ods.sqlite3_sour
15d0: 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 20 20  ceid(), -1);..  
15e0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
15f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1600: 72 72 69 64 65 20 62 6f 6f 6c 20 41 75 74 6f 43  rride bool AutoC
1610: 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d 0a 20 20  ommit..    {..  
1620: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
1630: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1640: 20 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28 5f 73   IsAutocommit(_s
1650: 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ql);..      }.. 
1660: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
1670: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
1680: 6e 67 20 4c 61 73 74 49 6e 73 65 72 74 52 6f 77  ng LastInsertRow
1690: 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  Id..    {..     
16a0: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
16b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
16c0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
16d0: 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  s.sqlite3_last_i
16e0: 6e 73 65 72 74 5f 72 6f 77 69 64 28 5f 73 71 6c  nsert_rowid(_sql
16f0: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
1700: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
1710: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
1720: 43 68 61 6e 67 65 73 0d 0a 20 20 20 20 7b 0d 0a  Changes..    {..
1730: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
1740: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
1750: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
1760: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
1770: 68 61 6e 67 65 73 28 5f 73 71 6c 29 3b 0d 0a 20  hanges(_sql);.. 
1780: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
1790: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
17a0: 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f  erride long Memo
17b0: 72 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20  ryUsed..    {.. 
17c0: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
17d0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
17e0: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
17f0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65  thods.sqlite3_me
1800: 6d 6f 72 79 5f 75 73 65 64 28 29 3b 0d 0a 20 20  mory_used();..  
1810: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
1820: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1830: 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72  rride long Memor
1840: 79 48 69 67 68 77 61 74 65 72 0d 0a 20 20 20 20  yHighwater..    
1850: 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20  {..      get..  
1860: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
1870: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
1880: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1890: 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74  3_memory_highwat
18a0: 65 72 28 30 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  er(0);..      }.
18b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
18c0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
18d0: 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e 20 74 68   /// Shutdown th
18e0: 65 20 53 51 4c 69 74 65 20 65 6e 67 69 6e 65 20  e SQLite engine 
18f0: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
1900: 65 20 72 65 73 74 61 72 74 65 64 20 77 69 74 68  e restarted with
1910: 20 64 69 66 66 65 72 65 6e 74 20 63 6f 6e 66 69   different confi
1920: 67 20 6f 70 74 69 6f 6e 73 2e 0d 0a 20 20 20 20  g options...    
1930: 2f 2f 2f 20 57 65 20 64 65 70 65 6e 64 20 6f 6e  /// We depend on
1940: 20 61 75 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61   auto initializa
1950: 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e  tion to recover.
1960: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1970: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
1980: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
1990: 20 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65   result code</re
19a0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
19b0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
19c0: 74 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a 20 20  t Shutdown()..  
19d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74    {..        int
19e0: 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
19f0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1a00: 33 5f 73 68 75 74 64 6f 77 6e 28 29 3b 0d 0a 20  3_shutdown();.. 
1a10: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63         return rc
1a20: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
1a30: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
1a40: 65 20 62 6f 6f 6c 20 49 73 4f 70 65 6e 28 29 0d  e bool IsOpen().
1a50: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
1a60: 72 65 74 75 72 6e 20 28 5f 73 71 6c 20 21 3d 20  return (_sql != 
1a70: 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  null);..    }...
1a80: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1a90: 65 72 72 69 64 65 20 76 6f 69 64 20 4f 70 65 6e  erride void Open
1aa0: 28 73 74 72 69 6e 67 20 73 74 72 46 69 6c 65 6e  (string strFilen
1ab0: 61 6d 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ame, SQLiteConne
1ac0: 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e 65  ctionFlags conne
1ad0: 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51 4c 69  ctionFlags, SQLi
1ae0: 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d 20  teOpenFlagsEnum 
1af0: 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74 20 6d  openFlags, int m
1b00: 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f 6c  axPoolSize, bool
1b10: 20 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 7b   usePool)..    {
1b20: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c  ..      if (_sql
1b30: 20 21 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   != null) return
1b40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 75 73 65 50  ;....      _useP
1b50: 6f 6f 6c 20 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a  ool = usePool;..
1b60: 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20        _fileName 
1b70: 3d 20 73 74 72 46 69 6c 65 6e 61 6d 65 3b 0d 0a  = strFilename;..
1b80: 0d 0a 20 20 20 20 20 20 69 66 20 28 75 73 65 50  ..      if (useP
1b90: 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ool)..      {.. 
1ba0: 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 53 51         _sql = SQ
1bb0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f  LiteConnectionPo
1bc0: 6f 6c 2e 52 65 6d 6f 76 65 28 73 74 72 46 69 6c  ol.Remove(strFil
1bd0: 65 6e 61 6d 65 2c 20 6d 61 78 50 6f 6f 6c 53 69  ename, maxPoolSi
1be0: 7a 65 2c 20 6f 75 74 20 5f 70 6f 6f 6c 56 65 72  ze, out _poolVer
1bf0: 73 69 6f 6e 29 3b 0d 0a 0d 0a 23 69 66 20 44 45  sion);....#if DE
1c00: 42 55 47 20 26 26 20 21 4e 45 54 5f 43 4f 4d 50  BUG && !NET_COMP
1c10: 41 43 54 5f 32 30 0d 0a 20 20 20 20 20 20 20 20  ACT_20..        
1c20: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
1c30: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 4f  String.Format("O
1c40: 70 65 6e 20 28 50 6f 6f 6c 29 3a 20 7b 30 7d 22  pen (Pool): {0}"
1c50: 2c 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  , (_sql != null)
1c60: 20 3f 20 5f 73 71 6c 2e 54 6f 53 74 72 69 6e 67   ? _sql.ToString
1c70: 28 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b  () : "<null>"));
1c80: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
1c90: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  }....      if (_
1ca0: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
1cb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
1cc0: 6e 74 50 74 72 20 64 62 3b 0d 0a 0d 0a 23 69 66  ntPtr db;....#if
1cd0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
1ce0: 44 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  D..        int n
1cf0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
1d00: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f  ethods.sqlite3_o
1d10: 70 65 6e 5f 69 6e 74 65 72 6f 70 28 54 6f 55 54  pen_interop(ToUT
1d20: 46 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c  F8(strFilename),
1d30: 20 28 69 6e 74 29 6f 70 65 6e 46 6c 61 67 73 2c   (int)openFlags,
1d40: 20 6f 75 74 20 64 62 29 3b 0d 0a 23 65 6c 73 65   out db);..#else
1d50: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20  ..        int n 
1d60: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
1d70: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70  thods.sqlite3_op
1d80: 65 6e 5f 76 32 28 54 6f 55 54 46 38 28 73 74 72  en_v2(ToUTF8(str
1d90: 46 69 6c 65 6e 61 6d 65 29 2c 20 6f 75 74 20 64  Filename), out d
1da0: 62 2c 20 28 69 6e 74 29 6f 70 65 6e 46 6c 61 67  b, (int)openFlag
1db0: 73 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  s, IntPtr.Zero);
1dc0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20  ..#endif....#if 
1dd0: 44 45 42 55 47 20 26 26 20 21 4e 45 54 5f 43 4f  DEBUG && !NET_CO
1de0: 4d 50 41 43 54 5f 32 30 0d 0a 20 20 20 20 20 20  MPACT_20..      
1df0: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
1e00: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
1e10: 22 4f 70 65 6e 3a 20 7b 30 7d 22 2c 20 64 62 29  "Open: {0}", db)
1e20: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
1e30: 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29        if (n > 0)
1e40: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
1e50: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75  eException(n, nu
1e60: 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ll);....        
1e70: 5f 73 71 6c 20 3d 20 64 62 3b 0d 0a 20 20 20 20  _sql = db;..    
1e80: 20 20 7d 0d 0a 20 20 20 20 20 20 2f 2f 20 42 69    }..      // Bi
1e90: 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 20  nd functions to 
1ea0: 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  this connection.
1eb0: 20 20 49 66 20 61 6e 79 20 70 72 65 76 69 6f 75    If any previou
1ec0: 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20 74  s functions of t
1ed0: 68 65 20 73 61 6d 65 20 6e 61 6d 65 0d 0a 20 20  he same name..  
1ee0: 20 20 20 20 2f 2f 20 77 65 72 65 20 61 6c 72 65      // were alre
1ef0: 61 64 79 20 62 6f 75 6e 64 2c 20 74 68 65 6e 20  ady bound, then 
1f00: 74 68 65 20 6e 65 77 20 62 69 6e 64 69 6e 67 73  the new bindings
1f10: 20 72 65 70 6c 61 63 65 20 74 68 65 20 6f 6c 64   replace the old
1f20: 2e 0d 0a 20 20 20 20 20 20 5f 66 75 6e 63 74 69  ...      _functi
1f30: 6f 6e 73 41 72 72 61 79 20 3d 20 53 51 4c 69 74  onsArray = SQLit
1f40: 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75  eFunction.BindFu
1f50: 6e 63 74 69 6f 6e 73 28 74 68 69 73 2c 20 63 6f  nctions(this, co
1f60: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 29 3b 0d  nnectionFlags);.
1f70: 0a 20 20 20 20 20 20 53 65 74 54 69 6d 65 6f 75  .      SetTimeou
1f80: 74 28 30 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  t(0);..    }....
1f90: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1fa0: 72 72 69 64 65 20 76 6f 69 64 20 43 6c 65 61 72  rride void Clear
1fb0: 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Pool()..    {.. 
1fc0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
1fd0: 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50  ctionPool.ClearP
1fe0: 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d  ool(_fileName);.
1ff0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
2000: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
2010: 76 6f 69 64 20 53 65 74 54 69 6d 65 6f 75 74 28  void SetTimeout(
2020: 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29 0d  int nTimeoutMS).
2030: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
2040: 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  t n = UnsafeNati
2050: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
2060: 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 5f  3_busy_timeout(_
2070: 73 71 6c 2c 20 6e 54 69 6d 65 6f 75 74 4d 53 29  sql, nTimeoutMS)
2080: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e  ;..      if (n >
2090: 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51   0) throw new SQ
20a0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
20b0: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
20c0: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
20d0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
20e0: 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 28 53  ride bool Step(S
20f0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
2100: 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tmt)..    {..   
2110: 20 20 20 69 6e 74 20 6e 3b 0d 0a 20 20 20 20 20     int n;..     
2120: 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75   Random rnd = nu
2130: 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20  ll;..      uint 
2140: 73 74 61 72 74 74 69 63 6b 20 3d 20 28 75 69 6e  starttick = (uin
2150: 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69  t)Environment.Ti
2160: 63 6b 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20  ckCount;..      
2170: 75 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28  uint timeout = (
2180: 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d  uint)(stmt._comm
2190: 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65  and._commandTime
21a0: 6f 75 74 20 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a  out * 1000);....
21b0: 20 20 20 20 20 20 77 68 69 6c 65 20 28 74 72 75        while (tru
21c0: 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  e)..      {..   
21d0: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
21e0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
21f0: 69 74 65 33 5f 73 74 65 70 28 73 74 6d 74 2e 5f  ite3_step(stmt._
2200: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 0d  sqlite_stmt);...
2210: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d  .        if (n =
2220: 3d 20 31 30 30 29 20 72 65 74 75 72 6e 20 74 72  = 100) return tr
2230: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ue;..        if 
2240: 28 6e 20 3d 3d 20 31 30 31 29 20 72 65 74 75 72  (n == 101) retur
2250: 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
2260: 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 0d 0a      if (n > 0)..
2270: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2280: 20 20 20 20 20 69 6e 74 20 72 3b 0d 0a 0d 0a 20       int r;.... 
2290: 20 20 20 20 20 20 20 20 20 2f 2f 20 41 6e 20 65           // An e
22a0: 72 72 6f 72 20 6f 63 63 75 72 72 65 64 2c 20 61  rror occurred, a
22b0: 74 74 65 6d 70 74 20 74 6f 20 72 65 73 65 74 20  ttempt to reset 
22c0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  the statement.  
22d0: 49 66 20 74 68 65 20 72 65 73 65 74 20 77 6f 72  If the reset wor
22e0: 6b 65 64 20 62 65 63 61 75 73 65 20 74 68 65 0d  ked because the.
22f0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 73 63  .          // sc
2300: 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
2310: 2c 20 72 65 2d 74 72 79 20 74 68 65 20 73 74 65  , re-try the ste
2320: 70 20 61 67 61 69 6e 2e 20 20 49 66 20 69 74 20  p again.  If it 
2330: 65 72 72 6f 72 65 64 20 6f 75 72 20 62 65 63 61  errored our beca
2340: 75 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65  use the database
2350: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 69  ..          // i
2360: 73 20 6c 6f 63 6b 65 64 2c 20 74 68 65 6e 20 6b  s locked, then k
2370: 65 65 70 20 72 65 74 72 79 69 6e 67 20 75 6e 74  eep retrying unt
2380: 69 6c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74  il the command t
2390: 69 6d 65 6f 75 74 20 6f 63 63 75 72 73 2e 0d 0a  imeout occurs...
23a0: 20 20 20 20 20 20 20 20 20 20 72 20 3d 20 52 65            r = Re
23b0: 73 65 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20  set(stmt);....  
23c0: 20 20 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d          if (r ==
23d0: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
23e0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
23f0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51  eException(n, SQ
2400: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29  LiteLastError())
2410: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 65  ;....          e
2420: 6c 73 65 20 69 66 20 28 28 72 20 3d 3d 20 36 20  lse if ((r == 6 
2430: 7c 7c 20 72 20 3d 3d 20 35 29 20 26 26 20 73 74  || r == 5) && st
2440: 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e  mt._command != n
2450: 75 6c 6c 29 20 2f 2f 20 53 51 4c 49 54 45 5f 4c  ull) // SQLITE_L
2460: 4f 43 4b 45 44 20 7c 7c 20 53 51 4c 49 54 45 5f  OCKED || SQLITE_
2470: 42 55 53 59 0d 0a 20 20 20 20 20 20 20 20 20 20  BUSY..          
2480: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
2490: 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20  / Keep trying.. 
24a0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
24b0: 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46  nd == null) // F
24c0: 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65 20  irst time we've 
24d0: 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20  encountered the 
24e0: 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  lock..          
24f0: 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61      rnd = new Ra
2500: 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndom();....     
2510: 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27         // If we'
2520: 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65 20  ve exceeded the 
2530: 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75  command's timeou
2540: 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20 74  t, give up and t
2550: 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20  hrow an error.. 
2560: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
2570: 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74  uint)Environment
2580: 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61  .TickCount - sta
2590: 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74  rttick > timeout
25a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
25b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25c0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
25d0: 45 78 63 65 70 74 69 6f 6e 28 72 2c 20 53 51 4c  Exception(r, SQL
25e0: 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  iteLastError());
25f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
2610: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
2620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2630: 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65  // Otherwise sle
2640: 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20  ep for a random 
2650: 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75  amount of time u
2660: 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20  p to 150ms..    
2670: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
2680: 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61  .Threading.Threa
2690: 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74  d.Sleep(rnd.Next
26a0: 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20  (1, 150));..    
26b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
26c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
26d0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..    
26e0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
26f0: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52  l override int R
2700: 65 73 65 74 28 53 51 4c 69 74 65 53 74 61 74 65  eset(SQLiteState
2710: 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20  ment stmt)..    
2720: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 3b 0d  {..      int n;.
2730: 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
2740: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e  TANDARD..      n
2750: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
2760: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
2770: 65 73 65 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d  eset_interop(stm
2780: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b  t._sqlite_stmt);
2790: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e  ..#else..      n
27a0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
27b0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
27c0: 65 73 65 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  eset(stmt._sqlit
27d0: 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66  e_stmt);..#endif
27e0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20  ....      // If 
27f0: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
2800: 65 64 2c 20 74 72 79 20 61 6e 64 20 72 65 2d 70  ed, try and re-p
2810: 72 65 70 61 72 65 20 69 74 0d 0a 20 20 20 20 20  repare it..     
2820: 20 69 66 20 28 6e 20 3d 3d 20 31 37 29 20 2f 2f   if (n == 17) //
2830: 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0d 0a   SQLITE_SCHEMA..
2840: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2850: 20 2f 2f 20 52 65 63 72 65 61 74 65 20 61 20 64   // Recreate a d
2860: 75 6d 6d 79 20 73 74 61 74 65 6d 65 6e 74 0d 0a  ummy statement..
2870: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
2880: 74 72 3b 0d 0a 20 20 20 20 20 20 20 20 75 73 69  tr;..        usi
2890: 6e 67 20 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ng (SQLiteStatem
28a0: 65 6e 74 20 74 6d 70 20 3d 20 50 72 65 70 61 72  ent tmp = Prepar
28b0: 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73 71  e(null, stmt._sq
28c0: 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c 6c  lStatement, null
28d0: 2c 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63  , (uint)(stmt._c
28e0: 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54  ommand._commandT
28f0: 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 2c 20  imeout * 1000), 
2900: 6f 75 74 20 73 74 72 29 29 0d 0a 20 20 20 20 20  out str))..     
2910: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2920: 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74 68 65 20  // Finalize the 
2930: 65 78 69 73 74 69 6e 67 20 73 74 61 74 65 6d 65  existing stateme
2940: 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  nt..          st
2950: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2e  mt._sqlite_stmt.
2960: 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20  Dispose();..    
2970: 20 20 20 20 20 20 2f 2f 20 52 65 61 73 73 69 67        // Reassig
2980: 6e 20 61 20 6e 65 77 20 73 74 61 74 65 6d 65 6e  n a new statemen
2990: 74 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  t pointer to the
29a0: 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e 74 20 61   old statement a
29b0: 6e 64 20 63 6c 65 61 72 20 74 68 65 20 74 65 6d  nd clear the tem
29c0: 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20 20  porary one..    
29d0: 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69        stmt._sqli
29e0: 74 65 5f 73 74 6d 74 20 3d 20 74 6d 70 2e 5f 73  te_stmt = tmp._s
29f0: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20  qlite_stmt;..   
2a00: 20 20 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c 69         tmp._sqli
2a10: 74 65 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d  te_stmt = null;.
2a20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  ...          // 
2a30: 52 65 61 70 70 6c 79 20 70 61 72 61 6d 65 74 65  Reapply paramete
2a40: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  rs..          st
2a50: 6d 74 2e 42 69 6e 64 50 61 72 61 6d 65 74 65 72  mt.BindParameter
2a60: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  s();..        }.
2a70: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
2a80: 2d 31 3b 20 2f 2f 20 52 65 73 65 74 20 77 61 73  -1; // Reset was
2a90: 20 4f 4b 2c 20 77 69 74 68 20 73 63 68 65 6d 61   OK, with schema
2aa0: 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d   change..      }
2ab0: 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20  ..      else if 
2ac0: 28 6e 20 3d 3d 20 36 20 7c 7c 20 6e 20 3d 3d 20  (n == 6 || n == 
2ad0: 35 29 20 2f 2f 20 53 51 4c 49 54 45 5f 4c 4f 43  5) // SQLITE_LOC
2ae0: 4b 45 44 20 7c 7c 20 53 51 4c 49 54 45 5f 42 55  KED || SQLITE_BU
2af0: 53 59 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  SY..        retu
2b00: 72 6e 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  rn n;....      i
2b10: 66 20 28 6e 20 3e 20 30 29 0d 0a 20 20 20 20 20  f (n > 0)..     
2b20: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
2b30: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
2b40: 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28  SQLiteLastError(
2b50: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  ));....      ret
2b60: 75 72 6e 20 30 3b 20 2f 2f 20 57 65 20 72 65 73  urn 0; // We res
2b70: 65 74 20 4f 4b 2c 20 6e 6f 20 73 63 68 65 6d 61  et OK, no schema
2b80: 20 63 68 61 6e 67 65 73 0d 0a 20 20 20 20 7d 0d   changes..    }.
2b90: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2ba0: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
2bb0: 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28  SQLiteLastError(
2bc0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
2bd0: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 42 61 73  return SQLiteBas
2be0: 65 2e 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f  e.SQLiteLastErro
2bf0: 72 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d  r(_sql);..    }.
2c00: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
2c10: 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 53  override SQLiteS
2c20: 74 61 74 65 6d 65 6e 74 20 50 72 65 70 61 72 65  tatement Prepare
2c30: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
2c40: 6e 20 63 6e 6e 2c 20 73 74 72 69 6e 67 20 73 74  n cnn, string st
2c50: 72 53 71 6c 2c 20 53 51 4c 69 74 65 53 74 61 74  rSql, SQLiteStat
2c60: 65 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 2c 20  ement previous, 
2c70: 75 69 6e 74 20 74 69 6d 65 6f 75 74 4d 53 2c 20  uint timeoutMS, 
2c80: 6f 75 74 20 73 74 72 69 6e 67 20 73 74 72 52 65  out string strRe
2c90: 6d 61 69 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  main)..    {..  
2ca0: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
2cb0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74  IsNullOrEmpty(st
2cc0: 72 53 71 6c 29 29 0d 0a 20 20 20 20 20 20 7b 0d  rSql))..      {.
2cd0: 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
2ce0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 51       // NOTE: SQ
2cf0: 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75  Lite does not su
2d00: 70 70 6f 72 74 20 74 68 65 20 63 6f 6e 63 65 70  pport the concep
2d10: 74 20 6f 66 20 73 65 70 61 72 61 74 65 20 73 63  t of separate sc
2d20: 68 65 6d 61 73 0d 0a 20 20 20 20 20 20 20 20 2f  hemas..        /
2d30: 2f 20 20 20 20 20 20 20 69 6e 20 6f 6e 65 20 64  /       in one d
2d40: 61 74 61 62 61 73 65 3b 20 74 68 65 72 65 66 6f  atabase; therefo
2d50: 72 65 2c 20 72 65 6d 6f 76 65 20 74 68 65 20 62  re, remove the b
2d60: 61 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 0d  ase schema name.
2d70: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
2d80: 20 20 75 73 65 64 20 74 6f 20 73 6d 6f 6f 74 68    used to smooth
2d90: 20 69 6e 74 65 67 72 61 74 69 6f 6e 20 77 69 74   integration wit
2da0: 68 20 74 68 65 20 62 61 73 65 20 2e 4e 45 54 20  h the base .NET 
2db0: 46 72 61 6d 65 77 6f 72 6b 0d 0a 20 20 20 20 20  Framework..     
2dc0: 20 20 20 2f 2f 20 20 20 20 20 20 20 64 61 74 61     //       data
2dd0: 20 63 6c 61 73 73 65 73 2e 0d 0a 20 20 20 20 20   classes...     
2de0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 73     //..        s
2df0: 74 72 69 6e 67 20 62 61 73 65 53 63 68 65 6d 61  tring baseSchema
2e00: 4e 61 6d 65 20 3d 20 28 63 6e 6e 20 21 3d 20 6e  Name = (cnn != n
2e10: 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 62 61 73 65  ull) ? cnn._base
2e20: 53 63 68 65 6d 61 4e 61 6d 65 20 3a 20 6e 75 6c  SchemaName : nul
2e30: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  l;....        if
2e40: 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
2e50: 4f 72 45 6d 70 74 79 28 62 61 73 65 53 63 68 65  OrEmpty(baseSche
2e60: 6d 61 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  maName))..      
2e70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73    {..          s
2e80: 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52  trSql = strSql.R
2e90: 65 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20  eplace(..       
2ea0: 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
2eb0: 72 6d 61 74 28 22 5b 7b 30 7d 5d 2e 22 2c 20 62  rmat("[{0}].", b
2ec0: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20  aseSchemaName), 
2ed0: 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
2ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 53  ..          strS
2ef0: 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c  ql = strSql.Repl
2f00: 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
2f10: 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
2f20: 74 28 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63  t("{0}.", baseSc
2f30: 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e  hemaName), Strin
2f40: 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20  g.Empty);..     
2f50: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
2f60: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e  .      SQLiteCon
2f70: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
2f80: 67 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  gs =..          
2f90: 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (cnn != null) ? 
2fa0: 63 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69  cnn.Flags : SQLi
2fb0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
2fc0: 73 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a 23 69  s.Default;....#i
2fd0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
2fe0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
2ff0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
3000: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
3010: 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61 72  nFlags.LogPrepar
3020: 65 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  e) == SQLiteConn
3030: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50  ectionFlags.LogP
3040: 72 65 70 61 72 65 29 0d 0a 20 20 20 20 20 20 7b  repare)..      {
3050: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
3060: 28 73 74 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c 29  (strSql == null)
3070: 20 7c 7c 20 28 73 74 72 53 71 6c 2e 4c 65 6e 67   || (strSql.Leng
3080: 74 68 20 3d 3d 20 30 29 20 7c 7c 20 28 73 74 72  th == 0) || (str
3090: 53 71 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e 67 74  Sql.Trim().Lengt
30a0: 68 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20 20  h == 0))..      
30b0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
30c0: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 30 2c 20  g.LogMessage(0, 
30d0: 22 50 72 65 70 61 72 69 6e 67 20 7b 3c 6e 6f 74  "Preparing {<not
30e0: 68 69 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20 20  hing>}...");..  
30f0: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
3100: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
3110: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
3120: 28 30 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  (0, String.Forma
3130: 74 28 22 50 72 65 70 61 72 69 6e 67 20 7b 7b 7b  t("Preparing {{{
3140: 30 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72 53 71 6c  0}}}...", strSql
3150: 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 23 65  ));..      }..#e
3160: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 49 6e  ndif....      In
3170: 74 50 74 72 20 73 74 6d 74 20 3d 20 49 6e 74 50  tPtr stmt = IntP
3180: 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
3190: 49 6e 74 50 74 72 20 70 74 72 20 3d 20 49 6e 74  IntPtr ptr = Int
31a0: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
31b0: 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
31c0: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 31 37 3b       int n = 17;
31d0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 72 65 74 72  ..      int retr
31e0: 69 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ies = 0;..      
31f0: 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
3200: 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20 20 20  8(strSql);..    
3210: 20 20 73 74 72 69 6e 67 20 74 79 70 65 64 65 66    string typedef
3220: 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  s = null;..     
3230: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
3240: 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20   cmd = null;..  
3250: 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d      Random rnd =
3260: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69   null;..      ui
3270: 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28  nt starttick = (
3280: 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74  uint)Environment
3290: 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a 20  .TickCount;.... 
32a0: 20 20 20 20 20 47 43 48 61 6e 64 6c 65 20 68 61       GCHandle ha
32b0: 6e 64 6c 65 20 3d 20 47 43 48 61 6e 64 6c 65 2e  ndle = GCHandle.
32c0: 41 6c 6c 6f 63 28 62 2c 20 47 43 48 61 6e 64 6c  Alloc(b, GCHandl
32d0: 65 54 79 70 65 2e 50 69 6e 6e 65 64 29 3b 0d 0a  eType.Pinned);..
32e0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 73 71        IntPtr psq
32f0: 6c 20 3d 20 68 61 6e 64 6c 65 2e 41 64 64 72 4f  l = handle.AddrO
3300: 66 50 69 6e 6e 65 64 4f 62 6a 65 63 74 28 29 3b  fPinnedObject();
3310: 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20  ..      try..   
3320: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 77 68     {..        wh
3330: 69 6c 65 20 28 28 6e 20 3d 3d 20 31 37 20 7c 7c  ile ((n == 17 ||
3340: 20 6e 20 3d 3d 20 36 20 7c 7c 20 6e 20 3d 3d 20   n == 6 || n == 
3350: 35 29 20 26 26 20 72 65 74 72 69 65 73 20 3c 20  5) && retries < 
3360: 33 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  3)..        {..#
3370: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
3380: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 6e  ARD..          n
3390: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
33a0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70  ethods.sqlite3_p
33b0: 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 5f  repare_interop(_
33c0: 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e  sql, psql, b.Len
33d0: 67 74 68 20 2d 20 31 2c 20 6f 75 74 20 73 74 6d  gth - 1, out stm
33e0: 74 2c 20 6f 75 74 20 70 74 72 2c 20 6f 75 74 20  t, out ptr, out 
33f0: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
3400: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
3410: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
3420: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
3430: 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65  _sql, psql, b.Le
3440: 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20 73 74  ngth - 1, out st
3450: 6d 74 2c 20 6f 75 74 20 70 74 72 29 3b 0d 0a 20  mt, out ptr);.. 
3460: 20 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d           len = -
3470: 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69  1;..#endif....#i
3480: 66 20 44 45 42 55 47 20 26 26 20 21 4e 45 54 5f  f DEBUG && !NET_
3490: 43 4f 4d 50 41 43 54 5f 32 30 0d 0a 20 20 20 20  COMPACT_20..    
34a0: 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
34b0: 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72  eLine(String.For
34c0: 6d 61 74 28 22 50 72 65 70 61 72 65 3a 20 7b 30  mat("Prepare: {0
34d0: 7d 22 2c 20 73 74 6d 74 29 29 3b 0d 0a 23 65 6e  }", stmt));..#en
34e0: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  dif....         
34f0: 20 69 66 20 28 6e 20 3d 3d 20 31 37 29 0d 0a 20   if (n == 17).. 
3500: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72 69             retri
3510: 65 73 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  es++;..         
3520: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 31   else if (n == 1
3530: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
3540: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3550: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 53  String.Compare(S
3560: 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29  QLiteLastError()
3570: 2c 20 22 6e 65 61 72 20 5c 22 54 59 50 45 53 5c  , "near \"TYPES\
3580: 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 22  ": syntax error"
3590: 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
35a0: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
35b0: 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20  Case) == 0)..   
35c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35d0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 70 6f            int po
35e0: 73 20 3d 20 73 74 72 53 71 6c 2e 49 6e 64 65 78  s = strSql.Index
35f0: 4f 66 28 27 3b 27 29 3b 0d 0a 20 20 20 20 20 20  Of(';');..      
3600: 20 20 20 20 20 20 20 20 69 66 20 28 70 6f 73 20          if (pos 
3610: 3d 3d 20 2d 31 29 20 70 6f 73 20 3d 20 73 74 72  == -1) pos = str
3620: 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 31 3b 0d  Sql.Length - 1;.
3630: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3640: 20 74 79 70 65 64 65 66 73 20 3d 20 73 74 72 53   typedefs = strS
3650: 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20  ql.Substring(0, 
3660: 70 6f 73 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20  pos + 1);..     
3670: 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20           strSql 
3680: 3d 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69  = strSql.Substri
3690: 6e 67 28 70 6f 73 20 2b 20 31 29 3b 0d 0a 0d 0a  ng(pos + 1);....
36a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
36b0: 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 0d  rRemain = "";...
36c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77  .              w
36d0: 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c  hile (cmd == nul
36e0: 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67  l && strSql.Leng
36f0: 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20  th > 0)..       
3700: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3710: 20 20 20 20 20 20 20 20 20 20 63 6d 64 20 3d 20            cmd = 
3720: 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73 74 72  Prepare(cnn, str
3730: 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20 74  Sql, previous, t
3740: 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74  imeoutMS, out st
3750: 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20  rRemain);..     
3760: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71             strSq
3770: 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a  l = strRemain;..
3780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
3790: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
37a0: 20 69 66 20 28 63 6d 64 20 21 3d 20 6e 75 6c 6c   if (cmd != null
37b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37c0: 20 20 20 63 6d 64 2e 53 65 74 54 79 70 65 73 28     cmd.SetTypes(
37d0: 74 79 70 65 64 65 66 73 29 3b 0d 0a 0d 0a 20 20  typedefs);....  
37e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
37f0: 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20  rn cmd;..       
3800: 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 50 4c 41       }..#if !PLA
3810: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
3820: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
3830: 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 62 75      else if (_bu
3840: 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 3d 20  ildingSchema == 
3850: 66 61 6c 73 65 20 26 26 20 53 74 72 69 6e 67 2e  false && String.
3860: 43 6f 6d 70 61 72 65 28 53 51 4c 69 74 65 4c 61  Compare(SQLiteLa
3870: 73 74 45 72 72 6f 72 28 29 2c 20 30 2c 20 22 6e  stError(), 0, "n
3880: 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 54 45  o such table: TE
3890: 4d 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c 20 32  MP.SCHEMA", 0, 2
38a0: 36 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  6, StringCompari
38b0: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
38c0: 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20  eCase) == 0)..  
38d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
38e0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52 65             strRe
38f0: 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 20 20 20 20  main = "";..    
3900: 20 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c 64            _build
3910: 69 6e 67 53 63 68 65 6d 61 20 3d 20 74 72 75 65  ingSchema = true
3920: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3930: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
3940: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3950: 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 53 63         ISQLiteSc
3960: 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 20 65  hemaExtensions e
3970: 78 74 20 3d 20 28 28 49 53 65 72 76 69 63 65 50  xt = ((IServiceP
3980: 72 6f 76 69 64 65 72 29 53 51 4c 69 74 65 46 61  rovider)SQLiteFa
3990: 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65 29 2e  ctory.Instance).
39a0: 47 65 74 53 65 72 76 69 63 65 28 74 79 70 65 6f  GetService(typeo
39b0: 66 28 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45  f(ISQLiteSchemaE
39c0: 78 74 65 6e 73 69 6f 6e 73 29 29 20 61 73 20 49  xtensions)) as I
39d0: 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65  SQLiteSchemaExte
39e0: 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20 20  nsions;....     
39f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
3a00: 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  xt != null)..   
3a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
3a20: 78 74 2e 42 75 69 6c 64 54 65 6d 70 53 63 68 65  xt.BuildTempSche
3a30: 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20 20 20  ma(cnn);....    
3a40: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
3a50: 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26  e (cmd == null &
3a60: 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  & strSql.Length 
3a70: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
3a80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3a90: 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 20 3d             cmd =
3aa0: 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73 74   Prepare(cnn, st
3ab0: 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20  rSql, previous, 
3ac0: 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20 73  timeoutMS, out s
3ad0: 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20  trRemain);..    
3ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
3af0: 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e  rSql = strRemain
3b00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3b10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3b20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
3b30: 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  md;..           
3b40: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
3b50: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
3b60: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 62                _b
3b80: 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 20  uildingSchema = 
3b90: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
3ba0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3bb0: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
3bc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
3bd0: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
3be0: 6e 20 3d 3d 20 36 20 7c 7c 20 6e 20 3d 3d 20 35  n == 6 || n == 5
3bf0: 29 20 2f 2f 20 4c 6f 63 6b 65 64 20 2d 2d 20 64  ) // Locked -- d
3c00: 65 6c 61 79 20 61 20 73 6d 61 6c 6c 20 61 6d 6f  elay a small amo
3c10: 75 6e 74 20 62 65 66 6f 72 65 20 72 65 74 72 79  unt before retry
3c20: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ing..          {
3c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
3c40: 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20   Keep trying..  
3c50: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6e            if (rn
3c60: 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69  d == null) // Fi
3c70: 72 73 74 20 74 69 6d 65 20 77 65 27 76 65 20 65  rst time we've e
3c80: 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c  ncountered the l
3c90: 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ock..           
3ca0: 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e     rnd = new Ran
3cb0: 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dom();....      
3cc0: 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76        // If we'v
3cd0: 65 20 65 78 63 65 65 64 65 64 20 74 68 65 20 63  e exceeded the c
3ce0: 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74  ommand's timeout
3cf0: 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20 74 68  , give up and th
3d00: 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20  row an error..  
3d10: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 75            if ((u
3d20: 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e  int)Environment.
3d30: 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72  TickCount - star
3d40: 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 4d  ttick > timeoutM
3d50: 53 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  S)..            
3d60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3d70: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
3d80: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51  eException(n, SQ
3d90: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29  LiteLastError())
3da0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
3dc0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
3dd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3de0: 20 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c   // Otherwise sl
3df0: 65 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d  eep for a random
3e00: 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20   amount of time 
3e10: 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20  up to 150ms..   
3e20: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
3e30: 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65  m.Threading.Thre
3e40: 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78  ad.Sleep(rnd.Nex
3e50: 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20  t(1, 150));..   
3e60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
3e70: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3e80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
3e90: 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e   (n > 0) throw n
3ea0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
3eb0: 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74  on(n, SQLiteLast
3ec0: 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
3ed0: 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d       strRemain =
3ee0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74   UTF8ToString(pt
3ef0: 72 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20  r, len);....    
3f00: 20 20 20 20 69 66 20 28 73 74 6d 74 20 21 3d 20      if (stmt != 
3f10: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 63 6d 64  IntPtr.Zero) cmd
3f20: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61   = new SQLiteSta
3f30: 74 65 6d 65 6e 74 28 74 68 69 73 2c 20 66 6c 61  tement(this, fla
3f40: 67 73 2c 20 73 74 6d 74 2c 20 73 74 72 53 71 6c  gs, stmt, strSql
3f50: 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20 73 74  .Substring(0, st
3f60: 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 73 74  rSql.Length - st
3f70: 72 52 65 6d 61 69 6e 2e 4c 65 6e 67 74 68 29 2c  rRemain.Length),
3f80: 20 70 72 65 76 69 6f 75 73 29 3b 0d 0a 0d 0a 20   previous);.... 
3f90: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d         return cm
3fa0: 64 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  d;..      }..   
3fb0: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
3fc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 68 61 6e    {..        han
3fd0: 64 6c 65 2e 46 72 65 65 28 29 3b 0d 0a 20 20 20  dle.Free();..   
3fe0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23     }..    }....#
3ff0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
4000: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
4010: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61     protected sta
4020: 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64  tic void LogBind
4030: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
4040: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69  Handle handle, i
4050: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
4060: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
4070: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
4080: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
4090: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
40a0: 4d 65 73 73 61 67 65 28 30 2c 20 53 74 72 69 6e  Message(0, Strin
40b0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
40c0: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
40d0: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
40e0: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 4e  ramter #{1} as N
40f0: 55 4c 4c 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  ULL...",..      
4100: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
4110: 74 72 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20  tr, index));..  
4120: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
4130: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
4140: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
4150: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
4160: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
4170: 2c 20 56 61 6c 75 65 54 79 70 65 20 76 61 6c 75  , ValueType valu
4180: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
4190: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
41a0: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
41b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
41c0: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
41d0: 28 30 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  (0, String.Forma
41e0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
41f0: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
4200: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
4210: 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d  #{1} as type {2}
4220: 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33   with value {{{3
4230: 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  }}}...",..      
4240: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
4250: 74 72 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  tr, index, value
4260: 2e 47 65 74 54 79 70 65 28 29 2c 20 76 61 6c 75  .GetType(), valu
4270: 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  e));..    }.... 
4280: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
4290: 63 20 73 74 72 69 6e 67 20 46 6f 72 6d 61 74 44  c string FormatD
42a0: 61 74 65 54 69 6d 65 28 44 61 74 65 54 69 6d 65  ateTime(DateTime
42b0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
42c0: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75          StringBu
42d0: 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e  ilder result = n
42e0: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
42f0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ();....        r
4300: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c  esult.Append(val
4310: 75 65 2e 54 6f 53 74 72 69 6e 67 28 22 79 79 79  ue.ToString("yyy
4320: 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73  y-MM-ddTHH:mm:ss
4330: 2e 46 46 46 46 46 46 46 4b 22 29 29 3b 0d 0a 20  .FFFFFFFK"));.. 
4340: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
4350: 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20  pend(' ');..    
4360: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
4370: 64 28 76 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d 0a  d(value.Kind);..
4380: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
4390: 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20  ppend(' ');..   
43a0: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
43b0: 6e 64 28 76 61 6c 75 65 2e 54 69 63 6b 73 29 3b  nd(value.Ticks);
43c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
43d0: 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69  rn result.ToStri
43e0: 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ng();..    }....
43f0: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74      protected st
4400: 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e  atic void LogBin
4410: 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  d(SQLiteStatemen
4420: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20  tHandle handle, 
4430: 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54  int index, DateT
4440: 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ime value)..    
4450: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
4460: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
4470: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
4480: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
4490: 67 4d 65 73 73 61 67 65 28 30 2c 20 53 74 72 69  gMessage(0, Stri
44a0: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
44b0: 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67          "Binding
44c0: 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70   statement {0} p
44d0: 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20  aramter #{1} as 
44e0: 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61  type {2} with va
44f0: 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c  lue {{{3}}}...",
4500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61  ..            ha
4510: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65  ndleIntPtr, inde
4520: 78 2c 20 74 79 70 65 6f 66 28 44 61 74 65 54 69  x, typeof(DateTi
4530: 6d 65 29 2c 20 46 6f 72 6d 61 74 44 61 74 65 54  me), FormatDateT
4540: 69 6d 65 28 76 61 6c 75 65 29 29 29 3b 0d 0a 20  ime(value)));.. 
4550: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74     }....    prot
4560: 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69  ected static voi
4570: 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65  d LogBind(SQLite
4580: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
4590: 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65  handle, int inde
45a0: 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29  x, string value)
45b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
45c0: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
45d0: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
45e0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
45f0: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 30  Log.LogMessage(0
4600: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
4610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42  ..            "B
4620: 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  inding statement
4630: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b   {0} paramter #{
4640: 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77  1} as type {2} w
4650: 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d  ith value {{{3}}
4660: 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  }...",..        
4670: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
4680: 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28  , index, typeof(
4690: 53 74 72 69 6e 67 29 2c 20 28 76 61 6c 75 65 20  String), (value 
46a0: 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75 65  != null) ? value
46b0: 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a   : "<null>"));..
46c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
46d0: 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
46e0: 6e 67 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c  ng ToHexadecimal
46f0: 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20  String(..       
4700: 20 62 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a 20   byte[] array.. 
4710: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
4720: 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72 72  .        if (arr
4730: 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ay == null)..   
4740: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4750: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
4760: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72   StringBuilder r
4770: 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69  esult = new Stri
4780: 6e 67 42 75 69 6c 64 65 72 28 61 72 72 61 79 2e  ngBuilder(array.
4790: 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d 0a  Length * 2);....
47a0: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67          int leng
47b0: 74 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74  th = array.Lengt
47c0: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f  h;....        fo
47d0: 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
47e0: 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68  ; index < length
47f0: 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
4800: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
4810: 70 70 65 6e 64 28 61 72 72 61 79 5b 69 6e 64 65  ppend(array[inde
4820: 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78 32 22  x].ToString("x2"
4830: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ));....        r
4840: 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53  eturn result.ToS
4850: 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d  tring();..    }.
4860: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
4870: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67   static void Log
4880: 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65  Bind(SQLiteState
4890: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
48a0: 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79  e, int index, by
48b0: 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20  te[] value)..   
48c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
48d0: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
48e0: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
48f0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
4900: 6f 67 4d 65 73 73 61 67 65 28 30 2c 20 53 74 72  ogMessage(0, Str
4910: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
4920: 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e           "Bindin
4930: 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20  g statement {0} 
4940: 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73  paramter #{1} as
4950: 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76   type {2} with v
4960: 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22  alue {{{3}}}..."
4970: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68  ,..            h
4980: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
4990: 65 78 2c 20 74 79 70 65 6f 66 28 42 79 74 65 5b  ex, typeof(Byte[
49a0: 5d 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75  ]), (value != nu
49b0: 6c 6c 29 20 3f 20 54 6f 48 65 78 61 64 65 63 69  ll) ? ToHexadeci
49c0: 6d 61 6c 53 74 72 69 6e 67 28 76 61 6c 75 65 29  malString(value)
49d0: 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a   : "<null>"));..
49e0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
49f0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
4a00: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
4a10: 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74  _Double(SQLiteSt
4a20: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
4a30: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
4a40: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
4a50: 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c  ndex, double val
4a60: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
4a70: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
4a80: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
4a90: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
4aa0: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
4ab0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
4ac0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
4ad0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
4ae0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
4af0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
4b00: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
4b10: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
4b20: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4b30: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
4b40: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
4b50: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
4b60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  ....        int 
4b70: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
4b80: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
4b90: 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64  bind_double(hand
4ba0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
4bb0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
4bc0: 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66     int n = Unsaf
4bd0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4be0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
4bf0: 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  le_interop(handl
4c00: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
4c10: 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lue);..#endif.. 
4c20: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30         if (n > 0
4c30: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
4c40: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53  teException(n, S
4c50: 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29  QLiteLastError()
4c60: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
4c70: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
4c80: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74  de void Bind_Int
4c90: 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  32(SQLiteStateme
4ca0: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
4cb0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
4cc0: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
4cd0: 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20   int value)..   
4ce0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
4cf0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
4d00: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
4d10: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
4d20: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
4d30: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
4d40: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
4d50: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
4d60: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
4d70: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
4d80: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
4d90: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
4da0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
4db0: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
4dc0: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
4dd0: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
4de0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  ....        int 
4df0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
4e00: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
4e10: 62 69 6e 64 5f 69 6e 74 28 68 61 6e 64 6c 65 2c  bind_int(handle,
4e20: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
4e30: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e  .        if (n >
4e40: 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51   0) throw new SQ
4e50: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
4e60: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
4e70: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
4e80: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
4e90: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55  ride void Bind_U
4ea0: 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74  Int32(SQLiteStat
4eb0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
4ec0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
4ed0: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
4ee0: 65 78 2c 20 75 69 6e 74 20 76 61 6c 75 65 29 0d  ex, uint value).
4ef0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
4f00: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
4f10: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
4f20: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
4f30: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
4f40: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
4f50: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
4f60: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
4f70: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
4f80: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
4f90: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
4fa0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
4fb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4fc0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
4fd0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
4fe0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
4ff0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
5000: 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  int n = UnsafeNa
5010: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
5020: 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 28 68 61  te3_bind_uint(ha
5030: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
5040: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  ue);..        if
5050: 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e   (n > 0) throw n
5060: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
5070: 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74  on(n, SQLiteLast
5080: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
5090: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
50a0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
50b0: 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65  ind_Int64(SQLite
50c0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
50d0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
50e0: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
50f0: 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c   index, long val
5100: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
5110: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
5120: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
5130: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
5140: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
5150: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
5160: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
5170: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
5180: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
5190: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
51a0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
51b0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
51c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
51d0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
51e0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
51f0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
5200: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  ....        int 
5210: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
5220: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5230: 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c  bind_int64(handl
5240: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
5250: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
5260: 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65    int n = Unsafe
5270: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
5280: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
5290: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
52a0: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
52b0: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
52c0: 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20       if (n > 0) 
52d0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
52e0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c  Exception(n, SQL
52f0: 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  iteLastError());
5300: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
5310: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
5320: 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 36   void Bind_UInt6
5330: 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  4(SQLiteStatemen
5340: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
5350: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
5360: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
5370: 75 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20  ulong value)..  
5380: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
5390: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
53a0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
53b0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
53c0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
53d0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
53e0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
53f0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
5400: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
5410: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
5420: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
5430: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
5440: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5450: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
5460: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
5470: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5480: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73       int n = Uns
5490: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
54a0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69  .sqlite3_bind_ui
54b0: 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64  nt64(handle, ind
54c0: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ex, value);..#el
54d0: 73 65 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  se..        int 
54e0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
54f0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5500: 62 69 6e 64 5f 75 69 6e 74 36 34 5f 69 6e 74 65  bind_uint64_inte
5510: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
5520: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
5530: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
5540: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
5550: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
5560: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
5570: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
5580: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
5590: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
55a0: 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c 69 74   Bind_Text(SQLit
55b0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
55c0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
55d0: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
55e0: 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20  t index, string 
55f0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
5600: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
5610: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
5620: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
5630: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
5640: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
5650: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
5660: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
5670: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5680: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
5690: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
56a0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
56b0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
56c0: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
56d0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
56e0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
56f0: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
5700: 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20         byte[] b 
5710: 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b  = ToUTF8(value);
5720: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
5730: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
5740: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
5750: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
5760: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
5770: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
5780: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5790: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
57a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
57b0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
57c0: 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20  , index, b);..  
57d0: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
57e0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  ...        int n
57f0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
5800: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
5810: 69 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c  ind_text(handle,
5820: 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e   index, b, b.Len
5830: 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72  gth - 1, (IntPtr
5840: 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20  )(-1));..       
5850: 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f   if (n > 0) thro
5860: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
5870: 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c  ption(n, SQLiteL
5880: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
5890: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
58a0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
58b0: 64 20 42 69 6e 64 5f 44 61 74 65 54 69 6d 65 28  d Bind_DateTime(
58c0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
58d0: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
58e0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
58f0: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 44 61  s, int index, Da
5900: 74 65 54 69 6d 65 20 64 74 29 0d 0a 20 20 20 20  teTime dt)..    
5910: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
5920: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
5930: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
5940: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
5950: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
5960: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
5970: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
5980: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
5990: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
59a0: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
59b0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
59c0: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
59d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
59e0: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
59f0: 64 65 78 2c 20 64 74 29 3b 0d 0a 20 20 20 20 20  dex, dt);..     
5a00: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
5a10: 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28          switch (
5a20: 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 29  _datetimeFormat)
5a30: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5a40: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
5a50: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
5a60: 54 69 63 6b 73 3a 0d 0a 20 20 20 20 20 20 20 20  Ticks:..        
5a70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
5a90: 6f 6e 67 20 76 61 6c 75 65 20 3d 20 64 74 2e 54  ong value = dt.T
5aa0: 69 63 6b 73 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  icks;....#if !PL
5ab0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
5ac0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
5ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
5ae0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
5af0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5b00: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
5b10: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
5b20: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
5b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5b50: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
5b60: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
5b70: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
5b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5b90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5ba0: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20          int n = 
5bb0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
5bc0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
5bd0: 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69  _int64(handle, i
5be0: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
5bf0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
5c00: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20            int n 
5c10: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
5c20: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
5c30: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
5c40: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
5c50: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  ref value);..#en
5c60: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
5c70: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e           if (n >
5c80: 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51   0) throw new SQ
5c90: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
5ca0: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
5cb0: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
5cc0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
5cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5ce0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
5cf0: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
5d00: 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61  Formats.JulianDa
5d10: 79 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y:..            
5d20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5d30: 20 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c             doubl
5d40: 65 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69  e value = ToJuli
5d50: 61 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 23 69  anDay(dt);....#i
5d60: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
5d70: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
5d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d90: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
5da0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5db0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
5dc0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5dd0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
5de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5df0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e10: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
5e20: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
5e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
5e60: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
5e70: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
5e80: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e  _bind_double(han
5e90: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
5ea0: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
5eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ec0: 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  int n = UnsafeNa
5ed0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
5ee0: 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f  te3_bind_double_
5ef0: 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20  interop(handle, 
5f00: 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65  index, ref value
5f10: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
5f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f30: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
5f40: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
5f50: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
5f60: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
5f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f80: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
5f90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5fa0: 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
5fb0: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55  iteDateFormats.U
5fc0: 6e 69 78 45 70 6f 63 68 3a 0d 0a 20 20 20 20 20  nixEpoch:..     
5fd0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ff0: 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20 43    long value = C
6000: 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 36 34 28 64  onvert.ToInt64(d
6010: 74 2e 53 75 62 74 72 61 63 74 28 55 6e 69 78 45  t.Subtract(UnixE
6020: 70 6f 63 68 29 2e 54 6f 74 61 6c 53 65 63 6f 6e  poch).TotalSecon
6030: 64 73 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  ds);....#if !PLA
6040: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
6050: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
6060: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6070: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
6080: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
6090: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
60a0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
60b0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
60c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
60d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
60e0: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
60f0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
6100: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
6110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6120: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6130: 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55         int n = U
6140: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6150: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
6160: 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e  int64(handle, in
6170: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  dex, value);..#e
6180: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
6190: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d           int n =
61a0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
61b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
61c0: 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  d_int64_interop(
61d0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
61e0: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ef value);..#end
61f0: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
6200: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20          if (n > 
6210: 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  0) throw new SQL
6220: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
6230: 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28  SQLiteLastError(
6240: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
6250: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
6260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6270: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6280: 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20  default:..      
6290: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
62a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62b0: 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54   byte[] b = ToUT
62c0: 46 38 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21  F8(dt);....#if !
62d0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
62e0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
62f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6300: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
6310: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6320: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
6330: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6340: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
6350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6360: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6370: 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67               Log
6380: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
6390: 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20  ex, b);..       
63a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
63b0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
63c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
63d0: 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  t n = UnsafeNati
63e0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
63f0: 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61 6e 64  3_bind_text(hand
6400: 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e  le, index, b, b.
6410: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74  Length - 1, (Int
6420: 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20  Ptr)(-1));..    
6430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6440: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
6450: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
6460: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
6470: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
6480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6490: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
64a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
64b0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
64c0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
64d0: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
64e0: 42 6c 6f 62 28 53 51 4c 69 74 65 53 74 61 74 65  Blob(SQLiteState
64f0: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
6500: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6510: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
6520: 78 2c 20 62 79 74 65 5b 5d 20 62 6c 6f 62 44 61  x, byte[] blobDa
6530: 74 61 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ta)..    {..    
6540: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
6550: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
6560: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
6570: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
6580: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
6590: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
65a0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
65b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
65c0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
65d0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
65e0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
65f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6600: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
6610: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c  andle, index, bl
6620: 6f 62 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20  obData);..      
6630: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
6640: 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55         int n = U
6650: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6660: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
6670: 62 6c 6f 62 28 68 61 6e 64 6c 65 2c 20 69 6e 64  blob(handle, ind
6680: 65 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20 62 6c  ex, blobData, bl
6690: 6f 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c 20 28  obData.Length, (
66a0: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
66b0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30         if (n > 0
66c0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
66d0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53  teException(n, S
66e0: 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29  QLiteLastError()
66f0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
6700: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
6710: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c  de void Bind_Nul
6720: 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  l(SQLiteStatemen
6730: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
6740: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
6750: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  ags, int index).
6760: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
6770: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
6780: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
6790: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
67a0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
67b0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
67c0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
67d0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
67e0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
67f0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
6800: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6810: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
6820: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6830: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
6840: 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  e, index);..    
6850: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
6860: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d  .        int n =
6870: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6880: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
6890: 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65 2c 20 69  d_null(handle, i
68a0: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
68b0: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
68c0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
68d0: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
68e0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
68f0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
6900: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
6910: 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74 28  Bind_ParamCount(
6920: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
6930: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
6940: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
6950: 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
6960: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
6970: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
6980: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
6990: 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e  tmt;..        in
69a0: 74 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65  t value = Unsafe
69b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
69c0: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
69d0: 65 74 65 72 5f 63 6f 75 6e 74 28 68 61 6e 64 6c  eter_count(handl
69e0: 65 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  e);....#if !PLAT
69f0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
6a00: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
6a10: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
6a20: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6a30: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
6a40: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6a50: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
6a60: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6a70: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
6a80: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
6a90: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
6aa0: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
6ab0: 65 73 73 61 67 65 28 30 2c 20 53 74 72 69 6e 67  essage(0, String
6ac0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
6ad0: 20 20 20 20 20 20 20 20 20 20 22 53 74 61 74 65            "State
6ae0: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
6af0: 72 20 63 6f 75 6e 74 20 69 73 20 7b 31 7d 2e 22  r count is {1}."
6b00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
6b10: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
6b20: 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 20   value));..     
6b30: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
6b40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76          return v
6b50: 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alue;..    }....
6b60: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
6b70: 72 72 69 64 65 20 73 74 72 69 6e 67 20 42 69 6e  rride string Bin
6b80: 64 5f 50 61 72 61 6d 4e 61 6d 65 28 53 51 4c 69  d_ParamName(SQLi
6b90: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
6ba0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
6bb0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
6bc0: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
6bd0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
6be0: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
6bf0: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
6c00: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20  qlite_stmt;..   
6c10: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
6c20: 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
6c30: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
6c40: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
6c50: 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46 38       name = UTF8
6c60: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
6c70: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6c80: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
6c90: 74 65 72 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  ter_name_interop
6ca0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
6cb0: 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  out len), len);.
6cc0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
6cd0: 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72  name = UTF8ToStr
6ce0: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
6cf0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6d00: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
6d10: 61 6d 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ame(handle, inde
6d20: 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  x), -1);..#endif
6d30: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
6d40: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
6d50: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
6d60: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
6d70: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
6d80: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
6d90: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6da0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
6db0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6dc0: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
6dd0: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
6de0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
6df0: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
6e00: 61 67 65 28 30 2c 20 53 74 72 69 6e 67 2e 46 6f  age(0, String.Fo
6e10: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
6e20: 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e         "Statemen
6e30: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
6e40: 7b 31 7d 20 6e 61 6d 65 20 69 73 20 7b 7b 7b 32  {1} name is {{{2
6e50: 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  }}}.",..        
6e60: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
6e70: 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 6e 61 6d  tPtr, index, nam
6e80: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e));..        }.
6e90: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
6ea0: 20 20 20 72 65 74 75 72 6e 20 6e 61 6d 65 3b 0d     return name;.
6eb0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
6ec0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
6ed0: 69 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 49 6e  int Bind_ParamIn
6ee0: 64 65 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d  dex(SQLiteStatem
6ef0: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
6f00: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
6f10: 66 6c 61 67 73 2c 20 73 74 72 69 6e 67 20 70 61  flags, string pa
6f20: 72 61 6d 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d  ramName)..    {.
6f30: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
6f40: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
6f50: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
6f60: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20  lite_stmt;..    
6f70: 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20      int index = 
6f80: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6f90: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
6fa0: 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
6fb0: 28 68 61 6e 64 6c 65 2c 20 54 6f 55 54 46 38 28  (handle, ToUTF8(
6fc0: 70 61 72 61 6d 4e 61 6d 65 29 29 3b 0d 0a 0d 0a  paramName));....
6fd0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
6fe0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
6ff0: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
7000: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
7010: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
7020: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
7030: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
7040: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
7050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
7060: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
7070: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
7080: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
7090: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
70a0: 30 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  0, String.Format
70b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
70c0: 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30     "Statement {0
70d0: 7d 20 70 61 72 61 6d 74 65 72 20 69 6e 64 65 78  } paramter index
70e0: 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d 7d   of name {{{1}}}
70f0: 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20 20   is #{2}.",..   
7100: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e               han
7110: 64 6c 65 49 6e 74 50 74 72 2c 20 70 61 72 61 6d  dleIntPtr, param
7120: 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  Name, index));..
7130: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
7140: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  f....        ret
7150: 75 72 6e 20 69 6e 64 65 78 3b 0d 0a 20 20 20 20  urn index;..    
7160: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
7170: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
7180: 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51 4c 69 74  olumnCount(SQLit
7190: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29  eStatement stmt)
71a0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
71b0: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
71c0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
71d0: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73  3_column_count(s
71e0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
71f0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
7200: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
7210: 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
7220: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
7230: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
7240: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
7250: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
7260: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
7270: 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n;..      return
7280: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
7290: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
72a0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
72b0: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74  _name_interop(st
72c0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
72d0: 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29   index, out len)
72e0: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
72f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
7300: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
7310: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
7320: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
7330: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
7340: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  tmt, index), -1)
7350: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
7360: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
7370: 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41 66   override TypeAf
7380: 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66 66  finity ColumnAff
7390: 69 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61 74  inity(SQLiteStat
73a0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
73b0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
73c0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
73d0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
73e0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
73f0: 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ype(stmt._sqlite
7400: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
7410: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
7420: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
7430: 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70 65  tring ColumnType
7440: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
7450: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
7460: 2c 20 6f 75 74 20 54 79 70 65 41 66 66 69 6e 69  , out TypeAffini
7470: 74 79 20 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20  ty nAffinity).. 
7480: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
7490: 6c 65 6e 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54  len;..#if !SQLIT
74a0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
74b0: 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73    IntPtr p = Uns
74c0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
74d0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
74e0: 64 65 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f 70  decltype_interop
74f0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
7500: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c  mt, index, out l
7510: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
7520: 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20     len = -1;..  
7530: 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55      IntPtr p = U
7540: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
7550: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
7560: 6e 5f 64 65 63 6c 74 79 70 65 28 73 74 6d 74 2e  n_decltype(stmt.
7570: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
7580: 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  dex);..#endif.. 
7590: 20 20 20 20 20 6e 41 66 66 69 6e 69 74 79 20 3d       nAffinity =
75a0: 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28   ColumnAffinity(
75b0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d  stmt, index);...
75c0: 0a 20 20 20 20 20 20 69 66 20 28 70 20 21 3d 20  .      if (p != 
75d0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74  IntPtr.Zero) ret
75e0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
75f0: 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20  (p, len);..     
7600: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a   else..      {..
7610: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
7620: 20 61 72 20 3d 20 73 74 6d 74 2e 54 79 70 65 44   ar = stmt.TypeD
7630: 65 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a 20 20 20  efinitions;..   
7640: 20 20 20 20 20 69 66 20 28 61 72 20 21 3d 20 6e       if (ar != n
7650: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ull)..        {.
7660: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69  .          if (i
7670: 6e 64 65 78 20 3c 20 61 72 2e 4c 65 6e 67 74 68  ndex < ar.Length
7680: 20 26 26 20 61 72 5b 69 6e 64 65 78 5d 20 21 3d   && ar[index] !=
7690: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
76a0: 20 20 20 20 72 65 74 75 72 6e 20 61 72 5b 69 6e      return ar[in
76b0: 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d  dex];..        }
76c0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
76d0: 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a   String.Empty;..
76e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 73 77 69 74  ..        //swit
76f0: 63 68 20 28 6e 41 66 66 69 6e 69 74 79 29 0d 0a  ch (nAffinity)..
7700: 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20          //{..   
7710: 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79       //  case Ty
7720: 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
7730: 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  :..        //   
7740: 20 72 65 74 75 72 6e 20 22 42 49 47 49 4e 54 22   return "BIGINT"
7750: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63  ;..        //  c
7760: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
7770: 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20  .Double:..      
7780: 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22    //    return "
7790: 44 4f 55 42 4c 45 22 3b 0d 0a 20 20 20 20 20 20  DOUBLE";..      
77a0: 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41    //  case TypeA
77b0: 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20  ffinity.Blob:.. 
77c0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74         //    ret
77d0: 75 72 6e 20 22 42 4c 4f 42 22 3b 0d 0a 20 20 20  urn "BLOB";..   
77e0: 20 20 20 20 20 2f 2f 20 20 64 65 66 61 75 6c 74       //  default
77f0: 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  :..        //   
7800: 20 72 65 74 75 72 6e 20 22 54 45 58 54 22 3b 0d   return "TEXT";.
7810: 0a 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 20 20  .        //}..  
7820: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
7830: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
7840: 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e  rride int Column
7850: 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61 74  Index(SQLiteStat
7860: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72 69  ement stmt, stri
7870: 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 0d 0a  ng columnName)..
7880: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
7890: 20 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74   x = ColumnCount
78a0: 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (stmt);....     
78b0: 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b   for (int n = 0;
78c0: 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d 0a 20 20   n < x; n++)..  
78d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
78e0: 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  f (String.Compar
78f0: 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 43 6f  e(columnName, Co
7900: 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d 74 2c 20 6e  lumnName(stmt, n
7910: 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  ), StringCompari
7920: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
7930: 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20  eCase) == 0)..  
7940: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
7950: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
7960: 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20    return -1;..  
7970: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
7980: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
7990: 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e  ing ColumnOrigin
79a0: 61 6c 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61  alName(SQLiteSta
79b0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
79c0: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
79d0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
79e0: 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
79f0: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  len;..      retu
7a00: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
7a10: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7a20: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
7a30: 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69  mn_origin_name_i
7a40: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
7a50: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
7a60: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
7a70: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
7a80: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
7a90: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
7aa0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
7ab0: 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
7ac0: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
7ad0: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  tmt, index), -1)
7ae0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
7af0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
7b00: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
7b10: 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e   ColumnDatabaseN
7b20: 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
7b30: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
7b40: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
7b50: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
7b60: 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
7b70: 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
7b80: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
7b90: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7ba0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
7bb0: 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69 6e  database_name_in
7bc0: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
7bd0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
7be0: 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  out len), len);.
7bf0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
7c00: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
7c10: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
7c20: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
7c30: 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
7c40: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
7c50: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
7c60: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
7c70: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
7c80: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
7c90: 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d  g ColumnTableNam
7ca0: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
7cb0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
7cc0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
7cd0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
7ce0: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
7cf0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
7d00: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
7d10: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7d20: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61  qlite3_column_ta
7d30: 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  ble_name_interop
7d40: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
7d50: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c  mt, index, out l
7d60: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
7d70: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
7d80: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
7d90: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7da0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
7db0: 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74 2e  table_name(stmt.
7dc0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
7dd0: 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
7de0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
7df0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
7e00: 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d 65  de void ColumnMe
7e10: 74 61 44 61 74 61 28 73 74 72 69 6e 67 20 64 61  taData(string da
7e20: 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20 74  taBase, string t
7e30: 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f 6c  able, string col
7e40: 75 6d 6e 2c 20 6f 75 74 20 73 74 72 69 6e 67 20  umn, out string 
7e50: 64 61 74 61 54 79 70 65 2c 20 6f 75 74 20 73 74  dataType, out st
7e60: 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71 75  ring collateSequ
7e70: 65 6e 63 65 2c 20 6f 75 74 20 62 6f 6f 6c 20 6e  ence, out bool n
7e80: 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 62 6f 6f 6c  otNull, out bool
7e90: 20 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74   primaryKey, out
7ea0: 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65 6d   bool autoIncrem
7eb0: 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ent)..    {..   
7ec0: 20 20 20 49 6e 74 50 74 72 20 64 61 74 61 54 79     IntPtr dataTy
7ed0: 70 65 50 74 72 3b 0d 0a 20 20 20 20 20 20 49 6e  pePtr;..      In
7ee0: 74 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72 3b  tPtr collSeqPtr;
7ef0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6e 6f 74  ..      int nnot
7f00: 4e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e 74  Null;..      int
7f10: 20 6e 70 72 69 6d 61 72 79 4b 65 79 3b 0d 0a 20   nprimaryKey;.. 
7f20: 20 20 20 20 20 69 6e 74 20 6e 61 75 74 6f 49 6e       int nautoIn
7f30: 63 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 3b  c;..      int n;
7f40: 0d 0a 20 20 20 20 20 20 69 6e 74 20 64 74 4c 65  ..      int dtLe
7f50: 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 73  n;..      int cs
7f60: 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  Len;....#if !SQL
7f70: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
7f80: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
7f90: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
7fa0: 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
7fb0: 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74 65 72 6f  _metadata_intero
7fc0: 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64  p(_sql, ToUTF8(d
7fd0: 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38  ataBase), ToUTF8
7fe0: 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28  (table), ToUTF8(
7ff0: 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 64 61 74  column), out dat
8000: 61 54 79 70 65 50 74 72 2c 20 6f 75 74 20 63 6f  aTypePtr, out co
8010: 6c 6c 53 65 71 50 74 72 2c 20 6f 75 74 20 6e 6e  llSeqPtr, out nn
8020: 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e 70 72 69  otNull, out npri
8030: 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20 6e 61 75  maryKey, out nau
8040: 74 6f 49 6e 63 2c 20 6f 75 74 20 64 74 4c 65 6e  toInc, out dtLen
8050: 2c 20 6f 75 74 20 63 73 4c 65 6e 29 3b 0d 0a 23  , out csLen);..#
8060: 65 6c 73 65 0d 0a 20 20 20 20 20 20 64 74 4c 65  else..      dtLe
8070: 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 63  n = -1;..      c
8080: 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20  sLen = -1;....  
8090: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
80a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
80b0: 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
80c0: 5f 6d 65 74 61 64 61 74 61 28 5f 73 71 6c 2c 20  _metadata(_sql, 
80d0: 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65 29  ToUTF8(dataBase)
80e0: 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c  , ToUTF8(table),
80f0: 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c   ToUTF8(column),
8100: 20 6f 75 74 20 64 61 74 61 54 79 70 65 50 74 72   out dataTypePtr
8110: 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71 50 74 72  , out collSeqPtr
8120: 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20  , out nnotNull, 
8130: 6f 75 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c  out nprimaryKey,
8140: 20 6f 75 74 20 6e 61 75 74 6f 49 6e 63 29 3b 0d   out nautoInc);.
8150: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69  .#endif..      i
8160: 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20  f (n > 0) throw 
8170: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
8180: 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73  ion(n, SQLiteLas
8190: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20  tError());....  
81a0: 20 20 20 20 64 61 74 61 54 79 70 65 20 3d 20 55      dataType = U
81b0: 54 46 38 54 6f 53 74 72 69 6e 67 28 64 61 74 61  TF8ToString(data
81c0: 54 79 70 65 50 74 72 2c 20 64 74 4c 65 6e 29 3b  TypePtr, dtLen);
81d0: 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 65 53  ..      collateS
81e0: 65 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54 6f  equence = UTF8To
81f0: 53 74 72 69 6e 67 28 63 6f 6c 6c 53 65 71 50 74  String(collSeqPt
8200: 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20  r, csLen);....  
8210: 20 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e      notNull = (n
8220: 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a  notNull == 1);..
8230: 20 20 20 20 20 20 70 72 69 6d 61 72 79 4b 65 79        primaryKey
8240: 20 3d 20 28 6e 70 72 69 6d 61 72 79 4b 65 79 20   = (nprimaryKey 
8250: 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 61 75  == 1);..      au
8260: 74 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 28 6e  toIncrement = (n
8270: 61 75 74 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a  autoInc == 1);..
8280: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
8290: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64  ernal override d
82a0: 6f 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28  ouble GetDouble(
82b0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
82c0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
82d0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 64  ..    {..      d
82e0: 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69  ouble value;..#i
82f0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
8300: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
8310: 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61      value = Unsa
8320: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8330: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
8340: 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c 69  ouble(stmt._sqli
8350: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
8360: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 55  ..#else..      U
8370: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
8380: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
8390: 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  n_double_interop
83a0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
83b0: 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 76  mt, index, out v
83c0: 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  alue);..#endif..
83d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
83e0: 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ue;..    }....  
83f0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
8400: 69 64 65 20 69 6e 74 20 47 65 74 49 6e 74 33 32  ide int GetInt32
8410: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
8420: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
8430: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8440: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
8450: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8460: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74  e3_column_int(st
8470: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
8480: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d   index);..    }.
8490: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
84a0: 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
84b0: 74 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61  tInt64(SQLiteSta
84c0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
84d0: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
84e0: 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65        long value
84f0: 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ;..#if !PLATFORM
8500: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
8510: 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d  K..      value =
8520: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
8530: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
8540: 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e 5f  umn_int64(stmt._
8550: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
8560: 65 78 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ex);..#else..   
8570: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
8580: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
8590: 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74 65  olumn_int64_inte
85a0: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
85b0: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75  _stmt, index, ou
85c0: 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69  t value);..#endi
85d0: 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  f..      return 
85e0: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  value;..    }...
85f0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
8600: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65  erride string Ge
8610: 74 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74  tText(SQLiteStat
8620: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
8630: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
8640: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
8650: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
8660: 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  en;..      retur
8670: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
8680: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
8690: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
86a0: 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73  n_text_interop(s
86b0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
86c0: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e  , index, out len
86d0: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
86e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
86f0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
8700: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
8710: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
8720: 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  xt(stmt._sqlite_
8730: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
8740: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
8750: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
8760: 6c 20 6f 76 65 72 72 69 64 65 20 44 61 74 65 54  l override DateT
8770: 69 6d 65 20 47 65 74 44 61 74 65 54 69 6d 65 28  ime GetDateTime(
8780: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
8790: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
87a0: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
87b0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
87c0: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20       int len;.. 
87d0: 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61       return ToDa
87e0: 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74  teTime(UnsafeNat
87f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8800: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69  e3_column_text_i
8810: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
8820: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
8830: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
8840: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
8850: 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65  eturn ToDateTime
8860: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
8870: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
8880: 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73  umn_text(stmt._s
8890: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
88a0: 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  x), -1);..#endif
88b0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
88c0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
88d0: 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73 28 53   long GetBytes(S
88e0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
88f0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
8900: 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c  int nDataOffset,
8910: 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69   byte[] bDest, i
8920: 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e  nt nStart, int n
8930: 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a  Length)..    {..
8940: 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d        int nlen =
8950: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
8960: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
8970: 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f  umn_bytes(stmt._
8980: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
8990: 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  ex);....      //
89a0: 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74 69   If no destinati
89b0: 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75 72  on buffer, retur
89c0: 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64 65  n the size neede
89d0: 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44  d...      if (bD
89e0: 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74  est == null) ret
89f0: 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20  urn nlen;....   
8a00: 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d     int nCopied =
8a10: 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20   nLength;....   
8a20: 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
8a30: 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e   nStart > bDest.
8a40: 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20  Length) nCopied 
8a50: 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d  = bDest.Length -
8a60: 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20   nStart;..      
8a70: 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44  if (nCopied + nD
8a80: 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e  ataOffset > nlen
8a90: 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e  ) nCopied = nlen
8aa0: 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d   - nDataOffset;.
8ab0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
8ac0: 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20  pied > 0)..     
8ad0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
8ae0: 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e  tr ptr = UnsafeN
8af0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8b00: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  ite3_column_blob
8b10: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
8b20: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20  mt, index);.... 
8b30: 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43         Marshal.C
8b40: 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70 74 72  opy((IntPtr)(ptr
8b50: 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61  .ToInt64() + nDa
8b60: 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74  taOffset), bDest
8b70: 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65  , nStart, nCopie
8b80: 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  d);..      }..  
8b90: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
8ba0: 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69  {..        nCopi
8bb0: 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d  ed = 0;..      }
8bc0: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
8bd0: 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d   nCopied;..    }
8be0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
8bf0: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
8c00: 65 74 43 68 61 72 73 28 53 51 4c 69 74 65 53 74  etChars(SQLiteSt
8c10: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
8c20: 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61  t index, int nDa
8c30: 74 61 4f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d  taOffset, char[]
8c40: 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61   bDest, int nSta
8c50: 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29  rt, int nLength)
8c60: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
8c70: 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  nt nlen;..      
8c80: 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c  int nCopied = nL
8c90: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
8ca0: 73 74 72 69 6e 67 20 73 74 72 20 3d 20 47 65 74  string str = Get
8cb0: 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
8cc0: 29 3b 0d 0a 20 20 20 20 20 20 6e 6c 65 6e 20 3d  );..      nlen =
8cd0: 20 73 74 72 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a   str.Length;....
8ce0: 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20        if (bDest 
8cf0: 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
8d00: 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  nlen;....      i
8d10: 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74  f (nCopied + nSt
8d20: 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67  art > bDest.Leng
8d30: 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44  th) nCopied = bD
8d40: 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74  est.Length - nSt
8d50: 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  art;..      if (
8d60: 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f  nCopied + nDataO
8d70: 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43  ffset > nlen) nC
8d80: 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e  opied = nlen - n
8d90: 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20  DataOffset;.... 
8da0: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
8db0: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 73   > 0)..        s
8dc0: 74 72 2e 43 6f 70 79 54 6f 28 6e 44 61 74 61 4f  tr.CopyTo(nDataO
8dd0: 66 66 73 65 74 2c 20 62 44 65 73 74 2c 20 6e 53  ffset, bDest, nS
8de0: 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d  tart, nCopied);.
8df0: 0a 20 20 20 20 20 20 65 6c 73 65 20 6e 43 6f 70  .      else nCop
8e00: 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  ied = 0;....    
8e10: 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64    return nCopied
8e20: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
8e30: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
8e40: 65 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53 51  e bool IsNull(SQ
8e50: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
8e60: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
8e70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
8e80: 75 72 6e 20 28 43 6f 6c 75 6d 6e 41 66 66 69 6e  urn (ColumnAffin
8e90: 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ity(stmt, index)
8ea0: 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79   == TypeAffinity
8eb0: 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Null);..    }..
8ec0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
8ed0: 76 65 72 72 69 64 65 20 69 6e 74 20 41 67 67 72  verride int Aggr
8ee0: 65 67 61 74 65 43 6f 75 6e 74 28 49 6e 74 50 74  egateCount(IntPt
8ef0: 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20  r context)..    
8f00: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
8f10: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8f20: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72  ods.sqlite3_aggr
8f30: 65 67 61 74 65 5f 63 6f 75 6e 74 28 63 6f 6e 74  egate_count(cont
8f40: 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ext);..    }....
8f50: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
8f60: 72 72 69 64 65 20 76 6f 69 64 20 43 72 65 61 74  rride void Creat
8f70: 65 46 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67  eFunction(string
8f80: 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e   strFunction, in
8f90: 74 20 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65  t nArgs, bool ne
8fa0: 65 64 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74  edCollSeq, SQLit
8fb0: 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20  eCallback func, 
8fc0: 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66  SQLiteCallback f
8fd0: 75 6e 63 73 74 65 70 2c 20 53 51 4c 69 74 65 46  uncstep, SQLiteF
8fe0: 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e  inalCallback fun
8ff0: 63 66 69 6e 61 6c 29 0d 0a 20 20 20 20 7b 0d 0a  cfinal)..    {..
9000: 20 20 20 20 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a        int n;....
9010: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
9020: 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20  DARD..      n = 
9030: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9040: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
9050: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65  te_function_inte
9060: 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  rop(_sql, ToUTF8
9070: 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e  (strFunction), n
9080: 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e  Args, 4, IntPtr.
9090: 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63  Zero, func, func
90a0: 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c  step, funcfinal,
90b0: 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d   (needCollSeq ==
90c0: 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b   true) ? 1 : 0);
90d0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
90e0: 20 30 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61   0) n = UnsafeNa
90f0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9100: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
9110: 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  ion_interop(_sql
9120: 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63  , ToUTF8(strFunc
9130: 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c  tion), nArgs, 1,
9140: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
9150: 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75  nc, funcstep, fu
9160: 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f  ncfinal, (needCo
9170: 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f  llSeq == true) ?
9180: 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c 73 65 0d   1 : 0);..#else.
9190: 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
91a0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
91b0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
91c0: 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55  nction(_sql, ToU
91d0: 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29  TF8(strFunction)
91e0: 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50  , nArgs, 4, IntP
91f0: 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66  tr.Zero, func, f
9200: 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
9210: 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  al);..      if (
9220: 6e 20 3d 3d 20 30 29 20 6e 20 3d 20 55 6e 73 61  n == 0) n = Unsa
9230: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9240: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
9250: 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f  unction(_sql, To
9260: 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e  UTF8(strFunction
9270: 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74  ), nArgs, 1, Int
9280: 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20  Ptr.Zero, func, 
9290: 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69  funcstep, funcfi
92a0: 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  nal);..#endif.. 
92b0: 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20       if (n > 0) 
92c0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
92d0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c  Exception(n, SQL
92e0: 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  iteLastError());
92f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
9300: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
9310: 20 76 6f 69 64 20 43 72 65 61 74 65 43 6f 6c 6c   void CreateColl
9320: 61 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72  ation(string str
9330: 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c 69 74  Collation, SQLit
9340: 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 2c  eCollation func,
9350: 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e   SQLiteCollation
9360: 20 66 75 6e 63 31 36 29 0d 0a 20 20 20 20 7b 0d   func16)..    {.
9370: 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55  .      int n = U
9380: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9390: 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
93a0: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c  e_collation(_sql
93b0: 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c  , ToUTF8(strColl
93c0: 61 74 69 6f 6e 29 2c 20 32 2c 20 49 6e 74 50 74  ation), 2, IntPt
93d0: 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 31 36 29 3b  r.Zero, func16);
93e0: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
93f0: 20 30 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61   0) n = UnsafeNa
9400: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9410: 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
9420: 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46  tion(_sql, ToUTF
9430: 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c  8(strCollation),
9440: 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   1, IntPtr.Zero,
9450: 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 20 20 69   func);..      i
9460: 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20  f (n > 0) throw 
9470: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
9480: 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73  ion(n, SQLiteLas
9490: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
94a0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
94b0: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
94c0: 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d  ontextCollateCom
94d0: 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e  pare(CollationEn
94e0: 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20  codingEnum enc, 
94f0: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
9500: 73 74 72 69 6e 67 20 73 31 2c 20 73 74 72 69 6e  string s1, strin
9510: 67 20 73 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  g s2)..    {..#i
9520: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
9530: 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  RD..      byte[]
9540: 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65   b1;..      byte
9550: 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79  [] b2;..      Sy
9560: 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
9570: 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e  ng converter = n
9580: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77  ull;....      sw
9590: 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20  itch (enc)..    
95a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73    {..        cas
95b0: 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
95c0: 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20  ingEnum.UTF8:.. 
95d0: 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
95e0: 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
95f0: 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d  .Encoding.UTF8;.
9600: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
9610: 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
9620: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
9630: 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a  gEnum.UTF16LE:..
9640: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
9650: 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
9660: 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f  t.Encoding.Unico
9670: 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  de;..          b
9680: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
9690: 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
96a0: 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42  odingEnum.UTF16B
96b0: 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
96c0: 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
96d0: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42  .Text.Encoding.B
96e0: 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b  igEndianUnicode;
96f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
9700: 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  k;..      }.... 
9710: 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72       b1 = conver
9720: 74 65 72 2e 47 65 74 42 79 74 65 73 28 73 31 29  ter.GetBytes(s1)
9730: 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f  ;..      b2 = co
9740: 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
9750: 28 73 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  (s2);....      r
9760: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
9770: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
9780: 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f  3_context_collco
9790: 6d 70 61 72 65 28 63 6f 6e 74 65 78 74 2c 20 62  mpare(context, b
97a0: 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32  1, b1.Length, b2
97b0: 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23  , b2.Length);..#
97c0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
97d0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
97e0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
97f0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
9800: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
9810: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e  override int Con
9820: 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61  textCollateCompa
9830: 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  re(CollationEnco
9840: 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e  dingEnum enc, In
9850: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 63 68  tPtr context, ch
9860: 61 72 5b 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20  ar[] c1, char[] 
9870: 63 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  c2)..    {..#if 
9880: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
9890: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
98a0: 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  1;..      byte[]
98b0: 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74   b2;..      Syst
98c0: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
98d0: 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c   converter = nul
98e0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74  l;....      swit
98f0: 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20  ch (enc)..      
9900: 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  {..        case 
9910: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
9920: 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20  gEnum.UTF8:..   
9930: 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72         converter
9940: 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45   = System.Text.E
9950: 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20  ncoding.UTF8;.. 
9960: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
9970: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
9980: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
9990: 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20  num.UTF16LE:..  
99a0: 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
99b0: 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
99c0: 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65  Encoding.Unicode
99d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
99e0: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
99f0: 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
9a00: 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a  ingEnum.UTF16BE:
9a10: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
9a20: 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
9a30: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67  ext.Encoding.Big
9a40: 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a  EndianUnicode;..
9a50: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
9a60: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
9a70: 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65     b1 = converte
9a80: 72 2e 47 65 74 42 79 74 65 73 28 63 31 29 3b 0d  r.GetBytes(c1);.
9a90: 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76  .      b2 = conv
9aa0: 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 63  erter.GetBytes(c
9ab0: 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  2);....      ret
9ac0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
9ad0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9ae0: 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70  context_collcomp
9af0: 61 72 65 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c  are(context, b1,
9b00: 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20   b1.Length, b2, 
9b10: 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c  b2.Length);..#el
9b20: 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
9b30: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
9b40: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
9b50: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
9b60: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
9b70: 65 72 72 69 64 65 20 43 6f 6c 6c 61 74 69 6f 6e  erride Collation
9b80: 53 65 71 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c  Sequence GetColl
9b90: 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 53 51  ationSequence(SQ
9ba0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e  LiteFunction fun
9bb0: 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  c, IntPtr contex
9bc0: 74 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  t)..    {..#if !
9bd0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
9be0: 0a 20 20 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e  .      Collation
9bf0: 53 65 71 75 65 6e 63 65 20 73 65 71 20 3d 20 6e  Sequence seq = n
9c00: 65 77 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  ew CollationSequ
9c10: 65 6e 63 65 28 29 3b 0d 0a 20 20 20 20 20 20 69  ence();..      i
9c20: 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69  nt len;..      i
9c30: 6e 74 20 74 79 70 65 3b 0d 0a 20 20 20 20 20 20  nt type;..      
9c40: 69 6e 74 20 65 6e 63 3b 0d 0a 20 20 20 20 20 20  int enc;..      
9c50: 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66  IntPtr p = Unsaf
9c60: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9c70: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63  qlite3_context_c
9c80: 6f 6c 6c 73 65 71 28 63 6f 6e 74 65 78 74 2c 20  ollseq(context, 
9c90: 6f 75 74 20 74 79 70 65 2c 20 6f 75 74 20 65 6e  out type, out en
9ca0: 63 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 0d 0a  c, out len);....
9cb0: 20 20 20 20 20 20 69 66 20 28 70 20 21 3d 20 6e        if (p != n
9cc0: 75 6c 6c 29 20 73 65 71 2e 4e 61 6d 65 20 3d 20  ull) seq.Name = 
9cd0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20  UTF8ToString(p, 
9ce0: 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 73 65 71  len);..      seq
9cf0: 2e 54 79 70 65 20 3d 20 28 43 6f 6c 6c 61 74 69  .Type = (Collati
9d00: 6f 6e 54 79 70 65 45 6e 75 6d 29 74 79 70 65 3b  onTypeEnum)type;
9d10: 0d 0a 20 20 20 20 20 20 73 65 71 2e 5f 66 75 6e  ..      seq._fun
9d20: 63 20 3d 20 66 75 6e 63 3b 0d 0a 20 20 20 20 20  c = func;..     
9d30: 20 73 65 71 2e 45 6e 63 6f 64 69 6e 67 20 3d 20   seq.Encoding = 
9d40: 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69  (CollationEncodi
9d50: 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20  ngEnum)enc;.... 
9d60: 20 20 20 20 20 72 65 74 75 72 6e 20 73 65 71 3b       return seq;
9d70: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
9d80: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
9d90: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
9da0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
9db0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
9dc0: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
9dd0: 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 42 79   GetParamValueBy
9de0: 74 65 73 28 49 6e 74 50 74 72 20 70 2c 20 69 6e  tes(IntPtr p, in
9df0: 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62  t nDataOffset, b
9e00: 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74  yte[] bDest, int
9e10: 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65   nStart, int nLe
9e20: 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ngth)..    {..  
9e30: 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55      int nlen = U
9e40: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9e50: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
9e60: 5f 62 79 74 65 73 28 70 29 3b 0d 0a 0d 0a 20 20  _bytes(p);....  
9e70: 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73      // If no des
9e80: 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c  tination buffer,
9e90: 20 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65   return the size
9ea0: 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20   needed...      
9eb0: 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c  if (bDest == nul
9ec0: 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d  l) return nlen;.
9ed0: 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f  ...      int nCo
9ee0: 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d  pied = nLength;.
9ef0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
9f00: 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20  pied + nStart > 
9f10: 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43  bDest.Length) nC
9f20: 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65  opied = bDest.Le
9f30: 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a  ngth - nStart;..
9f40: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
9f50: 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20  d + nDataOffset 
9f60: 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20  > nlen) nCopied 
9f70: 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66  = nlen - nDataOf
9f80: 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  fset;....      i
9f90: 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d  f (nCopied > 0).
9fa0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
9fb0: 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55    IntPtr ptr = U
9fc0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9fd0: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
9fe0: 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20 20  _blob(p);....   
9ff0: 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70       Marshal.Cop
a000: 79 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54  y((IntPtr)(ptr.T
a010: 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61  oInt64() + nData
a020: 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20  Offset), bDest, 
a030: 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29  nStart, nCopied)
a040: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
a050: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d    else..      {.
a060: 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64  .        nCopied
a070: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a   = 0;..      }..
a080: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e  ..      return n
a090: 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a  Copied;..    }..
a0a0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
a0b0: 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47  verride double G
a0c0: 65 74 50 61 72 61 6d 56 61 6c 75 65 44 6f 75 62  etParamValueDoub
a0d0: 6c 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a  le(IntPtr ptr)..
a0e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75      {..      dou
a0f0: 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20  ble value;..#if 
a100: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
a110: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
a120: 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65    value = Unsafe
a130: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
a140: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62  lite3_value_doub
a150: 6c 65 28 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d  le(ptr);..#else.
a160: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
a170: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a180: 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f  e3_value_double_
a190: 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75 74  interop(ptr, out
a1a0: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
a1b0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
a1c0: 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alue;..    }....
a1d0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
a1e0: 72 72 69 64 65 20 69 6e 74 20 47 65 74 50 61 72  rride int GetPar
a1f0: 61 6d 56 61 6c 75 65 49 6e 74 33 32 28 49 6e 74  amValueInt32(Int
a200: 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
a210: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
a220: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a230: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
a240: 69 6e 74 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d  int(ptr);..    }
a250: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
a260: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
a270: 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 36  etParamValueInt6
a280: 34 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  4(IntPtr ptr).. 
a290: 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 36     {..      Int6
a2a0: 34 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50  4 value;..#if !P
a2b0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
a2c0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
a2d0: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
a2e0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a2f0: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28  te3_value_int64(
a300: 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ptr);..#else..  
a310: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
a320: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a330: 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65  value_int64_inte
a340: 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 76 61 6c  rop(ptr, out val
a350: 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ue);..#endif..  
a360: 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65      return value
a370: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
a380: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
a390: 65 20 73 74 72 69 6e 67 20 47 65 74 50 61 72 61  e string GetPara
a3a0: 6d 56 61 6c 75 65 54 65 78 74 28 49 6e 74 50 74  mValueText(IntPt
a3b0: 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23  r ptr)..    {..#
a3c0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
a3d0: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
a3e0: 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  en;..      retur
a3f0: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
a400: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
a410: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
a420: 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 70 74  _text_interop(pt
a430: 72 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e  r, out len), len
a440: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
a450: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
a460: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
a470: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a480: 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 74 72 29  _value_text(ptr)
a490: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
a4a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
a4b0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54  ernal override T
a4c0: 79 70 65 41 66 66 69 6e 69 74 79 20 47 65 74 50  ypeAffinity GetP
a4d0: 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28 49 6e  aramValueType(In
a4e0: 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
a4f0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return 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 74 79 70 65 28 70 74 72 29 3b 0d 0a 20 20 20  _type(ptr);..   
a530: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
a540: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
a550: 20 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e 74 50   ReturnBlob(IntP
a560: 74 72 20 63 6f 6e 74 65 78 74 2c 20 62 79 74 65  tr context, byte
a570: 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  [] value)..    {
a580: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
a590: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a5a0: 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28  te3_result_blob(
a5b0: 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 2c 20  context, value, 
a5c0: 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20 28 49  value.Length, (I
a5d0: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
a5e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
a5f0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
a600: 64 20 52 65 74 75 72 6e 44 6f 75 62 6c 65 28 49  d ReturnDouble(I
a610: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 64  ntPtr context, d
a620: 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20  ouble value)..  
a630: 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
a640: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
a650: 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  ORK..      Unsaf
a660: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a670: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f  qlite3_result_do
a680: 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 76 61  uble(context, va
a690: 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
a6a0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
a6b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
a6c0: 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e  result_double_in
a6d0: 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72  terop(context, r
a6e0: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ef value);..#end
a6f0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
a700: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a710: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 45 72  de void ReturnEr
a720: 72 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ror(IntPtr conte
a730: 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  xt, string value
a740: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
a750: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a760: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
a770: 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74  lt_error(context
a780: 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c  , ToUTF8(value),
a790: 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d   value.Length);.
a7a0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
a7b0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
a7c0: 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 33 32  void ReturnInt32
a7d0: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
a7e0: 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20   int value)..   
a7f0: 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
a800: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
a810: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
a820: 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29  (context, value)
a830: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
a840: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
a850: 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74  e void ReturnInt
a860: 36 34 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  64(IntPtr contex
a870: 74 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a  t, long value)..
a880: 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
a890: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
a8a0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73  EWORK..      Uns
a8b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
a8c0: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
a8d0: 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20 76  int64(context, v
a8e0: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
a8f0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
a900: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a910: 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e  _result_int64_in
a920: 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72  terop(context, r
a930: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ef value);..#end
a940: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
a950: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a960: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 4e 75  de void ReturnNu
a970: 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  ll(IntPtr contex
a980: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
a990: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
a9a0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
a9b0: 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74  ult_null(context
a9c0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
a9d0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a9e0: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 54 65  de void ReturnTe
a9f0: 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  xt(IntPtr contex
aa00: 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29  t, string value)
aa10: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 62  ..    {..      b
aa20: 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38  yte[] b = ToUTF8
aa30: 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20  (value);..      
aa40: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
aa50: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
aa60: 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c  lt_text(context,
aa70: 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20   ToUTF8(value), 
aa80: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49  b.Length - 1, (I
aa90: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
aaa0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
aab0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 49 6e 74  nal override Int
aac0: 50 74 72 20 41 67 67 72 65 67 61 74 65 43 6f 6e  Ptr AggregateCon
aad0: 74 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74  text(IntPtr cont
aae0: 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ext)..    {..   
aaf0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
ab00: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ab10: 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f  lite3_aggregate_
ab20: 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 2c  context(context,
ab30: 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   1);..    }.... 
ab40: 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f     /// Enables o
ab50: 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e  r disabled exten
ab60: 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64 65 73  ded result codes
ab70: 20 72 65 74 75 72 6e 65 64 20 62 79 20 53 51 4c   returned by SQL
ab80: 69 74 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ite..    interna
ab90: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
aba0: 53 65 74 45 78 74 65 6e 64 65 64 52 65 73 75 6c  SetExtendedResul
abb0: 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f  tCodes(bool bOnO
abc0: 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ff)..    {..    
abd0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
abe0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78  thods.sqlite3_ex
abf0: 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f  tended_result_co
ac00: 64 65 73 28 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66  des(_sql, (bOnOf
ac10: 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 20  f ? -1 : 0));.. 
ac20: 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65     }..    /// Ge
ac30: 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69  ts the last SQLi
ac40: 74 65 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20  te error code.. 
ac50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
ac60: 72 69 64 65 20 69 6e 74 20 52 65 73 75 6c 74 43  ride int ResultC
ac70: 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ode()..    {..  
ac80: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
ac90: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
aca0: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 5f  qlite3_errcode(_
acb0: 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  sql);..    }..  
acc0: 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c    /// Gets the l
acd0: 61 73 74 20 53 51 4c 69 74 65 20 65 78 74 65 6e  ast SQLite exten
ace0: 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a  ded error code..
acf0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
ad00: 72 72 69 64 65 20 69 6e 74 20 45 78 74 65 6e 64  rride int Extend
ad10: 65 64 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a  edResultCode()..
ad20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
ad30: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
ad40: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
ad50: 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
ad60: 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a  (_sql);..    }..
ad70: 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20  ..    /// Add a 
ad80: 6c 6f 67 20 6d 65 73 73 61 67 65 20 76 69 61 20  log message via 
ad90: 74 68 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74  the SQLite sqlit
ada0: 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65  e3_log interface
adb0: 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
adc0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f  override void Lo
add0: 67 4d 65 73 73 61 67 65 28 69 6e 74 20 69 45 72  gMessage(int iEr
ade0: 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d  rCode, string zM
adf0: 65 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a  essage)..    {..
ae00: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
ae10: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
ae20: 33 5f 6c 6f 67 28 69 45 72 72 43 6f 64 65 2c 20  3_log(iErrCode, 
ae30: 54 6f 55 54 46 38 28 7a 4d 65 73 73 61 67 65 29  ToUTF8(zMessage)
ae40: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66  );..    }....#if
ae50: 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 0d 0a   INTEROP_CODEC..
ae60: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
ae70: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 50 61  rride void SetPa
ae80: 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 70 61  ssword(byte[] pa
ae90: 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20  sswordBytes)..  
aea0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
aeb0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
aec0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6b  ethods.sqlite3_k
aed0: 65 79 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f 72  ey(_sql, passwor
aee0: 64 42 79 74 65 73 2c 20 70 61 73 73 77 6f 72 64  dBytes, password
aef0: 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a  Bytes.Length);..
af00: 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29        if (n > 0)
af10: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
af20: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51  eException(n, SQ
af30: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29  LiteLastError())
af40: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
af50: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
af60: 65 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73  e void ChangePas
af70: 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77  sword(byte[] new
af80: 50 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a  PasswordBytes)..
af90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
afa0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
afb0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
afc0: 5f 72 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65 77  _rekey(_sql, new
afd0: 50 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20 28  PasswordBytes, (
afe0: 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73  newPasswordBytes
aff0: 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a 20   == null) ? 0 : 
b000: 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73  newPasswordBytes
b010: 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20  .Length);..     
b020: 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f   if (n > 0) thro
b030: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
b040: 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c  ption(n, SQLiteL
b050: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
b060: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
b070: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
b080: 72 69 64 65 20 76 6f 69 64 20 53 65 74 55 70 64  ride void SetUpd
b090: 61 74 65 48 6f 6f 6b 28 53 51 4c 69 74 65 55 70  ateHook(SQLiteUp
b0a0: 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e  dateCallback fun
b0b0: 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
b0c0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
b0d0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 75 70 64  hods.sqlite3_upd
b0e0: 61 74 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66  ate_hook(_sql, f
b0f0: 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
b100: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
b110: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b120: 64 65 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69  de void SetCommi
b130: 74 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d  tHook(SQLiteComm
b140: 69 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  itCallback func)
b150: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
b160: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b170: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69  ds.sqlite3_commi
b180: 74 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e  t_hook(_sql, fun
b190: 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
b1a0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
b1b0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
b1c0: 20 76 6f 69 64 20 53 65 74 54 72 61 63 65 43 61   void SetTraceCa
b1d0: 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 54 72 61  llback(SQLiteTra
b1e0: 63 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ceCallback func)
b1f0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
b200: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b210: 64 73 2e 73 71 6c 69 74 65 33 5f 74 72 61 63 65  ds.sqlite3_trace
b220: 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
b230: 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
b240: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
b250: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
b260: 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28  SetRollbackHook(
b270: 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63 6b 43 61  SQLiteRollbackCa
b280: 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
b290: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
b2a0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b2b0: 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f  qlite3_rollback_
b2c0: 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  hook(_sql, func,
b2d0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
b2e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
b2f0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
b300: 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74 68 65 20 73  /// Allows the s
b310: 65 74 74 69 6e 67 20 6f 66 20 61 20 6c 6f 67 67  etting of a logg
b320: 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 6e 76  ing callback inv
b330: 6f 6b 65 64 20 62 79 20 53 51 4c 69 74 65 20 77  oked by SQLite w
b340: 68 65 6e 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c  hen a..    /// l
b350: 6f 67 20 65 76 65 6e 74 20 6f 63 63 75 72 73 2e  og event occurs.
b360: 20 20 4f 6e 6c 79 20 6f 6e 65 20 63 61 6c 6c 62    Only one callb
b370: 61 63 6b 20 6d 61 79 20 62 65 20 73 65 74 2e 20  ack may be set. 
b380: 20 49 66 20 4e 55 4c 4c 20 69 73 20 70 61 73 73   If NULL is pass
b390: 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65  ed,..    /// the
b3a0: 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63   logging callbac
b3b0: 6b 20 69 73 20 75 6e 72 65 67 69 73 74 65 72 65  k is unregistere
b3c0: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  d...    /// </su
b3d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
b3e0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e  <param name="fun
b3f0: 63 22 3e 54 68 65 20 63 61 6c 6c 62 61 63 6b 20  c">The callback 
b400: 66 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f  function to invo
b410: 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ke.</param>..   
b420: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
b430: 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74 20 63  turns a result c
b440: 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ode</returns>.. 
b450: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
b460: 72 69 64 65 20 69 6e 74 20 53 65 74 4c 6f 67 43  ride int SetLogC
b470: 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c 6f  allback(SQLiteLo
b480: 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  gCallback func).
b490: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
b4a0: 69 6e 74 20 72 63 20 3d 20 55 6e 73 61 66 65 4e  int rc = UnsafeN
b4b0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
b4c0: 69 74 65 33 5f 63 6f 6e 66 69 67 28 0d 0a 20 20  ite3_config(..  
b4d0: 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 53            (int)S
b4e0: 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e  QLiteConfigOpsEn
b4f0: 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  um.SQLITE_CONFIG
b500: 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20 28 49 6e 74  _LOG, func, (Int
b510: 50 74 72 29 30 29 3b 0d 0a 0d 0a 20 20 20 20 20  Ptr)0);....     
b520: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20     return rc;.. 
b530: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
b540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b5a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
b5b0: 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65  ..    /// Create
b5c0: 73 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20 62  s a new SQLite b
b5d0: 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 62 61 73  ackup object bas
b5e0: 65 64 20 6f 6e 20 74 68 65 20 70 72 6f 76 69 64  ed on the provid
b5f0: 65 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a  ed destination..
b600: 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
b610: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68   connection.  Th
b620: 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
b630: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
b640: 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f  the one..    ///
b650: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
b660: 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54   this object.  T
b670: 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65  he source and de
b680: 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
b690: 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e  se..    /// conn
b6a0: 65 63 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62  ections cannot b
b6b0: 65 20 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20  e the same...   
b6c0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
b6d0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
b6e0: 6e 61 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54  name="destCnn">T
b6f0: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  he destination d
b700: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
b710: 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  on.</param>..   
b720: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
b730: 3d 22 64 65 73 74 4e 61 6d 65 22 3e 54 68 65 20  ="destName">The 
b740: 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61  destination data
b750: 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61  base name.</para
b760: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
b770: 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e  am name="sourceN
b780: 61 6d 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20  ame">The source 
b790: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f  database name.</
b7a0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
b7b0: 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 65 77  <returns>The new
b7c0: 6c 79 20 63 72 65 61 74 65 64 20 62 61 63 6b 75  ly created backu
b7d0: 70 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72  p object.</retur
b7e0: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
b7f0: 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
b800: 65 42 61 63 6b 75 70 20 49 6e 69 74 69 61 6c 69  eBackup Initiali
b810: 7a 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  zeBackup(..     
b820: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
b830: 69 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20  ion destCnn,..  
b840: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73        string des
b850: 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  tName,..        
b860: 73 74 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d  string sourceNam
b870: 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  e..        )..  
b880: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
b890: 28 64 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c  (destCnn == null
b8a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
b8b0: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
b8c0: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
b8d0: 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20  destCnn");....  
b8e0: 20 20 20 20 20 20 69 66 20 28 64 65 73 74 4e 61        if (destNa
b8f0: 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
b900: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
b910: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
b920: 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74 4e 61  xception("destNa
b930: 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me");....       
b940: 20 69 66 20 28 73 6f 75 72 63 65 4e 61 6d 65 20   if (sourceName 
b950: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
b960: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
b970: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
b980: 70 74 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d  ption("sourceNam
b990: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
b9a0: 53 51 4c 69 74 65 33 20 64 65 73 74 53 71 6c 69  SQLite3 destSqli
b9b0: 74 65 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73  te3 = destCnn._s
b9c0: 71 6c 20 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a  ql as SQLite3;..
b9d0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
b9e0: 73 74 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c  stSqlite3 == nul
b9f0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
ba00: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
ba10: 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  ntException(..  
ba20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
ba30: 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65  estination conne
ba40: 63 74 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61  ction has no wra
ba50: 70 70 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20  pper.",..       
ba60: 20 20 20 20 20 20 20 20 20 22 64 65 73 74 43 6e           "destCn
ba70: 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n");....        
ba80: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
ba90: 48 61 6e 64 6c 65 20 64 65 73 74 48 61 6e 64 6c  Handle destHandl
baa0: 65 20 3d 20 64 65 73 74 53 71 6c 69 74 65 33 2e  e = destSqlite3.
bab0: 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  _sql;....       
bac0: 20 69 66 20 28 64 65 73 74 48 61 6e 64 6c 65 20   if (destHandle 
bad0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
bae0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
baf0: 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f  ArgumentExceptio
bb00: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
bb10: 20 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e      "Destination
bb20: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20   connection has 
bb30: 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
bb40: 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e.",..          
bb50: 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29        "destCnn")
bb60: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
bb70: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
bb80: 64 6c 65 20 73 6f 75 72 63 65 48 61 6e 64 6c 65  dle sourceHandle
bb90: 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20   = _sql;....    
bba0: 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 48 61      if (sourceHa
bbb0: 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
bbc0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
bbd0: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
bbe0: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
bbf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bc00: 20 22 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74   "Source connect
bc10: 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ion has an inval
bc20: 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
bc30: 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20  .        byte[] 
bc40: 7a 44 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54  zDestName = ToUT
bc50: 46 38 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20  F8(destName);.. 
bc60: 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 53         byte[] zS
bc70: 6f 75 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54  ourceName = ToUT
bc80: 46 38 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d  F8(sourceName);.
bc90: 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
bca0: 72 20 62 61 63 6b 75 70 20 3d 20 55 6e 73 61 66  r backup = Unsaf
bcb0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
bcc0: 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e  qlite3_backup_in
bcd0: 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  it(..           
bce0: 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65   destHandle, zDe
bcf0: 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61  stName, sourceHa
bd00: 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65 4e 61 6d  ndle, zSourceNam
bd10: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  e);....        i
bd20: 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74  f (backup == Int
bd30: 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
bd40: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
bd50: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
bd60: 28 52 65 73 75 6c 74 43 6f 64 65 28 29 2c 20 53  (ResultCode(), S
bd70: 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29  QLiteLastError()
bd80: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
bd90: 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 42  turn new SQLiteB
bda0: 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
bdb0: 20 20 20 20 74 68 69 73 2c 20 62 61 63 6b 75 70      this, backup
bdc0: 2c 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44  , destHandle, zD
bdd0: 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48  estName, sourceH
bde0: 61 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65 4e 61  andle, zSourceNa
bdf0: 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  me);..    }.... 
be00: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
be10: 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 70 69 65 73  ..    /// Copies
be20: 20 75 70 20 74 6f 20 4e 20 70 61 67 65 73 20 66   up to N pages f
be30: 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 20 64  rom the source d
be40: 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 64  atabase to the d
be50: 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20  estination..    
be60: 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 61 73 73  /// database ass
be70: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
be80: 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b 75   specified backu
be90: 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f  p object...    /
bea0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
beb0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
bec0: 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
bed0: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
bee0: 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20   use.</param>.. 
bef0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
bf00: 6d 65 3d 22 6e 50 61 67 65 22 3e 0d 0a 20 20 20  me="nPage">..   
bf10: 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
bf20: 6f 66 20 70 61 67 65 73 20 74 6f 20 63 6f 70 79  of pages to copy
bf30: 2c 20 6e 65 67 61 74 69 76 65 20 74 6f 20 63 6f  , negative to co
bf40: 70 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67  py all remaining
bf50: 20 70 61 67 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f   pages...    ///
bf60: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
bf70: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
bf80: 72 65 74 72 79 22 3e 0d 0a 20 20 20 20 2f 2f 2f  retry">..    ///
bf90: 20 53 65 74 20 74 6f 20 74 72 75 65 20 69 66 20   Set to true if 
bfa0: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6e 65  the operation ne
bfb0: 65 64 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  eds to be retrie
bfc0: 64 20 64 75 65 20 74 6f 20 64 61 74 61 62 61 73  d due to databas
bfd0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 63 6b 69  e..    /// locki
bfe0: 6e 67 20 69 73 73 75 65 73 3b 20 6f 74 68 65 72  ng issues; other
bff0: 77 69 73 65 2c 20 73 65 74 20 74 6f 20 66 61 6c  wise, set to fal
c000: 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  se...    /// </p
c010: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
c020: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
c030: 2f 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  / True if there 
c040: 61 72 65 20 6d 6f 72 65 20 70 61 67 65 73 20 74  are more pages t
c050: 6f 20 62 65 20 63 6f 70 69 65 64 2c 20 66 61 6c  o be copied, fal
c060: 73 65 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20  se otherwise... 
c070: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
c080: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
c090: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53 74  override bool St
c0a0: 65 70 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  epBackup(..     
c0b0: 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20     SQLiteBackup 
c0c0: 62 61 63 6b 75 70 2c 0d 0a 20 20 20 20 20 20 20  backup,..       
c0d0: 20 69 6e 74 20 6e 50 61 67 65 2c 0d 0a 20 20 20   int nPage,..   
c0e0: 20 20 20 20 20 6f 75 74 20 62 6f 6f 6c 20 72 65       out bool re
c0f0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  try..        )..
c100: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
c110: 65 74 72 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  etry = false;...
c120: 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63  .        if (bac
c130: 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  kup == null)..  
c140: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
c150: 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
c160: 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75  Exception("backu
c170: 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p");....        
c180: 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
c190: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b  le handle = back
c1a0: 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75  up._sqlite_backu
c1b0: 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  p;....        if
c1c0: 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c   (handle == null
c1d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
c1e0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
c1f0: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
c200: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
c210: 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
c220: 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
c230: 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
c240: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d  .        int n =
c250: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
c260: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
c270: 6b 75 70 5f 73 74 65 70 28 68 61 6e 64 6c 65 2c  kup_step(handle,
c280: 20 6e 50 61 67 65 29 3b 0d 0a 20 20 20 20 20 20   nPage);..      
c290: 20 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65    backup._stepRe
c2a0: 73 75 6c 74 20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54  sult = n; /* NOT
c2b0: 45 3a 20 53 61 76 65 20 66 6f 72 20 75 73 65 20  E: Save for use 
c2c0: 62 79 20 46 69 6e 69 73 68 42 61 63 6b 75 70 2e  by FinishBackup.
c2d0: 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69   */....        i
c2e0: 66 20 28 6e 20 3d 3d 20 28 69 6e 74 29 53 51 4c  f (n == (int)SQL
c2f0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
c300: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
c310: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
c320: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
c330: 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69  ..        else i
c340: 66 20 28 6e 20 3d 3d 20 28 69 6e 74 29 53 51 4c  f (n == (int)SQL
c350: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73  iteErrorCode.Bus
c360: 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  y)..        {.. 
c370: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72 79             retry
c380: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
c390: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
c3a0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
c3b0: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
c3c0: 6e 20 3d 3d 20 28 69 6e 74 29 53 51 4c 69 74 65  n == (int)SQLite
c3d0: 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64  ErrorCode.Locked
c3e0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
c3f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 72 79 20            retry 
c400: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
c410: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
c420: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
c430: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
c440: 20 3d 3d 20 28 69 6e 74 29 53 51 4c 69 74 65 45   == (int)SQLiteE
c450: 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 0d 0a  rrorCode.Done)..
c460: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c470: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
c480: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  lse;..        }.
c490: 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  .        else.. 
c4a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c4b0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
c4c0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
c4d0: 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72  n, SQLiteLastErr
c4e0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  or());..        
c4f0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
c500: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
c510: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
c520: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
c530: 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20  es remaining to 
c540: 62 65 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74  be copied from t
c550: 68 65 20 73 6f 75 72 63 65 0d 0a 20 20 20 20 2f  he source..    /
c560: 2f 2f 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  // database to t
c570: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  he destination d
c580: 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74  atabase associat
c590: 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63  ed with the spec
c5a0: 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62  ified..    /// b
c5b0: 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20  ackup object... 
c5c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
c5d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
c5e0: 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
c5f0: 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
c600: 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72  t to check.</par
c610: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
c620: 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72  turns>The number
c630: 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e   of pages remain
c640: 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64  ing to be copied
c650: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
c660: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
c670: 64 65 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e 67  de int Remaining
c680: 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
c690: 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61   SQLiteBackup ba
c6a0: 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d  ckup..        ).
c6b0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
c6c0: 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75  if (backup == nu
c6d0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
c6e0: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
c6f0: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
c700: 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20  ("backup");.... 
c710: 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
c720: 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  kupHandle handle
c730: 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74   = backup._sqlit
c740: 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20  e_backup;....   
c750: 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20       if (handle 
c760: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
c770: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
c780: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
c790: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
c7b0: 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
c7c0: 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
c7d0: 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
c7e0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
c7f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
c800: 65 33 5f 62 61 63 6b 75 70 5f 72 65 6d 61 69 6e  e3_backup_remain
c810: 69 6e 67 28 68 61 6e 64 6c 65 29 3b 0d 0a 20 20  ing(handle);..  
c820: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
c830: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
c840: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 74 6f  / Returns the to
c850: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  tal number of pa
c860: 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63  ges in the sourc
c870: 65 20 64 61 74 61 62 61 73 65 20 61 73 73 6f 63  e database assoc
c880: 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 77  iated..    /// w
c890: 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65  ith the specifie
c8a0: 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e  d backup object.
c8b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
c8c0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
c8d0: 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75  aram name="backu
c8e0: 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62  p">The backup ob
c8f0: 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f  ject to check.</
c900: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
c910: 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 74 6f 74  <returns>The tot
c920: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  al number of pag
c930: 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65  es in the source
c940: 20 64 61 74 61 62 61 73 65 2e 3c 2f 72 65 74 75   database.</retu
c950: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
c960: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
c970: 50 61 67 65 43 6f 75 6e 74 42 61 63 6b 75 70 28  PageCountBackup(
c980: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
c990: 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20  Backup backup.. 
c9a0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
c9b0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63  .        if (bac
c9c0: 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  kup == null)..  
c9d0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
c9e0: 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
c9f0: 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75  Exception("backu
ca00: 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p");....        
ca10: 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
ca20: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b  le handle = back
ca30: 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75  up._sqlite_backu
ca40: 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  p;....        if
ca50: 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c   (handle == null
ca60: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
ca70: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
ca80: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
ca90: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
caa0: 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
cab0: 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
cac0: 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
cad0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
cae0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
caf0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
cb00: 75 70 5f 70 61 67 65 63 6f 75 6e 74 28 68 61 6e  up_pagecount(han
cb10: 64 6c 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  dle);..    }....
cb20: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
cb30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74 72  >..    /// Destr
cb40: 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70 20 6f  oys the backup o
cb50: 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62  bject, rolling b
cb60: 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20 74  ack any backup t
cb70: 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20  hat may be in.. 
cb80: 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d     /// progess..
cb90: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
cba0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
cbb0: 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
cbc0: 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
cbd0: 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c  ect to destroy.<
cbe0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
cbf0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
cc00: 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70  oid FinishBackup
cc10: 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
cc20: 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a  eBackup backup..
cc30: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
cc40: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61  ..        if (ba
cc50: 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ckup == null).. 
cc60: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
cc70: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
cc80: 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b  lException("back
cc90: 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  up");....       
cca0: 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
ccb0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63  dle handle = bac
ccc0: 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b  kup._sqlite_back
ccd0: 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  up;....        i
cce0: 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  f (handle == nul
ccf0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
cd00: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
cd10: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
cd20: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
cd30: 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
cd40: 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
cd50: 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
cd60: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20  ..        int n 
cd70: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
cd80: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
cd90: 63 6b 75 70 5f 66 69 6e 69 73 68 28 68 61 6e 64  ckup_finish(hand
cda0: 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 68 61  le);..        ha
cdb0: 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65 41 73  ndle.SetHandleAs
cdc0: 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a 20 20  Invalid();....  
cdd0: 20 20 20 20 20 20 69 66 20 28 28 6e 20 3e 20 30        if ((n > 0
cde0: 29 20 26 26 20 28 6e 20 21 3d 20 62 61 63 6b 75  ) && (n != backu
cdf0: 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29 0d  p._stepResult)).
ce00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
ce10: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
ce20: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
ce30: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
ce40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
ce50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ceb0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
cec0: 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d  ..    /// Determ
ced0: 69 6e 65 73 20 69 66 20 74 68 65 20 53 51 4c 69  ines if the SQLi
cee0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
cef0: 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  has been initial
cf00: 69 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20  ized for the..  
cf10: 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72    /// current pr
cf20: 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ocess...    /// 
cf30: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
cf40: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
cf50: 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e     /// A boolean
cf60: 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74   indicating whet
cf70: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53  her or not the S
cf80: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
cf90: 72 79 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20  ry has been..   
cfa0: 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64   /// initialized
cfb0: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
cfc0: 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f   process...    /
cfd0: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
cfe0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
cff0: 72 69 64 65 20 62 6f 6f 6c 20 49 73 49 6e 69 74  ride bool IsInit
d000: 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b  ialized()..    {
d010: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
d020: 20 53 74 61 74 69 63 49 73 49 6e 69 74 69 61 6c   StaticIsInitial
d030: 69 7a 65 64 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ized();..    }..
d040: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
d050: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74  ry>..    /// Det
d060: 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20 53  ermines if the S
d070: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
d080: 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74  ry has been init
d090: 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 0d  ialized for the.
d0a0: 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74  .    /// current
d0b0: 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f   process...    /
d0c0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
d0d0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
d0e0: 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c  ..    /// A bool
d0f0: 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ean indicating w
d100: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
d110: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
d120: 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d 0a  brary has been..
d130: 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69      /// initiali
d140: 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75 72 72  zed for the curr
d150: 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20  ent process...  
d160: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
d170: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
d180: 74 61 74 69 63 20 62 6f 6f 6c 20 53 74 61 74 69  tatic bool Stati
d190: 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29  cIsInitialized()
d1a0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
d1b0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
d1c0: 42 55 47 46 49 58 3a 20 50 72 65 76 65 6e 74 20  BUGFIX: Prevent 
d1d0: 72 61 63 65 73 20 77 69 74 68 20 6f 74 68 65 72  races with other
d1e0: 20 74 68 72 65 61 64 73 20 66 6f 72 20 74 68 69   threads for thi
d1f0: 73 20 65 6e 74 69 72 65 20 62 6c 6f 63 6b 2c 20  s entire block, 
d200: 64 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  due..        // 
d210: 20 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 74          to the t
d220: 72 79 2f 66 69 6e 61 6c 6c 79 20 73 65 6d 61 6e  ry/finally seman
d230: 74 69 63 73 2e 20 20 53 65 65 20 74 69 63 6b 65  tics.  See ticke
d240: 74 20 5b 37 32 39 30 35 63 39 61 37 37 5d 2e 0d  t [72905c9a77]..
d250: 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
d260: 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52       lock (syncR
d270: 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  oot)..        {.
d280: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
d290: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
d2a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
d2b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
d2c0: 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20 73  NOTE: Save the s
d2d0: 74 61 74 65 20 6f 66 20 74 68 65 20 6c 6f 67 67  tate of the logg
d2e0: 69 6e 67 20 63 6c 61 73 73 20 61 6e 64 20 74 68  ing class and th
d2f0: 65 6e 20 72 65 73 74 6f 72 65 20 69 74 0d 0a 20  en restore it.. 
d300: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
d310: 20 20 20 20 61 66 74 65 72 20 77 65 20 61 72 65      after we are
d320: 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20 6c   done to avoid l
d330: 6f 67 67 69 6e 67 20 74 6f 6f 20 6d 61 6e 79 20  ogging too many 
d340: 66 61 6c 73 65 20 65 72 72 6f 72 73 2e 0d 0a 20  false errors... 
d350: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
d360: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
d370: 73 61 76 65 64 45 6e 61 62 6c 65 64 20 3d 20 53  savedEnabled = S
d380: 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64  QLiteLog.Enabled
d390: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ;..            S
d3a0: 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64  QLiteLog.Enabled
d3b0: 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20   = false;....   
d3c0: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
d3d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 65 6e            {..#en
d3e0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
d3f0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
d400: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
d410: 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20 5b 61  : This method [a
d420: 62 5d 75 73 65 73 20 74 68 65 20 66 61 63 74 20  b]uses the fact 
d430: 74 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c 6c  that SQLite will
d440: 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 20   always..       
d450: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
d460: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
d470: 45 52 52 4f 52 20 66 6f 72 20 61 6e 79 20 75 6e  ERROR for any un
d480: 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72 61 74  known configurat
d490: 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20  ion option..    
d4a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
d4b0: 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20 74 68       *unless* th
d4c0: 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
d4d0: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
d4e0: 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0d 0a  n initialized...
d4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d500: 2f 2f 20 20 20 20 20 20 20 49 6e 20 74 68 61 74  //       In that
d510: 20 63 61 73 65 20 69 74 20 77 69 6c 6c 20 61 6c   case it will al
d520: 77 61 79 73 20 72 65 74 75 72 6e 20 53 51 4c 49  ways return SQLI
d530: 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20 20 20  TE_MISUSE...    
d540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
d550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d560: 69 6e 74 20 72 63 20 3d 20 55 6e 73 61 66 65 4e  int rc = UnsafeN
d570: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d580: 69 74 65 33 5f 63 6f 6e 66 69 67 28 0d 0a 20 20  ite3_config(..  
d590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5a0: 20 20 28 69 6e 74 29 53 51 4c 69 74 65 43 6f 6e    (int)SQLiteCon
d5b0: 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54  figOpsEnum.SQLIT
d5c0: 45 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45 2c 20 6e  E_CONFIG_NONE, n
d5d0: 75 6c 6c 2c 20 28 49 6e 74 50 74 72 29 30 29 3b  ull, (IntPtr)0);
d5e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d5f0: 20 20 20 20 72 65 74 75 72 6e 20 28 72 63 20 3d      return (rc =
d600: 3d 20 2f 2a 20 53 51 4c 49 54 45 5f 4d 49 53 55  = /* SQLITE_MISU
d610: 53 45 20 2a 2f 20 32 31 29 3b 0d 0a 23 69 66 20  SE */ 21);..#if 
d620: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
d630: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
d640: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
d650: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
d660: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
d670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
d680: 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64  QLiteLog.Enabled
d690: 20 3d 20 73 61 76 65 64 45 6e 61 62 6c 65 64 3b   = savedEnabled;
d6a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
d6b0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
d6c0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
d6d0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
d6e0: 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20 66      /// Helper f
d6f0: 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74 72 69  unction to retri
d700: 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20  eve a column of 
d710: 64 61 74 61 20 66 72 6f 6d 20 61 6e 20 61 63 74  data from an act
d720: 69 76 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a  ive statement...
d730: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
d740: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
d750: 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54  am name="stmt">T
d760: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
d770: 6e 67 20 73 74 65 70 28 29 27 64 20 74 68 72 6f  ng step()'d thro
d780: 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ugh</param>..   
d790: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
d7a0: 3d 22 69 6e 64 65 78 22 3e 54 68 65 20 63 6f 6c  ="index">The col
d7b0: 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72 65 74  umn index to ret
d7c0: 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20  rieve</param>.. 
d7d0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
d7e0: 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70  me="typ">The typ
d7f0: 65 20 6f 66 20 64 61 74 61 20 63 6f 6e 74 61 69  e of data contai
d800: 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ned in the colum
d810: 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74 69 61 6c  n.  If Uninitial
d820: 69 7a 65 64 2c 20 74 68 69 73 20 66 75 6e 63 74  ized, this funct
d830: 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69 65 76  ion will retriev
d840: 65 20 74 68 65 20 64 61 74 61 74 79 70 65 20 69  e the datatype i
d850: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61 72  nformation.</par
d860: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
d870: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 74 68  turns>Returns th
d880: 65 20 64 61 74 61 20 69 6e 20 74 68 65 20 63 6f  e data in the co
d890: 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  lumn</returns>..
d8a0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d8b0: 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74  rride object Get
d8c0: 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61 74  Value(SQLiteStat
d8d0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
d8e0: 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54 79 70  index, SQLiteTyp
d8f0: 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20  e typ)..    {.. 
d900: 20 20 20 20 20 69 66 20 28 49 73 4e 75 6c 6c 28       if (IsNull(
d910: 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 20 72 65  stmt, index)) re
d920: 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75  turn DBNull.Valu
d930: 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66  e;..      TypeAf
d940: 66 69 6e 69 74 79 20 61 66 66 20 3d 20 74 79 70  finity aff = typ
d950: 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20  .Affinity;..    
d960: 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c 3b    Type t = null;
d970: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 74 79  ....      if (ty
d980: 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79 70 65  p.Type != DbType
d990: 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20 20  .Object)..      
d9a0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d 20 53  {..        t = S
d9b0: 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c  QLiteConvert.SQL
d9c0: 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 74 79  iteTypeToType(ty
d9d0: 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61 66 66  p);..        aff
d9e0: 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e 69 74   = TypeToAffinit
d9f0: 79 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  y(t);..      }..
da00: 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28  ..      switch (
da10: 61 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  aff)..      {.. 
da20: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
da30: 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a  Affinity.Blob:..
da40: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
da50: 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65  p.Type == DbType
da60: 2e 47 75 69 64 20 26 26 20 74 79 70 2e 41 66 66  .Guid && typ.Aff
da70: 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66  inity == TypeAff
da80: 69 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20 20 20  inity.Text)..   
da90: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
daa0: 6e 65 77 20 47 75 69 64 28 47 65 74 54 65 78 74  new Guid(GetText
dab0: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d  (stmt, index));.
dac0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ...          int
dad0: 20 6e 20 3d 20 28 69 6e 74 29 47 65 74 42 79 74   n = (int)GetByt
dae0: 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  es(stmt, index, 
daf0: 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d  0, null, 0, 0);.
db00: 0a 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b  .          byte[
db10: 5d 20 62 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e  ] b = new byte[n
db20: 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 47 65  ];..          Ge
db30: 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64  tBytes(stmt, ind
db40: 65 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29 3b  ex, 0, b, 0, n);
db50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
db60: 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62   (typ.Type == Db
db70: 54 79 70 65 2e 47 75 69 64 20 26 26 20 6e 20 3d  Type.Guid && n =
db80: 3d 20 31 36 29 0d 0a 20 20 20 20 20 20 20 20 20  = 16)..         
db90: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75     return new Gu
dba0: 69 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  id(b);....      
dbb0: 20 20 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a 20      return b;.. 
dbc0: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
dbd0: 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d  Affinity.DateTim
dbe0: 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  e:..          re
dbf0: 74 75 72 6e 20 47 65 74 44 61 74 65 54 69 6d 65  turn GetDateTime
dc00: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
dc10: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
dc20: 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65  eAffinity.Double
dc30: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  :..          if 
dc40: 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75  (t == null) retu
dc50: 72 6e 20 47 65 74 44 6f 75 62 6c 65 28 73 74 6d  rn GetDouble(stm
dc60: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
dc70: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
dc80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43          return C
dc90: 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70  onvert.ChangeTyp
dca0: 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74  e(GetDouble(stmt
dcb0: 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c  , index), t, nul
dcc0: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  l);..        cas
dcd0: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49  e TypeAffinity.I
dce0: 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20  nt64:..         
dcf0: 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20   if (t == null) 
dd00: 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28  return GetInt64(
dd10: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
dd20: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
dd30: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
dd40: 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65  n Convert.Change
dd50: 54 79 70 65 28 47 65 74 49 6e 74 36 34 28 73 74  Type(GetInt64(st
dd60: 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e  mt, index), t, n
dd70: 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 64  ull);..        d
dd80: 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20  efault:..       
dd90: 20 20 20 72 65 74 75 72 6e 20 47 65 74 54 65 78     return GetTex
dda0: 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  t(stmt, index);.
ddb0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
ddc0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
ddd0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74  override int Get
dde0: 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65 28 53  CursorForTable(S
ddf0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
de00: 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e 74  tmt, int db, int
de10: 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20 20   rootPage)..    
de20: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
de30: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 72  TANDARD..      r
de40: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
de50: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
de60: 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72 28 73  3_table_cursor(s
de70: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
de80: 2c 20 64 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b  , db, rootPage);
de90: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
dea0: 65 74 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69  eturn -1;..#endi
deb0: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
dec0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
ded0: 65 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64 46  e long GetRowIdF
dee0: 6f 72 43 75 72 73 6f 72 28 53 51 4c 69 74 65 53  orCursor(SQLiteS
def0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
df00: 6e 74 20 63 75 72 73 6f 72 29 0d 0a 20 20 20 20  nt cursor)..    
df10: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
df20: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c  TANDARD..      l
df30: 6f 6e 67 20 72 6f 77 69 64 3b 0d 0a 20 20 20 20  ong rowid;..    
df40: 20 20 69 6e 74 20 72 63 20 3d 20 55 6e 73 61 66    int rc = Unsaf
df50: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
df60: 71 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f  qlite3_cursor_ro
df70: 77 69 64 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  wid(stmt._sqlite
df80: 5f 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20 6f  _stmt, cursor, o
df90: 75 74 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20  ut rowid);..    
dfa0: 20 20 69 66 20 28 72 63 20 3d 3d 20 30 29 20 72    if (rc == 0) r
dfb0: 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a  eturn rowid;....
dfc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d        return 0;.
dfd0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
dfe0: 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d  turn 0;..#endif.
dff0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
e000: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
e010: 76 6f 69 64 20 47 65 74 49 6e 64 65 78 43 6f 6c  void GetIndexCol
e020: 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f 28  umnExtendedInfo(
e030: 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 2c  string database,
e040: 20 73 74 72 69 6e 67 20 69 6e 64 65 78 2c 20 73   string index, s
e050: 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75  tring column, ou
e060: 74 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20  t int sortMode, 
e070: 6f 75 74 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c  out int onError,
e080: 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c   out string coll
e090: 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a  ationSequence)..
e0a0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
e0b0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
e0c0: 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 3b 0d     IntPtr coll;.
e0d0: 0a 20 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c  .      int colll
e0e0: 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72  en;..      int r
e0f0: 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 63 20 3d  c;....      rc =
e100: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
e110: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
e120: 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69  ex_column_info_i
e130: 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55  nterop(_sql, ToU
e140: 54 46 38 28 64 61 74 61 62 61 73 65 29 2c 20 54  TF8(database), T
e150: 6f 55 54 46 38 28 69 6e 64 65 78 29 2c 20 54 6f  oUTF8(index), To
e160: 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75  UTF8(column), ou
e170: 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74 20  t sortMode, out 
e180: 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20 63 6f 6c  onError, out col
e190: 6c 2c 20 6f 75 74 20 63 6f 6c 6c 6c 65 6e 29 3b  l, out colllen);
e1a0: 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63 20 21  ..      if (rc !
e1b0: 3d 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53  = 0) throw new S
e1c0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72  QLiteException(r
e1d0: 63 2c 20 22 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  c, "");....     
e1e0: 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   collationSequen
e1f0: 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  ce = UTF8ToStrin
e200: 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29  g(coll, colllen)
e210: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
e220: 73 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20  sortMode = 0;.. 
e230: 20 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20 32       onError = 2
e240: 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69  ;..      collati
e250: 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 22 42 49  onSequence = "BI
e260: 4e 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a  NARY";..#endif..
e270: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
e280: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
e290: 6e 74 20 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 73  nt FileControl(s
e2a0: 74 72 69 6e 67 20 7a 44 62 4e 61 6d 65 2c 20 69  tring zDbName, i
e2b0: 6e 74 20 6f 70 2c 20 49 6e 74 50 74 72 20 70 41  nt op, IntPtr pA
e2c0: 72 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  rg)..    {..    
e2d0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
e2e0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
e2f0: 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
e300: 6c 28 5f 73 71 6c 2c 20 28 7a 44 62 4e 61 6d 65  l(_sql, (zDbName
e310: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 55 54   != null) ? ToUT
e320: 46 38 28 7a 44 62 4e 61 6d 65 29 20 3a 20 6e 75  F8(zDbName) : nu
e330: 6c 6c 2c 20 6f 70 2c 20 70 41 72 67 29 3b 0d 0a  ll, op, pArg);..
e340: 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a         }..  }..}..