System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 1051b1df911dbd2a293c2dd77e4d8b9ab19da7df:


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: 69 6e 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29 0d  int CountPool().
2020: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
2030: 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
2040: 67 2c 20 69 6e 74 3e 20 63 6f 75 6e 74 73 20 3d  g, int> counts =
2050: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
2060: 69 6e 74 20 74 6f 74 61 6c 43 6f 75 6e 74 20 3d  int totalCount =
2070: 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53   0;....        S
2080: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50  QLiteConnectionP
2090: 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74 73 28 5f 66  ool.GetCounts(_f
20a0: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
20b0: 20 20 20 20 20 20 72 65 66 20 63 6f 75 6e 74 73        ref counts
20c0: 2c 20 72 65 66 20 74 6f 74 61 6c 43 6f 75 6e 74  , ref totalCount
20d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
20e0: 74 75 72 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 3b  turn totalCount;
20f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
2100: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
2110: 20 76 6f 69 64 20 53 65 74 54 69 6d 65 6f 75 74   void SetTimeout
2120: 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29  (int nTimeoutMS)
2130: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
2140: 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nt n = UnsafeNat
2150: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2160: 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  e3_busy_timeout(
2170: 5f 73 71 6c 2c 20 6e 54 69 6d 65 6f 75 74 4d 53  _sql, nTimeoutMS
2180: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
2190: 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53  > 0) throw new S
21a0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
21b0: 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f  , SQLiteLastErro
21c0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
21d0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
21e0: 72 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 28  rride bool Step(
21f0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
2200: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
2210: 20 20 20 20 69 6e 74 20 6e 3b 0d 0a 20 20 20 20      int n;..    
2220: 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e    Random rnd = n
2230: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74  ull;..      uint
2240: 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28 75 69   starttick = (ui
2250: 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54  nt)Environment.T
2260: 69 63 6b 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20  ickCount;..     
2270: 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20   uint timeout = 
2280: 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d  (uint)(stmt._com
2290: 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d  mand._commandTim
22a0: 65 6f 75 74 20 2a 20 31 30 30 30 29 3b 0d 0a 0d  eout * 1000);...
22b0: 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28 74 72  .      while (tr
22c0: 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ue)..      {..  
22d0: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
22e0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
22f0: 6c 69 74 65 33 5f 73 74 65 70 28 73 74 6d 74 2e  lite3_step(stmt.
2300: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a  _sqlite_stmt);..
2310: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
2320: 3d 3d 20 31 30 30 29 20 72 65 74 75 72 6e 20 74  == 100) return t
2330: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  rue;..        if
2340: 20 28 6e 20 3d 3d 20 31 30 31 29 20 72 65 74 75   (n == 101) retu
2350: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
2360: 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 0d       if (n > 0).
2370: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2380: 20 20 20 20 20 20 69 6e 74 20 72 3b 0d 0a 0d 0a        int r;....
2390: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 41 6e 20            // An 
23a0: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 2c 20  error occurred, 
23b0: 61 74 74 65 6d 70 74 20 74 6f 20 72 65 73 65 74  attempt to reset
23c0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 2e 20   the statement. 
23d0: 20 49 66 20 74 68 65 20 72 65 73 65 74 20 77 6f   If the reset wo
23e0: 72 6b 65 64 20 62 65 63 61 75 73 65 20 74 68 65  rked because the
23f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 73  ..          // s
2400: 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
2410: 64 2c 20 72 65 2d 74 72 79 20 74 68 65 20 73 74  d, re-try the st
2420: 65 70 20 61 67 61 69 6e 2e 20 20 49 66 20 69 74  ep again.  If it
2430: 20 65 72 72 6f 72 65 64 20 6f 75 72 20 62 65 63   errored our bec
2440: 61 75 73 65 20 74 68 65 20 64 61 74 61 62 61 73  ause the databas
2450: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  e..          // 
2460: 69 73 20 6c 6f 63 6b 65 64 2c 20 74 68 65 6e 20  is locked, then 
2470: 6b 65 65 70 20 72 65 74 72 79 69 6e 67 20 75 6e  keep retrying un
2480: 74 69 6c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  til the command 
2490: 74 69 6d 65 6f 75 74 20 6f 63 63 75 72 73 2e 0d  timeout occurs..
24a0: 0a 20 20 20 20 20 20 20 20 20 20 72 20 3d 20 52  .          r = R
24b0: 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20  eset(stmt);.... 
24c0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 20 3d           if (r =
24d0: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
24e0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
24f0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53  teException(n, S
2500: 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29  QLiteLastError()
2510: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2520: 65 6c 73 65 20 69 66 20 28 28 72 20 3d 3d 20 36  else if ((r == 6
2530: 20 7c 7c 20 72 20 3d 3d 20 35 29 20 26 26 20 73   || r == 5) && s
2540: 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20  tmt._command != 
2550: 6e 75 6c 6c 29 20 2f 2f 20 53 51 4c 49 54 45 5f  null) // SQLITE_
2560: 4c 4f 43 4b 45 44 20 7c 7c 20 53 51 4c 49 54 45  LOCKED || SQLITE
2570: 5f 42 55 53 59 0d 0a 20 20 20 20 20 20 20 20 20  _BUSY..         
2580: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2590: 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a  // Keep trying..
25a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25b0: 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20  rnd == null) // 
25c0: 46 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65  First time we've
25d0: 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65   encountered the
25e0: 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20   lock..         
25f0: 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52       rnd = new R
2600: 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20  andom();....    
2610: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
2620: 27 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65  've exceeded the
2630: 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f   command's timeo
2640: 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20  ut, give up and 
2650: 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a  throw an error..
2660: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2670: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
2680: 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74  t.TickCount - st
2690: 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75  arttick > timeou
26a0: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
26b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26c0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
26d0: 65 45 78 63 65 70 74 69 6f 6e 28 72 2c 20 53 51  eException(r, SQ
26e0: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29  LiteLastError())
26f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
2710: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
2720: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2730: 20 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c   // Otherwise sl
2740: 65 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d  eep for a random
2750: 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20   amount of time 
2760: 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20  up to 150ms..   
2770: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
2780: 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65  m.Threading.Thre
2790: 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78  ad.Sleep(rnd.Nex
27a0: 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20  t(1, 150));..   
27b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
27c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
27d0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..   
27e0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
27f0: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
2800: 52 65 73 65 74 28 53 51 4c 69 74 65 53 74 61 74  Reset(SQLiteStat
2810: 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20  ement stmt)..   
2820: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 3b   {..      int n;
2830: 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
2840: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
2850: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
2860: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2870: 72 65 73 65 74 5f 69 6e 74 65 72 6f 70 28 73 74  reset_interop(st
2880: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29  mt._sqlite_stmt)
2890: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
28a0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
28b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
28c0: 72 65 73 65 74 28 73 74 6d 74 2e 5f 73 71 6c 69  reset(stmt._sqli
28d0: 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69  te_stmt);..#endi
28e0: 66 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66  f....      // If
28f0: 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e   the schema chan
2900: 67 65 64 2c 20 74 72 79 20 61 6e 64 20 72 65 2d  ged, try and re-
2910: 70 72 65 70 61 72 65 20 69 74 0d 0a 20 20 20 20  prepare it..    
2920: 20 20 69 66 20 28 6e 20 3d 3d 20 31 37 29 20 2f    if (n == 17) /
2930: 2f 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0d  / SQLITE_SCHEMA.
2940: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2950: 20 20 2f 2f 20 52 65 63 72 65 61 74 65 20 61 20    // Recreate a 
2960: 64 75 6d 6d 79 20 73 74 61 74 65 6d 65 6e 74 0d  dummy statement.
2970: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
2980: 73 74 72 3b 0d 0a 20 20 20 20 20 20 20 20 75 73  str;..        us
2990: 69 6e 67 20 28 53 51 4c 69 74 65 53 74 61 74 65  ing (SQLiteState
29a0: 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72 65 70 61  ment tmp = Prepa
29b0: 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73  re(null, stmt._s
29c0: 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c  qlStatement, nul
29d0: 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f  l, (uint)(stmt._
29e0: 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64  command._command
29f0: 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 2c  Timeout * 1000),
2a00: 20 6f 75 74 20 73 74 72 29 29 0d 0a 20 20 20 20   out str))..    
2a10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2a20: 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74 68 65   // Finalize the
2a30: 20 65 78 69 73 74 69 6e 67 20 73 74 61 74 65 6d   existing statem
2a40: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ent..          s
2a50: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
2a60: 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
2a70: 20 20 20 20 20 20 20 2f 2f 20 52 65 61 73 73 69         // Reassi
2a80: 67 6e 20 61 20 6e 65 77 20 73 74 61 74 65 6d 65  gn a new stateme
2a90: 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  nt pointer to th
2aa0: 65 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e 74 20  e old statement 
2ab0: 61 6e 64 20 63 6c 65 61 72 20 74 68 65 20 74 65  and clear the te
2ac0: 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20  mporary one..   
2ad0: 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c         stmt._sql
2ae0: 69 74 65 5f 73 74 6d 74 20 3d 20 74 6d 70 2e 5f  ite_stmt = tmp._
2af0: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20  sqlite_stmt;..  
2b00: 20 20 20 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c          tmp._sql
2b10: 69 74 65 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b  ite_stmt = null;
2b20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  ....          //
2b30: 20 52 65 61 70 70 6c 79 20 70 61 72 61 6d 65 74   Reapply paramet
2b40: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ers..          s
2b50: 74 6d 74 2e 42 69 6e 64 50 61 72 61 6d 65 74 65  tmt.BindParamete
2b60: 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rs();..        }
2b70: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2b80: 20 2d 31 3b 20 2f 2f 20 52 65 73 65 74 20 77 61   -1; // Reset wa
2b90: 73 20 4f 4b 2c 20 77 69 74 68 20 73 63 68 65 6d  s OK, with schem
2ba0: 61 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 20 20  a change..      
2bb0: 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66  }..      else if
2bc0: 20 28 6e 20 3d 3d 20 36 20 7c 7c 20 6e 20 3d 3d   (n == 6 || n ==
2bd0: 20 35 29 20 2f 2f 20 53 51 4c 49 54 45 5f 4c 4f   5) // SQLITE_LO
2be0: 43 4b 45 44 20 7c 7c 20 53 51 4c 49 54 45 5f 42  CKED || SQLITE_B
2bf0: 55 53 59 0d 0a 20 20 20 20 20 20 20 20 72 65 74  USY..        ret
2c00: 75 72 6e 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  urn n;....      
2c10: 69 66 20 28 6e 20 3e 20 30 29 0d 0a 20 20 20 20  if (n > 0)..    
2c20: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
2c30: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
2c40: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
2c50: 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  ());....      re
2c60: 74 75 72 6e 20 30 3b 20 2f 2f 20 57 65 20 72 65  turn 0; // We re
2c70: 73 65 74 20 4f 4b 2c 20 6e 6f 20 73 63 68 65 6d  set OK, no schem
2c80: 61 20 63 68 61 6e 67 65 73 0d 0a 20 20 20 20 7d  a changes..    }
2c90: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2ca0: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
2cb0: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
2cc0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
2cd0: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 42 61   return SQLiteBa
2ce0: 73 65 2e 53 51 4c 69 74 65 4c 61 73 74 45 72 72  se.SQLiteLastErr
2cf0: 6f 72 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d  or(_sql);..    }
2d00: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2d10: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
2d20: 53 74 61 74 65 6d 65 6e 74 20 50 72 65 70 61 72  Statement Prepar
2d30: 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  e(SQLiteConnecti
2d40: 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e 67 20 73  on cnn, string s
2d50: 74 72 53 71 6c 2c 20 53 51 4c 69 74 65 53 74 61  trSql, SQLiteSta
2d60: 74 65 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 2c  tement previous,
2d70: 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 4d 53 2c   uint timeoutMS,
2d80: 20 6f 75 74 20 73 74 72 69 6e 67 20 73 74 72 52   out string strR
2d90: 65 6d 61 69 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20  emain)..    {.. 
2da0: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
2db0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73  .IsNullOrEmpty(s
2dc0: 74 72 53 71 6c 29 29 0d 0a 20 20 20 20 20 20 7b  trSql))..      {
2dd0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
2de0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
2df0: 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73  QLite does not s
2e00: 75 70 70 6f 72 74 20 74 68 65 20 63 6f 6e 63 65  upport the conce
2e10: 70 74 20 6f 66 20 73 65 70 61 72 61 74 65 20 73  pt of separate s
2e20: 63 68 65 6d 61 73 0d 0a 20 20 20 20 20 20 20 20  chemas..        
2e30: 2f 2f 20 20 20 20 20 20 20 69 6e 20 6f 6e 65 20  //       in one 
2e40: 64 61 74 61 62 61 73 65 3b 20 74 68 65 72 65 66  database; theref
2e50: 6f 72 65 2c 20 72 65 6d 6f 76 65 20 74 68 65 20  ore, remove the 
2e60: 62 61 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65  base schema name
2e70: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
2e80: 20 20 20 75 73 65 64 20 74 6f 20 73 6d 6f 6f 74     used to smoot
2e90: 68 20 69 6e 74 65 67 72 61 74 69 6f 6e 20 77 69  h integration wi
2ea0: 74 68 20 74 68 65 20 62 61 73 65 20 2e 4e 45 54  th the base .NET
2eb0: 20 46 72 61 6d 65 77 6f 72 6b 0d 0a 20 20 20 20   Framework..    
2ec0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 61 74      //       dat
2ed0: 61 20 63 6c 61 73 73 65 73 2e 0d 0a 20 20 20 20  a classes...    
2ee0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2ef0: 73 74 72 69 6e 67 20 62 61 73 65 53 63 68 65 6d  string baseSchem
2f00: 61 4e 61 6d 65 20 3d 20 28 63 6e 6e 20 21 3d 20  aName = (cnn != 
2f10: 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 62 61 73  null) ? cnn._bas
2f20: 65 53 63 68 65 6d 61 4e 61 6d 65 20 3a 20 6e 75  eSchemaName : nu
2f30: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ll;....        i
2f40: 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
2f50: 6c 4f 72 45 6d 70 74 79 28 62 61 73 65 53 63 68  lOrEmpty(baseSch
2f60: 65 6d 61 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  emaName))..     
2f70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f80: 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e  strSql = strSql.
2f90: 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20  Replace(..      
2fa0: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
2fb0: 6f 72 6d 61 74 28 22 5b 7b 30 7d 5d 2e 22 2c 20  ormat("[{0}].", 
2fc0: 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c  baseSchemaName),
2fd0: 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d   String.Empty);.
2fe0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72  ...          str
2ff0: 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70  Sql = strSql.Rep
3000: 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  lace(..         
3010: 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
3020: 61 74 28 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53  at("{0}.", baseS
3030: 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69  chemaName), Stri
3040: 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20  ng.Empty);..    
3050: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
3060: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f  ..      SQLiteCo
3070: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
3080: 61 67 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ags =..         
3090: 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f   (cnn != null) ?
30a0: 20 63 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51 4c   cnn.Flags : SQL
30b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
30c0: 67 73 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a 23  gs.Default;....#
30d0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
30e0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
30f0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
3100: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
3110: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61  onFlags.LogPrepa
3120: 72 65 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  re) == SQLiteCon
3130: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
3140: 50 72 65 70 61 72 65 29 0d 0a 20 20 20 20 20 20  Prepare)..      
3150: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
3160: 28 28 73 74 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c  ((strSql == null
3170: 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 4c 65 6e  ) || (strSql.Len
3180: 67 74 68 20 3d 3d 20 30 29 20 7c 7c 20 28 73 74  gth == 0) || (st
3190: 72 53 71 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e 67  rSql.Trim().Leng
31a0: 74 68 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20  th == 0))..     
31b0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
31c0: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 30 2c  og.LogMessage(0,
31d0: 20 22 50 72 65 70 61 72 69 6e 67 20 7b 3c 6e 6f   "Preparing {<no
31e0: 74 68 69 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20  thing>}...");.. 
31f0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
3200: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
3210: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
3220: 65 28 30 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  e(0, String.Form
3230: 61 74 28 22 50 72 65 70 61 72 69 6e 67 20 7b 7b  at("Preparing {{
3240: 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72 53 71  {0}}}...", strSq
3250: 6c 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 23  l));..      }..#
3260: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 49  endif....      I
3270: 6e 74 50 74 72 20 73 74 6d 74 20 3d 20 49 6e 74  ntPtr stmt = Int
3280: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
3290: 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 49 6e   IntPtr ptr = In
32a0: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
32b0: 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a    int len = 0;..
32c0: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 31 37        int n = 17
32d0: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72 65 74  ;..      int ret
32e0: 72 69 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ries = 0;..     
32f0: 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54   byte[] b = ToUT
3300: 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20 20  F8(strSql);..   
3310: 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 64 65     string typede
3320: 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  fs = null;..    
3330: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
3340: 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  t cmd = null;.. 
3350: 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20       Random rnd 
3360: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75  = null;..      u
3370: 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20  int starttick = 
3380: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
3390: 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a  t.TickCount;....
33a0: 20 20 20 20 20 20 47 43 48 61 6e 64 6c 65 20 68        GCHandle h
33b0: 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e 64 6c 65  andle = GCHandle
33c0: 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48 61 6e 64  .Alloc(b, GCHand
33d0: 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64 29 3b 0d  leType.Pinned);.
33e0: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 73  .      IntPtr ps
33f0: 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41 64 64 72  ql = handle.Addr
3400: 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63 74 28 29  OfPinnedObject()
3410: 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a 20 20  ;..      try..  
3420: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 77      {..        w
3430: 68 69 6c 65 20 28 28 6e 20 3d 3d 20 31 37 20 7c  hile ((n == 17 |
3440: 7c 20 6e 20 3d 3d 20 36 20 7c 7c 20 6e 20 3d 3d  | n == 6 || n ==
3450: 20 35 29 20 26 26 20 72 65 74 72 69 65 73 20 3c   5) && retries <
3460: 20 33 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   3)..        {..
3470: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
3480: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
3490: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
34a0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
34b0: 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  prepare_interop(
34c0: 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65  _sql, psql, b.Le
34d0: 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20 73 74  ngth - 1, out st
34e0: 6d 74 2c 20 6f 75 74 20 70 74 72 2c 20 6f 75 74  mt, out ptr, out
34f0: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
3500: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
3510: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
3520: 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  .sqlite3_prepare
3530: 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c  (_sql, psql, b.L
3540: 65 6e 67 74 68 20 2d 20 31 2c 20 6f 75 74 20 73  ength - 1, out s
3550: 74 6d 74 2c 20 6f 75 74 20 70 74 72 29 3b 0d 0a  tmt, out ptr);..
3560: 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20            len = 
3570: 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23  -1;..#endif....#
3580: 69 66 20 44 45 42 55 47 20 26 26 20 21 4e 45 54  if DEBUG && !NET
3590: 5f 43 4f 4d 50 41 43 54 5f 32 30 0d 0a 20 20 20  _COMPACT_20..   
35a0: 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
35b0: 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f  teLine(String.Fo
35c0: 72 6d 61 74 28 22 50 72 65 70 61 72 65 3a 20 7b  rmat("Prepare: {
35d0: 30 7d 22 2c 20 73 74 6d 74 29 29 3b 0d 0a 23 65  0}", stmt));..#e
35e0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
35f0: 20 20 69 66 20 28 6e 20 3d 3d 20 31 37 29 0d 0a    if (n == 17)..
3600: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72              retr
3610: 69 65 73 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ies++;..        
3620: 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
3630: 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  1)..          {.
3640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
3650: 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28  (String.Compare(
3660: 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28  SQLiteLastError(
3670: 29 2c 20 22 6e 65 61 72 20 5c 22 54 59 50 45 53  ), "near \"TYPES
3680: 5c 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72  \": syntax error
3690: 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  ", StringCompari
36a0: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
36b0: 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20  eCase) == 0)..  
36c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
36d0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 70             int p
36e0: 6f 73 20 3d 20 73 74 72 53 71 6c 2e 49 6e 64 65  os = strSql.Inde
36f0: 78 4f 66 28 27 3b 27 29 3b 0d 0a 20 20 20 20 20  xOf(';');..     
3700: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6f 73           if (pos
3710: 20 3d 3d 20 2d 31 29 20 70 6f 73 20 3d 20 73 74   == -1) pos = st
3720: 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 31 3b  rSql.Length - 1;
3730: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3740: 20 20 74 79 70 65 64 65 66 73 20 3d 20 73 74 72    typedefs = str
3750: 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c  Sql.Substring(0,
3760: 20 70 6f 73 20 2b 20 31 29 3b 0d 0a 20 20 20 20   pos + 1);..    
3770: 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c            strSql
3780: 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72   = strSql.Substr
3790: 69 6e 67 28 70 6f 73 20 2b 20 31 29 3b 0d 0a 0d  ing(pos + 1);...
37a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
37b0: 74 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a  trRemain = "";..
37c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37d0: 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75  while (cmd == nu
37e0: 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e  ll && strSql.Len
37f0: 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  gth > 0)..      
3800: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3810: 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 20 3d             cmd =
3820: 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73 74   Prepare(cnn, st
3830: 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20  rSql, previous, 
3840: 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20 73  timeoutMS, out s
3850: 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20  trRemain);..    
3860: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53              strS
3870: 71 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b 0d  ql = strRemain;.
3880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
3890: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
38a0: 20 20 69 66 20 28 63 6d 64 20 21 3d 20 6e 75 6c    if (cmd != nul
38b0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
38c0: 20 20 20 20 63 6d 64 2e 53 65 74 54 79 70 65 73      cmd.SetTypes
38d0: 28 74 79 70 65 64 65 66 73 29 3b 0d 0a 0d 0a 20  (typedefs);.... 
38e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
38f0: 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20  urn cmd;..      
3900: 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 50 4c        }..#if !PL
3910: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
3920: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
3930: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 62       else if (_b
3940: 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 3d  uildingSchema ==
3950: 20 66 61 6c 73 65 20 26 26 20 53 74 72 69 6e 67   false && String
3960: 2e 43 6f 6d 70 61 72 65 28 53 51 4c 69 74 65 4c  .Compare(SQLiteL
3970: 61 73 74 45 72 72 6f 72 28 29 2c 20 30 2c 20 22  astError(), 0, "
3980: 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 54  no such table: T
3990: 45 4d 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c 20  EMP.SCHEMA", 0, 
39a0: 32 36 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  26, StringCompar
39b0: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
39c0: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
39d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
39e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52              strR
39f0: 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 20 20 20  emain = "";..   
3a00: 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c             _buil
3a10: 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 74 72 75  dingSchema = tru
3a20: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
3a30: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
3a40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3a50: 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 53          ISQLiteS
3a60: 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 20  chemaExtensions 
3a70: 65 78 74 20 3d 20 28 28 49 53 65 72 76 69 63 65  ext = ((IService
3a80: 50 72 6f 76 69 64 65 72 29 53 51 4c 69 74 65 46  Provider)SQLiteF
3a90: 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65 29  actory.Instance)
3aa0: 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70 65  .GetService(type
3ab0: 6f 66 28 49 53 51 4c 69 74 65 53 63 68 65 6d 61  of(ISQLiteSchema
3ac0: 45 78 74 65 6e 73 69 6f 6e 73 29 29 20 61 73 20  Extensions)) as 
3ad0: 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74  ISQLiteSchemaExt
3ae0: 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20  ensions;....    
3af0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3b00: 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ext != null)..  
3b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b20: 65 78 74 2e 42 75 69 6c 64 54 65 6d 70 53 63 68  ext.BuildTempSch
3b30: 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20 20  ema(cnn);....   
3b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
3b50: 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20  le (cmd == null 
3b60: 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68  && strSql.Length
3b70: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
3b80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3b90: 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 20              cmd 
3ba0: 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73  = Prepare(cnn, s
3bb0: 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c  trSql, previous,
3bc0: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 6f 75 74 20   timeoutMS, out 
3bd0: 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20  strRemain);..   
3be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
3bf0: 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69  trSql = strRemai
3c00: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
3c10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
3c20: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3c30: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  cmd;..          
3c40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
3c50: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
3c60: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
3c80: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d  buildingSchema =
3c90: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
3ca0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3cb0: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
3cc0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
3cd0: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
3ce0: 28 6e 20 3d 3d 20 36 20 7c 7c 20 6e 20 3d 3d 20  (n == 6 || n == 
3cf0: 35 29 20 2f 2f 20 4c 6f 63 6b 65 64 20 2d 2d 20  5) // Locked -- 
3d00: 64 65 6c 61 79 20 61 20 73 6d 61 6c 6c 20 61 6d  delay a small am
3d10: 6f 75 6e 74 20 62 65 66 6f 72 65 20 72 65 74 72  ount before retr
3d20: 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ying..          
3d30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
3d40: 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20  / Keep trying.. 
3d50: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
3d60: 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46  nd == null) // F
3d70: 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65 20  irst time we've 
3d80: 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20  encountered the 
3d90: 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  lock..          
3da0: 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61      rnd = new Ra
3db0: 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndom();....     
3dc0: 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27         // If we'
3dd0: 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65 20  ve exceeded the 
3de0: 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75  command's timeou
3df0: 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20 74  t, give up and t
3e00: 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20  hrow an error.. 
3e10: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
3e20: 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74  uint)Environment
3e30: 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61  .TickCount - sta
3e40: 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74  rttick > timeout
3e50: 4d 53 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  MS)..           
3e60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3e70: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
3e80: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53  teException(n, S
3e90: 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29  QLiteLastError()
3ea0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3eb0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
3ec0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
3ed0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3ee0: 20 20 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73    // Otherwise s
3ef0: 6c 65 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f  leep for a rando
3f00: 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65  m amount of time
3f10: 20 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20   up to 150ms..  
3f20: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
3f30: 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72  em.Threading.Thr
3f40: 65 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65  ead.Sleep(rnd.Ne
3f50: 78 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20  xt(1, 150));..  
3f60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
3f70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3f80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
3f90: 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20  f (n > 0) throw 
3fa0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
3fb0: 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73  ion(n, SQLiteLas
3fc0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20  tError());....  
3fd0: 20 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20        strRemain 
3fe0: 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  = UTF8ToString(p
3ff0: 74 72 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20  tr, len);....   
4000: 20 20 20 20 20 69 66 20 28 73 74 6d 74 20 21 3d       if (stmt !=
4010: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 63 6d   IntPtr.Zero) cm
4020: 64 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74  d = new SQLiteSt
4030: 61 74 65 6d 65 6e 74 28 74 68 69 73 2c 20 66 6c  atement(this, fl
4040: 61 67 73 2c 20 73 74 6d 74 2c 20 73 74 72 53 71  ags, stmt, strSq
4050: 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20 73  l.Substring(0, s
4060: 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 73  trSql.Length - s
4070: 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67 74 68 29  trRemain.Length)
4080: 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d 0a 0d 0a  , previous);....
4090: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
40a0: 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  md;..      }..  
40b0: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
40c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 68 61     {..        ha
40d0: 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d 0a 20 20  ndle.Free();..  
40e0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
40f0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
4100: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
4110: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74      protected st
4120: 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e  atic void LogBin
4130: 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  d(SQLiteStatemen
4140: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20  tHandle handle, 
4150: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
4160: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
4170: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
4180: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
4190: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
41a0: 67 4d 65 73 73 61 67 65 28 30 2c 20 53 74 72 69  gMessage(0, Stri
41b0: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
41c0: 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67          "Binding
41d0: 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70   statement {0} p
41e0: 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20  aramter #{1} as 
41f0: 4e 55 4c 4c 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  NULL...",..     
4200: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74         handleInt
4210: 50 74 72 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20  Ptr, index));.. 
4220: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74     }....    prot
4230: 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69  ected static voi
4240: 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65  d LogBind(SQLite
4250: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
4260: 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65  handle, int inde
4270: 78 2c 20 56 61 6c 75 65 54 79 70 65 20 76 61 6c  x, ValueType val
4280: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
4290: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
42a0: 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65  eIntPtr = handle
42b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
42c0: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
42d0: 65 28 30 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  e(0, String.Form
42e0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
42f0: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
4300: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
4310: 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32   #{1} as type {2
4320: 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b  } with value {{{
4330: 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  3}}}...",..     
4340: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74         handleInt
4350: 50 74 72 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  Ptr, index, valu
4360: 65 2e 47 65 74 54 79 70 65 28 29 2c 20 76 61 6c  e.GetType(), val
4370: 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
4380: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
4390: 69 63 20 73 74 72 69 6e 67 20 46 6f 72 6d 61 74  ic string Format
43a0: 44 61 74 65 54 69 6d 65 28 44 61 74 65 54 69 6d  DateTime(DateTim
43b0: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  e value)..    {.
43c0: 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42  .        StringB
43d0: 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20  uilder result = 
43e0: 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65  new StringBuilde
43f0: 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  r();....        
4400: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61  result.Append(va
4410: 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 22 79 79  lue.ToString("yy
4420: 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73  yy-MM-ddTHH:mm:s
4430: 73 2e 46 46 46 46 46 46 46 4b 22 29 29 3b 0d 0a  s.FFFFFFFK"));..
4440: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
4450: 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20  ppend(' ');..   
4460: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
4470: 6e 64 28 76 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d  nd(value.Kind);.
4480: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
4490: 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20  Append(' ');..  
44a0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
44b0: 65 6e 64 28 76 61 6c 75 65 2e 54 69 63 6b 73 29  end(value.Ticks)
44c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
44d0: 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72  urn result.ToStr
44e0: 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ing();..    }...
44f0: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
4500: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
4510: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
4520: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
4530: 20 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65   int index, Date
4540: 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  Time value)..   
4550: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
4560: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
4570: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
4580: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
4590: 6f 67 4d 65 73 73 61 67 65 28 30 2c 20 53 74 72  ogMessage(0, Str
45a0: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
45b0: 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e           "Bindin
45c0: 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20  g statement {0} 
45d0: 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73  paramter #{1} as
45e0: 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76   type {2} with v
45f0: 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22  alue {{{3}}}..."
4600: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68  ,..            h
4610: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
4620: 65 78 2c 20 74 79 70 65 6f 66 28 44 61 74 65 54  ex, typeof(DateT
4630: 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44 61 74 65  ime), FormatDate
4640: 54 69 6d 65 28 76 61 6c 75 65 29 29 29 3b 0d 0a  Time(value)));..
4650: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f      }....    pro
4660: 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f  tected static vo
4670: 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74  id LogBind(SQLit
4680: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
4690: 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64   handle, int ind
46a0: 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ex, string value
46b0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
46c0: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
46d0: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
46e0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
46f0: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
4700: 30 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  0, String.Format
4710: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  (..            "
4720: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
4730: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
4740: 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20  {1} as type {2} 
4750: 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d  with value {{{3}
4760: 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  }}...",..       
4770: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
4780: 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66  r, index, typeof
4790: 28 53 74 72 69 6e 67 29 2c 20 28 76 61 6c 75 65  (String), (value
47a0: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75   != null) ? valu
47b0: 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d  e : "<null>"));.
47c0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
47d0: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
47e0: 69 6e 67 20 54 6f 48 65 78 61 64 65 63 69 6d 61  ing ToHexadecima
47f0: 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20  lString(..      
4800: 20 20 62 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a    byte[] array..
4810: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
4820: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72  ..        if (ar
4830: 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ray == null)..  
4840: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4850: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
4860: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
4870: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
4880: 69 6e 67 42 75 69 6c 64 65 72 28 61 72 72 61 79  ingBuilder(array
4890: 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d  .Length * 2);...
48a0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  .        int len
48b0: 67 74 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67  gth = array.Leng
48c0: 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  th;....        f
48d0: 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
48e0: 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74  0; index < lengt
48f0: 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20  h; index++)..   
4900: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
4910: 41 70 70 65 6e 64 28 61 72 72 61 79 5b 69 6e 64  Append(array[ind
4920: 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78 32  ex].ToString("x2
4930: 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "));....        
4940: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f  return result.To
4950: 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d  String();..    }
4960: 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ....    protecte
4970: 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f  d static void Lo
4980: 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74  gBind(SQLiteStat
4990: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
49a0: 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62  le, int index, b
49b0: 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20  yte[] value)..  
49c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
49d0: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
49e0: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
49f0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
4a00: 4c 6f 67 4d 65 73 73 61 67 65 28 30 2c 20 53 74  LogMessage(0, St
4a10: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
4a20: 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69            "Bindi
4a30: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d  ng statement {0}
4a40: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61   paramter #{1} a
4a50: 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20  s type {2} with 
4a60: 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e  value {{{3}}}...
4a70: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
4a80: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
4a90: 64 65 78 2c 20 74 79 70 65 6f 66 28 42 79 74 65  dex, typeof(Byte
4aa0: 5b 5d 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e  []), (value != n
4ab0: 75 6c 6c 29 20 3f 20 54 6f 48 65 78 61 64 65 63  ull) ? ToHexadec
4ac0: 69 6d 61 6c 53 74 72 69 6e 67 28 76 61 6c 75 65  imalString(value
4ad0: 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d  ) : "<null>"));.
4ae0: 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a  .    }..#endif..
4af0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
4b00: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
4b10: 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53  d_Double(SQLiteS
4b20: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
4b30: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
4b40: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
4b50: 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61  index, double va
4b60: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
4b70: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
4b80: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
4b90: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
4ba0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
4bb0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
4bc0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
4bd0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
4be0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
4bf0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
4c00: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
4c10: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
4c20: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4c30: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
4c40: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
4c50: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
4c60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  }....        int
4c70: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
4c80: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
4c90: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e  _bind_double(han
4ca0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
4cb0: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
4cc0: 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61      int n = Unsa
4cd0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4ce0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75  sqlite3_bind_dou
4cf0: 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  ble_interop(hand
4d00: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
4d10: 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  alue);..#endif..
4d20: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20          if (n > 
4d30: 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  0) throw new SQL
4d40: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
4d50: 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28  SQLiteLastError(
4d60: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
4d70: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
4d80: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e  ide void Bind_In
4d90: 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t32(SQLiteStatem
4da0: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
4db0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
4dc0: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
4dd0: 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20  , int value)..  
4de0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
4df0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
4e00: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
4e10: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
4e20: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
4e30: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
4e40: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
4e50: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
4e60: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
4e70: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
4e80: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
4e90: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
4ea0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4eb0: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
4ec0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
4ed0: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
4ee0: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  f....        int
4ef0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
4f00: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
4f10: 5f 62 69 6e 64 5f 69 6e 74 28 68 61 6e 64 6c 65  _bind_int(handle
4f20: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
4f30: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
4f40: 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53  > 0) throw new S
4f50: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
4f60: 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f  , SQLiteLastErro
4f70: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
4f80: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
4f90: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
4fa0: 55 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61  UInt32(SQLiteSta
4fb0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
4fc0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
4fd0: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
4fe0: 64 65 78 2c 20 75 69 6e 74 20 76 61 6c 75 65 29  dex, uint value)
4ff0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
5000: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
5010: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
5020: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
5030: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
5040: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
5050: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
5060: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
5070: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5080: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
5090: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
50a0: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
50b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
50c0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
50d0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
50e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
50f0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
5100: 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e   int n = UnsafeN
5110: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5120: 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 28 68  ite3_bind_uint(h
5130: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
5140: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  lue);..        i
5150: 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20  f (n > 0) throw 
5160: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
5170: 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73  ion(n, SQLiteLas
5180: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
5190: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
51a0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
51b0: 42 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74  Bind_Int64(SQLit
51c0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
51d0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
51e0: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
51f0: 74 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61  t index, long va
5200: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
5210: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
5220: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
5230: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
5240: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
5250: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
5260: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
5270: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
5280: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5290: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
52a0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
52b0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
52c0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
52d0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
52e0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
52f0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
5300: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  }....        int
5310: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
5320: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
5330: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64  _bind_int64(hand
5340: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
5350: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
5360: 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66     int n = Unsaf
5370: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
5380: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
5390: 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  4_interop(handle
53a0: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
53b0: 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ue);..#endif..  
53c0: 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29        if (n > 0)
53d0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
53e0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51  eException(n, SQ
53f0: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29  LiteLastError())
5400: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5410: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
5420: 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74  e void Bind_UInt
5430: 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
5440: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
5450: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
5460: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
5470: 20 75 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20   ulong value).. 
5480: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
5490: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
54a0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
54b0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
54c0: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
54d0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
54e0: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
54f0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
5500: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
5510: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
5520: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5530: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
5540: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5550: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
5560: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
5570: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
5580: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e        int n = Un
5590: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
55a0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75  s.sqlite3_bind_u
55b0: 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e  int64(handle, in
55c0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  dex, value);..#e
55d0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  lse..        int
55e0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
55f0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
5600: 5f 62 69 6e 64 5f 75 69 6e 74 36 34 5f 69 6e 74  _bind_uint64_int
5610: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
5620: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
5630: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
5640: 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f   if (n > 0) thro
5650: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
5660: 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c  ption(n, SQLiteL
5670: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
5680: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
5690: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
56a0: 64 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c 69  d Bind_Text(SQLi
56b0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
56c0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
56d0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
56e0: 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67  nt index, string
56f0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
5700: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
5710: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
5720: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
5730: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
5740: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
5750: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
5760: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
5770: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
5780: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
5790: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
57a0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
57b0: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
57c0: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
57d0: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
57e0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
57f0: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
5800: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
5810: 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29   = ToUTF8(value)
5820: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
5830: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
5840: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
5850: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
5860: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
5870: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
5880: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
5890: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
58a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
58b0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
58c0: 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20  e, index, b);.. 
58d0: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
58e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  ....        int 
58f0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
5900: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5910: 62 69 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c 65  bind_text(handle
5920: 2c 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65  , index, b, b.Le
5930: 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74  ngth - 1, (IntPt
5940: 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  r)(-1));..      
5950: 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72    if (n > 0) thr
5960: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
5970: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
5980: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
5990: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
59a0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
59b0: 69 64 20 42 69 6e 64 5f 44 61 74 65 54 69 6d 65  id Bind_DateTime
59c0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
59d0: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
59e0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
59f0: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 44  gs, int index, D
5a00: 61 74 65 54 69 6d 65 20 64 74 29 0d 0a 20 20 20  ateTime dt)..   
5a10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
5a20: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
5a30: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
5a40: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
5a50: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
5a60: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
5a70: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
5a80: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
5a90: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
5aa0: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
5ab0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
5ac0: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
5ad0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
5ae0: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
5af0: 6e 64 65 78 2c 20 64 74 29 3b 0d 0a 20 20 20 20  ndex, dt);..    
5b00: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
5b10: 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20  .        switch 
5b20: 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74  (_datetimeFormat
5b30: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
5b40: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
5b50: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
5b60: 2e 54 69 63 6b 73 3a 0d 0a 20 20 20 20 20 20 20  .Ticks:..       
5b70: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b90: 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20 64 74 2e  long value = dt.
5ba0: 54 69 63 6b 73 3b 0d 0a 0d 0a 23 69 66 20 21 50  Ticks;....#if !P
5bb0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
5bc0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
5bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5be0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
5bf0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
5c00: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
5c10: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
5c20: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
5c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5c50: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
5c60: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
5c70: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
5c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c90: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
5ca0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d           int n =
5cb0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
5cc0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
5cd0: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
5ce0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
5cf0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
5d00: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e             int n
5d10: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
5d20: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
5d30: 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ind_int64_intero
5d40: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
5d50: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
5d60: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
5d70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
5d80: 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53  > 0) throw new S
5d90: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
5da0: 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f  , SQLiteLastErro
5db0: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
5dc0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
5dd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5de0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5df0: 20 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74    case SQLiteDat
5e00: 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44  eFormats.JulianD
5e10: 61 79 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay:..           
5e20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5e30: 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 75 62              doub
5e40: 6c 65 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c  le value = ToJul
5e50: 69 61 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 23  ianDay(dt);....#
5e60: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
5e70: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
5e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e90: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
5ea0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
5eb0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
5ec0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
5ed0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
5ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5ef0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f10: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
5f20: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
5f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5f40: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
5f60: 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  t n = UnsafeNati
5f70: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5f80: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61  3_bind_double(ha
5f90: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
5fa0: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
5fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5fc0: 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e   int n = UnsafeN
5fd0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5fe0: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
5ff0: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
6000: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
6010: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6030: 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f   if (n > 0) thro
6040: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
6050: 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c  ption(n, SQLiteL
6060: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
6070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6080: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
6090: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
60a0: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
60b0: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
60c0: 55 6e 69 78 45 70 6f 63 68 3a 0d 0a 20 20 20 20  UnixEpoch:..    
60d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
60e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60f0: 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20     long value = 
6100: 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 36 34 28  Convert.ToInt64(
6110: 64 74 2e 53 75 62 74 72 61 63 74 28 55 6e 69 78  dt.Subtract(Unix
6120: 45 70 6f 63 68 29 2e 54 6f 74 61 6c 53 65 63 6f  Epoch).TotalSeco
6130: 6e 64 73 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  nds);....#if !PL
6140: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
6150: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
6160: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6170: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
6180: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6190: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
61a0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
61b0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
61c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
61e0: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
61f0: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
6200: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
6210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
6220: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6230: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20          int n = 
6240: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6250: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
6260: 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69  _int64(handle, i
6270: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
6280: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
6290: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20            int n 
62a0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
62b0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
62c0: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
62d0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
62e0: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  ref value);..#en
62f0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
6300: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e           if (n >
6310: 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51   0) throw new SQ
6320: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
6330: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
6340: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
6350: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
6360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6370: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
6380: 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
6390: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
63a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63b0: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
63c0: 54 46 38 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20  TF8(dt);....#if 
63d0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
63e0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6400: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
6410: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6420: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
6430: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6440: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
6450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6460: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f                Lo
6480: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
6490: 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20  dex, b);..      
64a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
64b0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
64c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
64d0: 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nt n = UnsafeNat
64e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
64f0: 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61 6e  e3_bind_text(han
6500: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20 62  dle, index, b, b
6510: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e  .Length - 1, (In
6520: 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20  tPtr)(-1));..   
6530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6540: 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f   if (n > 0) thro
6550: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
6560: 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c  ption(n, SQLiteL
6570: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
6580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6590: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
65a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
65b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
65c0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
65d0: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
65e0: 5f 42 6c 6f 62 28 53 51 4c 69 74 65 53 74 61 74  _Blob(SQLiteStat
65f0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
6600: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6610: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
6620: 65 78 2c 20 62 79 74 65 5b 5d 20 62 6c 6f 62 44  ex, byte[] blobD
6630: 61 74 61 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ata)..    {..   
6640: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
6650: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
6660: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
6670: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
6680: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
6690: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
66a0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
66b0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
66c0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
66d0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
66e0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
66f0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
6700: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
6710: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
6720: 6c 6f 62 44 61 74 61 29 3b 0d 0a 20 20 20 20 20  lobData);..     
6730: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
6740: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20          int n = 
6750: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6760: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
6770: 5f 62 6c 6f 62 28 68 61 6e 64 6c 65 2c 20 69 6e  _blob(handle, in
6780: 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20 62  dex, blobData, b
6790: 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c 20  lobData.Length, 
67a0: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
67b0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20          if (n > 
67c0: 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  0) throw new SQL
67d0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
67e0: 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28  SQLiteLastError(
67f0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
6800: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
6810: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75  ide void Bind_Nu
6820: 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ll(SQLiteStateme
6830: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
6840: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
6850: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29  lags, int index)
6860: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
6870: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
6880: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
6890: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
68a0: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
68b0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
68c0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
68d0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
68e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
68f0: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
6900: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6910: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
6920: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6930: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
6940: 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  le, index);..   
6950: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
6960: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20  ..        int n 
6970: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6980: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
6990: 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65 2c 20  nd_null(handle, 
69a0: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
69b0: 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f   if (n > 0) thro
69c0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
69d0: 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c  ption(n, SQLiteL
69e0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
69f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
6a00: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
6a10: 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74   Bind_ParamCount
6a20: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
6a30: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
6a40: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
6a50: 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  gs)..    {..    
6a60: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
6a70: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
6a80: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
6a90: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69  stmt;..        i
6aa0: 6e 74 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66  nt value = Unsaf
6ab0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6ac0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
6ad0: 6d 65 74 65 72 5f 63 6f 75 6e 74 28 68 61 6e 64  meter_count(hand
6ae0: 6c 65 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  le);....#if !PLA
6af0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
6b00: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
6b10: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
6b20: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6b30: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
6b40: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
6b50: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
6b60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6b70: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
6b80: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
6b90: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
6ba0: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
6bb0: 4d 65 73 73 61 67 65 28 30 2c 20 53 74 72 69 6e  Message(0, Strin
6bc0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
6bd0: 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61 74             "Stat
6be0: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
6bf0: 65 72 20 63 6f 75 6e 74 20 69 73 20 7b 31 7d 2e  er count is {1}.
6c00: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
6c10: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
6c20: 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  , value));..    
6c30: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
6c40: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6c50: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  value;..    }...
6c60: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6c70: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 42 69  erride string Bi
6c80: 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28 53 51 4c  nd_ParamName(SQL
6c90: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
6ca0: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
6cb0: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
6cc0: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
6cd0: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
6ce0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
6cf0: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
6d00: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20  sqlite_stmt;..  
6d10: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
6d20: 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  e;....#if !SQLIT
6d30: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
6d40: 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20      int len;..  
6d50: 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46        name = UTF
6d60: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
6d70: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
6d80: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
6d90: 65 74 65 72 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  eter_name_intero
6da0: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
6db0: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
6dc0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
6dd0: 20 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74   name = UTF8ToSt
6de0: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
6df0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6e00: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
6e10: 6e 61 6d 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64  name(handle, ind
6e20: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
6e30: 66 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  f....#if !PLATFO
6e40: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
6e50: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
6e60: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
6e70: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
6e80: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
6e90: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
6ea0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
6eb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6ec0: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
6ed0: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
6ee0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6ef0: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
6f00: 73 61 67 65 28 30 2c 20 53 74 72 69 6e 67 2e 46  sage(0, String.F
6f10: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
6f20: 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65          "Stateme
6f30: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
6f40: 23 7b 31 7d 20 6e 61 6d 65 20 69 73 20 7b 7b 7b  #{1} name is {{{
6f50: 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20  2}}}.",..       
6f60: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
6f70: 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 6e 61  ntPtr, index, na
6f80: 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  me));..        }
6f90: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
6fa0: 20 20 20 20 72 65 74 75 72 6e 20 6e 61 6d 65 3b      return name;
6fb0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
6fc0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
6fd0: 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 49   int Bind_ParamI
6fe0: 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61 74 65  ndex(SQLiteState
6ff0: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
7000: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7010: 20 66 6c 61 67 73 2c 20 73 74 72 69 6e 67 20 70   flags, string p
7020: 61 72 61 6d 4e 61 6d 65 29 0d 0a 20 20 20 20 7b  aramName)..    {
7030: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
7040: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
7050: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
7060: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20  qlite_stmt;..   
7070: 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d       int index =
7080: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
7090: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
70a0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65  d_parameter_inde
70b0: 78 28 68 61 6e 64 6c 65 2c 20 54 6f 55 54 46 38  x(handle, ToUTF8
70c0: 28 70 61 72 61 6d 4e 61 6d 65 29 29 3b 0d 0a 0d  (paramName));...
70d0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
70e0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
70f0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
7100: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
7110: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
7120: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
7130: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
7140: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
7150: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  {..            I
7160: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
7170: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
7180: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
7190: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
71a0: 28 30 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  (0, String.Forma
71b0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
71c0: 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b      "Statement {
71d0: 30 7d 20 70 61 72 61 6d 74 65 72 20 69 6e 64 65  0} paramter inde
71e0: 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d  x of name {{{1}}
71f0: 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20  } is #{2}.",..  
7200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
7210: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70 61 72 61  ndleIntPtr, para
7220: 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b 0d  mName, index));.
7230: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
7240: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  if....        re
7250: 74 75 72 6e 20 69 6e 64 65 78 3b 0d 0a 20 20 20  turn index;..   
7260: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
7270: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
7280: 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51 4c 69  ColumnCount(SQLi
7290: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
72a0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
72b0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
72c0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
72d0: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
72e0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
72f0: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
7300: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
7310: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
7320: 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  nName(SQLiteStat
7330: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
7340: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
7350: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
7360: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
7370: 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  en;..      retur
7380: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
7390: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
73a0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
73b0: 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  n_name_interop(s
73c0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
73d0: 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e  , index, out len
73e0: 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
73f0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
7400: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
7410: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7420: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
7430: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
7440: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
7450: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
7460: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
7470: 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41  l override TypeA
7480: 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66  ffinity ColumnAf
7490: 66 69 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61  finity(SQLiteSta
74a0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
74b0: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
74c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
74d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
74e0: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
74f0: 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  type(stmt._sqlit
7500: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
7510: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
7520: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
7530: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70  string ColumnTyp
7540: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
7550: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
7560: 78 2c 20 6f 75 74 20 54 79 70 65 41 66 66 69 6e  x, out TypeAffin
7570: 69 74 79 20 6e 41 66 66 69 6e 69 74 79 29 0d 0a  ity nAffinity)..
7580: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
7590: 20 6c 65 6e 3b 0d 0a 23 69 66 20 21 53 51 4c 49   len;..#if !SQLI
75a0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
75b0: 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
75c0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
75d0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
75e0: 5f 64 65 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f  _decltype_intero
75f0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
7600: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
7610: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
7620: 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20      len = -1;.. 
7630: 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20       IntPtr p = 
7640: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7650: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
7660: 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73 74 6d 74  mn_decltype(stmt
7670: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
7680: 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ndex);..#endif..
7690: 20 20 20 20 20 20 6e 41 66 66 69 6e 69 74 79 20        nAffinity 
76a0: 3d 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  = ColumnAffinity
76b0: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
76c0: 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 21 3d  ..      if (p !=
76d0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65   IntPtr.Zero) re
76e0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
76f0: 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20  g(p, len);..    
7700: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d    else..      {.
7710: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b  .        string[
7720: 5d 20 61 72 20 3d 20 73 74 6d 74 2e 54 79 70 65  ] ar = stmt.Type
7730: 44 65 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a 20 20  Definitions;..  
7740: 20 20 20 20 20 20 69 66 20 28 61 72 20 21 3d 20        if (ar != 
7750: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
7760: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
7770: 69 6e 64 65 78 20 3c 20 61 72 2e 4c 65 6e 67 74  index < ar.Lengt
7780: 68 20 26 26 20 61 72 5b 69 6e 64 65 78 5d 20 21  h && ar[index] !
7790: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
77a0: 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 5b 69       return ar[i
77b0: 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20  ndex];..        
77c0: 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
77d0: 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  n String.Empty;.
77e0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 73 77 69  ...        //swi
77f0: 74 63 68 20 28 6e 41 66 66 69 6e 69 74 79 29 0d  tch (nAffinity).
7800: 0a 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20  .        //{..  
7810: 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20 54        //  case T
7820: 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
7830: 34 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  4:..        //  
7840: 20 20 72 65 74 75 72 6e 20 22 42 49 47 49 4e 54    return "BIGINT
7850: 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ";..        //  
7860: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
7870: 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20  y.Double:..     
7880: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
7890: 22 44 4f 55 42 4c 45 22 3b 0d 0a 20 20 20 20 20  "DOUBLE";..     
78a0: 20 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65     //  case Type
78b0: 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a  Affinity.Blob:..
78c0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65          //    re
78d0: 74 75 72 6e 20 22 42 4c 4f 42 22 3b 0d 0a 20 20  turn "BLOB";..  
78e0: 20 20 20 20 20 20 2f 2f 20 20 64 65 66 61 75 6c        //  defaul
78f0: 74 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  t:..        //  
7900: 20 20 72 65 74 75 72 6e 20 22 54 45 58 54 22 3b    return "TEXT";
7910: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 20  ..        //}.. 
7920: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
7930: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
7940: 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d  erride int Colum
7950: 6e 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61  nIndex(SQLiteSta
7960: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72  tement stmt, str
7970: 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 0d  ing columnName).
7980: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
7990: 74 20 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f 75 6e  t x = ColumnCoun
79a0: 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20  t(stmt);....    
79b0: 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30    for (int n = 0
79c0: 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d 0a 20  ; n < x; n++).. 
79d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
79e0: 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61  if (String.Compa
79f0: 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 43  re(columnName, C
7a00: 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d 74 2c 20  olumnName(stmt, 
7a10: 6e 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  n), StringCompar
7a20: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
7a30: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
7a40: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7a50: 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  n;..      }..   
7a60: 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20     return -1;.. 
7a70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
7a80: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
7a90: 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69 67 69  ring ColumnOrigi
7aa0: 6e 61 6c 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  nalName(SQLiteSt
7ab0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
7ac0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
7ad0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
7ae0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
7af0: 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74   len;..      ret
7b00: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
7b10: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
7b20: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
7b30: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f  umn_origin_name_
7b40: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
7b50: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
7b60: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
7b70: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
7b80: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
7b90: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
7ba0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7bb0: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
7bc0: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
7bd0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
7be0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
7bf0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
7c00: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
7c10: 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65  g ColumnDatabase
7c20: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
7c30: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
7c40: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
7c50: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
7c60: 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
7c70: 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  n;..      return
7c80: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
7c90: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7ca0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
7cb0: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69  _database_name_i
7cc0: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
7cd0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
7ce0: 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   out len), len);
7cf0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
7d00: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
7d10: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
7d20: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
7d30: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
7d40: 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ame(stmt._sqlite
7d50: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d  _stmt, index), -
7d60: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
7d70: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
7d80: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
7d90: 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61  ng ColumnTableNa
7da0: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
7db0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
7dc0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
7dd0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
7de0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
7df0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
7e00: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
7e10: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
7e20: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
7e30: 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  able_name_intero
7e40: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
7e50: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
7e60: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
7e70: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
7e80: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
7e90: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7ea0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
7eb0: 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74  _table_name(stmt
7ec0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
7ed0: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
7ee0: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
7ef0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
7f00: 69 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d  ide void ColumnM
7f10: 65 74 61 44 61 74 61 28 73 74 72 69 6e 67 20 64  etaData(string d
7f20: 61 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20  ataBase, string 
7f30: 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f  table, string co
7f40: 6c 75 6d 6e 2c 20 6f 75 74 20 73 74 72 69 6e 67  lumn, out string
7f50: 20 64 61 74 61 54 79 70 65 2c 20 6f 75 74 20 73   dataType, out s
7f60: 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71  tring collateSeq
7f70: 75 65 6e 63 65 2c 20 6f 75 74 20 62 6f 6f 6c 20  uence, out bool 
7f80: 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 62 6f 6f  notNull, out boo
7f90: 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75  l primaryKey, ou
7fa0: 74 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65  t bool autoIncre
7fb0: 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ment)..    {..  
7fc0: 20 20 20 20 49 6e 74 50 74 72 20 64 61 74 61 54      IntPtr dataT
7fd0: 79 70 65 50 74 72 3b 0d 0a 20 20 20 20 20 20 49  ypePtr;..      I
7fe0: 6e 74 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72  ntPtr collSeqPtr
7ff0: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6e 6f  ;..      int nno
8000: 74 4e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 6e  tNull;..      in
8010: 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 3b 0d 0a  t nprimaryKey;..
8020: 20 20 20 20 20 20 69 6e 74 20 6e 61 75 74 6f 49        int nautoI
8030: 6e 63 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  nc;..      int n
8040: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 64 74 4c  ;..      int dtL
8050: 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63  en;..      int c
8060: 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  sLen;....#if !SQ
8070: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
8080: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
8090: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
80a0: 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d  ite3_table_colum
80b0: 6e 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74 65 72  n_metadata_inter
80c0: 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  op(_sql, ToUTF8(
80d0: 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46  dataBase), ToUTF
80e0: 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38  8(table), ToUTF8
80f0: 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74 20 64 61  (column), out da
8100: 74 61 54 79 70 65 50 74 72 2c 20 6f 75 74 20 63  taTypePtr, out c
8110: 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75 74 20 6e  ollSeqPtr, out n
8120: 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20 6e 70 72  notNull, out npr
8130: 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20 6e 61  imaryKey, out na
8140: 75 74 6f 49 6e 63 2c 20 6f 75 74 20 64 74 4c 65  utoInc, out dtLe
8150: 6e 2c 20 6f 75 74 20 63 73 4c 65 6e 29 3b 0d 0a  n, out csLen);..
8160: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 64 74 4c  #else..      dtL
8170: 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20  en = -1;..      
8180: 63 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20  csLen = -1;.... 
8190: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
81a0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
81b0: 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d  ite3_table_colum
81c0: 6e 5f 6d 65 74 61 64 61 74 61 28 5f 73 71 6c 2c  n_metadata(_sql,
81d0: 20 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65   ToUTF8(dataBase
81e0: 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29  ), ToUTF8(table)
81f0: 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29  , ToUTF8(column)
8200: 2c 20 6f 75 74 20 64 61 74 61 54 79 70 65 50 74  , out dataTypePt
8210: 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71 50 74  r, out collSeqPt
8220: 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75 6c 6c 2c  r, out nnotNull,
8230: 20 6f 75 74 20 6e 70 72 69 6d 61 72 79 4b 65 79   out nprimaryKey
8240: 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e 63 29 3b  , out nautoInc);
8250: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
8260: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
8270: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
8280: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
8290: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
82a0: 20 20 20 20 20 64 61 74 61 54 79 70 65 20 3d 20       dataType = 
82b0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 64 61 74  UTF8ToString(dat
82c0: 61 54 79 70 65 50 74 72 2c 20 64 74 4c 65 6e 29  aTypePtr, dtLen)
82d0: 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 65  ;..      collate
82e0: 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54  Sequence = UTF8T
82f0: 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 53 65 71 50  oString(collSeqP
8300: 74 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20  tr, csLen);.... 
8310: 20 20 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28       notNull = (
8320: 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d  nnotNull == 1);.
8330: 0a 20 20 20 20 20 20 70 72 69 6d 61 72 79 4b 65  .      primaryKe
8340: 79 20 3d 20 28 6e 70 72 69 6d 61 72 79 4b 65 79  y = (nprimaryKey
8350: 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 61   == 1);..      a
8360: 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 28  utoIncrement = (
8370: 6e 61 75 74 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d  nautoInc == 1);.
8380: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
8390: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
83a0: 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65  double GetDouble
83b0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
83c0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
83d0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
83e0: 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23  double value;..#
83f0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
8400: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
8410: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73       value = Uns
8420: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8430: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
8440: 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c  double(stmt._sql
8450: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
8460: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
8470: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8480: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
8490: 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f  mn_double_intero
84a0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
84b0: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
84c0: 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d  value);..#endif.
84d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61  .      return va
84e0: 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  lue;..    }.... 
84f0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
8500: 72 69 64 65 20 69 6e 74 20 47 65 74 49 6e 74 33  ride int GetInt3
8510: 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  2(SQLiteStatemen
8520: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
8530: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
8540: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
8550: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
8560: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 73  te3_column_int(s
8570: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8580: 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d  , index);..    }
8590: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
85a0: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
85b0: 65 74 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74  etInt64(SQLiteSt
85c0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
85d0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
85e0: 0a 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75  .      long valu
85f0: 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  e;..#if !PLATFOR
8600: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
8610: 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20  RK..      value 
8620: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
8630: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
8640: 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e  lumn_int64(stmt.
8650: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
8660: 64 65 78 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  dex);..#else..  
8670: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
8680: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8690: 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74  column_int64_int
86a0: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
86b0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f  e_stmt, index, o
86c0: 75 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64  ut value);..#end
86d0: 69 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  if..      return
86e0: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a   value;..    }..
86f0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
8700: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
8710: 65 74 54 65 78 74 28 53 51 4c 69 74 65 53 74 61  etText(SQLiteSta
8720: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
8730: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
8740: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
8750: 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
8760: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  len;..      retu
8770: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
8780: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8790: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
87a0: 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28  mn_text_interop(
87b0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
87c0: 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65  t, index, out le
87d0: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
87e0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
87f0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
8800: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8810: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
8820: 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ext(stmt._sqlite
8830: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d  _stmt, index), -
8840: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
8850: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
8860: 61 6c 20 6f 76 65 72 72 69 64 65 20 44 61 74 65  al override Date
8870: 54 69 6d 65 20 47 65 74 44 61 74 65 54 69 6d 65  Time GetDateTime
8880: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
8890: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
88a0: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
88b0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
88c0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
88d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44        return ToD
88e0: 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61  ateTime(UnsafeNa
88f0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
8900: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f  te3_column_text_
8910: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
8920: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
8930: 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29  , out len), len)
8940: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
8950: 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
8960: 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e(UnsafeNativeMe
8970: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
8980: 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f  lumn_text(stmt._
8990: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
89a0: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
89b0: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
89c0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
89d0: 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73 28  e long GetBytes(
89e0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
89f0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
8a00: 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74   int nDataOffset
8a10: 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20  , byte[] bDest, 
8a20: 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20  int nStart, int 
8a30: 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d  nLength)..    {.
8a40: 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20  .      int nlen 
8a50: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
8a60: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
8a70: 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e  lumn_bytes(stmt.
8a80: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
8a90: 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  dex);....      /
8aa0: 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74  / If no destinat
8ab0: 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75  ion buffer, retu
8ac0: 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64  rn the size need
8ad0: 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62  ed...      if (b
8ae0: 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  Dest == null) re
8af0: 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20  turn nlen;....  
8b00: 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20      int nCopied 
8b10: 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  = nLength;....  
8b20: 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
8b30: 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74  + nStart > bDest
8b40: 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64  .Length) nCopied
8b50: 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20   = bDest.Length 
8b60: 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20  - nStart;..     
8b70: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
8b80: 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65  DataOffset > nle
8b90: 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65  n) nCopied = nle
8ba0: 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b  n - nDataOffset;
8bb0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
8bc0: 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20  opied > 0)..    
8bd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
8be0: 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65  Ptr ptr = Unsafe
8bf0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
8c00: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f  lite3_column_blo
8c10: 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  b(stmt._sqlite_s
8c20: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a  tmt, index);....
8c30: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
8c40: 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70 74  Copy((IntPtr)(pt
8c50: 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44  r.ToInt64() + nD
8c60: 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73  ataOffset), bDes
8c70: 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69  t, nStart, nCopi
8c80: 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ed);..      }.. 
8c90: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
8ca0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70   {..        nCop
8cb0: 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ied = 0;..      
8cc0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
8cd0: 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20  n nCopied;..    
8ce0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
8cf0: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
8d00: 47 65 74 43 68 61 72 73 28 53 51 4c 69 74 65 53  GetChars(SQLiteS
8d10: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
8d20: 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44  nt index, int nD
8d30: 61 74 61 4f 66 66 73 65 74 2c 20 63 68 61 72 5b  ataOffset, char[
8d40: 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74  ] bDest, int nSt
8d50: 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68  art, int nLength
8d60: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8d70: 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20  int nlen;..     
8d80: 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e   int nCopied = n
8d90: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
8da0: 20 73 74 72 69 6e 67 20 73 74 72 20 3d 20 47 65   string str = Ge
8db0: 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65  tText(stmt, inde
8dc0: 78 29 3b 0d 0a 20 20 20 20 20 20 6e 6c 65 6e 20  x);..      nlen 
8dd0: 3d 20 73 74 72 2e 4c 65 6e 67 74 68 3b 0d 0a 0d  = str.Length;...
8de0: 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74  .      if (bDest
8df0: 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
8e00: 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20   nlen;....      
8e10: 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53  if (nCopied + nS
8e20: 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e  tart > bDest.Len
8e30: 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62  gth) nCopied = b
8e40: 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53  Dest.Length - nS
8e50: 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20  tart;..      if 
8e60: 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61  (nCopied + nData
8e70: 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e  Offset > nlen) n
8e80: 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20  Copied = nlen - 
8e90: 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a  nDataOffset;....
8ea0: 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
8eb0: 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  d > 0)..        
8ec0: 73 74 72 2e 43 6f 70 79 54 6f 28 6e 44 61 74 61  str.CopyTo(nData
8ed0: 4f 66 66 73 65 74 2c 20 62 44 65 73 74 2c 20 6e  Offset, bDest, n
8ee0: 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b  Start, nCopied);
8ef0: 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 6e 43 6f  ..      else nCo
8f00: 70 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20  pied = 0;....   
8f10: 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65     return nCopie
8f20: 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  d;..    }....   
8f30: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
8f40: 64 65 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53  de bool IsNull(S
8f50: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
8f60: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
8f70: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
8f80: 74 75 72 6e 20 28 43 6f 6c 75 6d 6e 41 66 66 69  turn (ColumnAffi
8f90: 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78  nity(stmt, index
8fa0: 29 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74  ) == TypeAffinit
8fb0: 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d  y.Null);..    }.
8fc0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
8fd0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 41 67 67  override int Agg
8fe0: 72 65 67 61 74 65 43 6f 75 6e 74 28 49 6e 74 50  regateCount(IntP
8ff0: 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20  tr context)..   
9000: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
9010: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
9020: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67  hods.sqlite3_agg
9030: 72 65 67 61 74 65 5f 63 6f 75 6e 74 28 63 6f 6e  regate_count(con
9040: 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  text);..    }...
9050: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
9060: 65 72 72 69 64 65 20 76 6f 69 64 20 43 72 65 61  erride void Crea
9070: 74 65 46 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e  teFunction(strin
9080: 67 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69  g strFunction, i
9090: 6e 74 20 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e  nt nArgs, bool n
90a0: 65 65 64 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69  eedCollSeq, SQLi
90b0: 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c  teCallback func,
90c0: 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20   SQLiteCallback 
90d0: 66 75 6e 63 73 74 65 70 2c 20 53 51 4c 69 74 65  funcstep, SQLite
90e0: 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75  FinalCallback fu
90f0: 6e 63 66 69 6e 61 6c 29 0d 0a 20 20 20 20 7b 0d  ncfinal)..    {.
9100: 0a 20 20 20 20 20 20 69 6e 74 20 6e 3b 0d 0a 0d  .      int n;...
9110: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
9120: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d  NDARD..      n =
9130: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
9140: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
9150: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74  ate_function_int
9160: 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46  erop(_sql, ToUTF
9170: 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
9180: 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72  nArgs, 4, IntPtr
9190: 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
91a0: 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
91b0: 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d  , (needCollSeq =
91c0: 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29  = true) ? 1 : 0)
91d0: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d  ;..      if (n =
91e0: 3d 20 30 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e  = 0) n = UnsafeN
91f0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
9200: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
9210: 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71  tion_interop(_sq
9220: 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
9230: 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31  ction), nArgs, 1
9240: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
9250: 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
9260: 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43  uncfinal, (needC
9270: 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20  ollSeq == true) 
9280: 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c 73 65  ? 1 : 0);..#else
9290: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
92a0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
92b0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
92c0: 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f  unction(_sql, To
92d0: 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e  UTF8(strFunction
92e0: 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74  ), nArgs, 4, Int
92f0: 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20  Ptr.Zero, func, 
9300: 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69  funcstep, funcfi
9310: 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  nal);..      if 
9320: 28 6e 20 3d 3d 20 30 29 20 6e 20 3d 20 55 6e 73  (n == 0) n = Uns
9330: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9340: 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
9350: 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54  function(_sql, T
9360: 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f  oUTF8(strFunctio
9370: 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e  n), nArgs, 1, In
9380: 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c  tPtr.Zero, func,
9390: 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66   funcstep, funcf
93a0: 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  inal);..#endif..
93b0: 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29        if (n > 0)
93c0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
93d0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51  eException(n, SQ
93e0: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29  LiteLastError())
93f0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9400: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
9410: 65 20 76 6f 69 64 20 43 72 65 61 74 65 43 6f 6c  e void CreateCol
9420: 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74  lation(string st
9430: 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c 69  rCollation, SQLi
9440: 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63  teCollation func
9450: 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f  , SQLiteCollatio
9460: 6e 20 66 75 6e 63 31 36 29 0d 0a 20 20 20 20 7b  n func16)..    {
9470: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20  ..      int n = 
9480: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9490: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
94a0: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71  te_collation(_sq
94b0: 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c  l, ToUTF8(strCol
94c0: 6c 61 74 69 6f 6e 29 2c 20 32 2c 20 49 6e 74 50  lation), 2, IntP
94d0: 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 31 36 29  tr.Zero, func16)
94e0: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d  ;..      if (n =
94f0: 3d 20 30 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e  = 0) n = UnsafeN
9500: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
9510: 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
9520: 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54  ation(_sql, ToUT
9530: 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29  F8(strCollation)
9540: 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 1, IntPtr.Zero
9550: 2c 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 20 20  , func);..      
9560: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
9570: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
9580: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
9590: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
95a0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
95b0: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
95c0: 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f  ContextCollateCo
95d0: 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45  mpare(CollationE
95e0: 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c  ncodingEnum enc,
95f0: 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c   IntPtr context,
9600: 20 73 74 72 69 6e 67 20 73 31 2c 20 73 74 72 69   string s1, stri
9610: 6e 67 20 73 32 29 0d 0a 20 20 20 20 7b 0d 0a 23  ng s2)..    {..#
9620: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
9630: 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b  ARD..      byte[
9640: 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74  ] b1;..      byt
9650: 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53  e[] b2;..      S
9660: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
9670: 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20  ing converter = 
9680: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73  null;....      s
9690: 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20  witch (enc)..   
96a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61     {..        ca
96b0: 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
96c0: 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a  dingEnum.UTF8:..
96d0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
96e0: 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
96f0: 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b  t.Encoding.UTF8;
9700: 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
9710: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  k;..        case
9720: 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
9730: 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d  ngEnum.UTF16LE:.
9740: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
9750: 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
9760: 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63  xt.Encoding.Unic
9770: 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ode;..          
9780: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
9790: 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
97a0: 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36  codingEnum.UTF16
97b0: 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  BE:..          c
97c0: 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
97d0: 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
97e0: 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65  BigEndianUnicode
97f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
9800: 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ak;..      }....
9810: 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65        b1 = conve
9820: 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 73 31  rter.GetBytes(s1
9830: 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63  );..      b2 = c
9840: 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
9850: 73 28 73 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  s(s2);....      
9860: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
9870: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9880: 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63  e3_context_collc
9890: 6f 6d 70 61 72 65 28 63 6f 6e 74 65 78 74 2c 20  ompare(context, 
98a0: 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62  b1, b1.Length, b
98b0: 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a  2, b2.Length);..
98c0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
98d0: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
98e0: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
98f0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
9900: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
9910: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f   override int Co
9920: 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70  ntextCollateComp
9930: 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  are(CollationEnc
9940: 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49  odingEnum enc, I
9950: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 63  ntPtr context, c
9960: 68 61 72 5b 5d 20 63 31 2c 20 63 68 61 72 5b 5d  har[] c1, char[]
9970: 20 63 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66   c2)..    {..#if
9980: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
9990: 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  D..      byte[] 
99a0: 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b  b1;..      byte[
99b0: 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73  ] b2;..      Sys
99c0: 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
99d0: 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75  g converter = nu
99e0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69  ll;....      swi
99f0: 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20  tch (enc)..     
9a00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65   {..        case
9a10: 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
9a20: 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20  ngEnum.UTF8:..  
9a30: 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
9a40: 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
9a50: 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a  Encoding.UTF8;..
9a60: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
9a70: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
9a80: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
9a90: 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20  Enum.UTF16LE:.. 
9aa0: 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
9ab0: 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
9ac0: 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64  .Encoding.Unicod
9ad0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  e;..          br
9ae0: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  eak;..        ca
9af0: 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
9b00: 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45  dingEnum.UTF16BE
9b10: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
9b20: 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
9b30: 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69  Text.Encoding.Bi
9b40: 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d  gEndianUnicode;.
9b50: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
9b60: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
9b70: 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74      b1 = convert
9b80: 65 72 2e 47 65 74 42 79 74 65 73 28 63 31 29 3b  er.GetBytes(c1);
9b90: 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e  ..      b2 = con
9ba0: 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28  verter.GetBytes(
9bb0: 63 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  c2);....      re
9bc0: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
9bd0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9be0: 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d  _context_collcom
9bf0: 70 61 72 65 28 63 6f 6e 74 65 78 74 2c 20 62 31  pare(context, b1
9c00: 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c  , b1.Length, b2,
9c10: 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65   b2.Length);..#e
9c20: 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
9c30: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
9c40: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
9c50: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
9c60: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
9c70: 76 65 72 72 69 64 65 20 43 6f 6c 6c 61 74 69 6f  verride Collatio
9c80: 6e 53 65 71 75 65 6e 63 65 20 47 65 74 43 6f 6c  nSequence GetCol
9c90: 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 53  lationSequence(S
9ca0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75  QLiteFunction fu
9cb0: 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65  nc, IntPtr conte
9cc0: 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  xt)..    {..#if 
9cd0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
9ce0: 0d 0a 20 20 20 20 20 20 43 6f 6c 6c 61 74 69 6f  ..      Collatio
9cf0: 6e 53 65 71 75 65 6e 63 65 20 73 65 71 20 3d 20  nSequence seq = 
9d00: 6e 65 77 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71  new CollationSeq
9d10: 75 65 6e 63 65 28 29 3b 0d 0a 20 20 20 20 20 20  uence();..      
9d20: 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  int len;..      
9d30: 69 6e 74 20 74 79 70 65 3b 0d 0a 20 20 20 20 20  int type;..     
9d40: 20 69 6e 74 20 65 6e 63 3b 0d 0a 20 20 20 20 20   int enc;..     
9d50: 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61   IntPtr p = Unsa
9d60: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9d70: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f  sqlite3_context_
9d80: 63 6f 6c 6c 73 65 71 28 63 6f 6e 74 65 78 74 2c  collseq(context,
9d90: 20 6f 75 74 20 74 79 70 65 2c 20 6f 75 74 20 65   out type, out e
9da0: 6e 63 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d 0a 0d  nc, out len);...
9db0: 0a 20 20 20 20 20 20 69 66 20 28 70 20 21 3d 20  .      if (p != 
9dc0: 6e 75 6c 6c 29 20 73 65 71 2e 4e 61 6d 65 20 3d  null) seq.Name =
9dd0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c   UTF8ToString(p,
9de0: 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 73 65   len);..      se
9df0: 71 2e 54 79 70 65 20 3d 20 28 43 6f 6c 6c 61 74  q.Type = (Collat
9e00: 69 6f 6e 54 79 70 65 45 6e 75 6d 29 74 79 70 65  ionTypeEnum)type
9e10: 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 5f 66 75  ;..      seq._fu
9e20: 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a 20 20 20 20  nc = func;..    
9e30: 20 20 73 65 71 2e 45 6e 63 6f 64 69 6e 67 20 3d    seq.Encoding =
9e40: 20 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64   (CollationEncod
9e50: 69 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a  ingEnum)enc;....
9e60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 65 71        return seq
9e70: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
9e80: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
9e90: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
9ea0: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
9eb0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
9ec0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
9ed0: 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 42  g GetParamValueB
9ee0: 79 74 65 73 28 49 6e 74 50 74 72 20 70 2c 20 69  ytes(IntPtr p, i
9ef0: 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20  nt nDataOffset, 
9f00: 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e  byte[] bDest, in
9f10: 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c  t nStart, int nL
9f20: 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20  ength)..    {.. 
9f30: 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20       int nlen = 
9f40: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9f50: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
9f60: 65 5f 62 79 74 65 73 28 70 29 3b 0d 0a 0d 0a 20  e_bytes(p);.... 
9f70: 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65       // If no de
9f80: 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72  stination buffer
9f90: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a  , return the siz
9fa0: 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20  e needed...     
9fb0: 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75   if (bDest == nu
9fc0: 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b  ll) return nlen;
9fd0: 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43  ....      int nC
9fe0: 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b  opied = nLength;
9ff0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
a000: 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e  opied + nStart >
a010: 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e   bDest.Length) n
a020: 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c  Copied = bDest.L
a030: 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d  ength - nStart;.
a040: 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
a050: 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74  ed + nDataOffset
a060: 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64   > nlen) nCopied
a070: 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f   = nlen - nDataO
a080: 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ffset;....      
a090: 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29  if (nCopied > 0)
a0a0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
a0b0: 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20     IntPtr ptr = 
a0c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a0d0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
a0e0: 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20  e_blob(p);....  
a0f0: 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f        Marshal.Co
a100: 70 79 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e  py((IntPtr)(ptr.
a110: 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74  ToInt64() + nDat
a120: 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c  aOffset), bDest,
a130: 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64   nStart, nCopied
a140: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
a150: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b     else..      {
a160: 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65  ..        nCopie
a170: 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d  d = 0;..      }.
a180: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
a190: 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d  nCopied;..    }.
a1a0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
a1b0: 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20  override double 
a1c0: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 44 6f 75  GetParamValueDou
a1d0: 62 6c 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d  ble(IntPtr ptr).
a1e0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f  .    {..      do
a1f0: 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66  uble value;..#if
a200: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
a210: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
a220: 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66     value = Unsaf
a230: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a240: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75  qlite3_value_dou
a250: 62 6c 65 28 70 74 72 29 3b 0d 0a 23 65 6c 73 65  ble(ptr);..#else
a260: 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
a270: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a280: 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65  te3_value_double
a290: 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f 75  _interop(ptr, ou
a2a0: 74 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69  t value);..#endi
a2b0: 66 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  f..      return 
a2c0: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  value;..    }...
a2d0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
a2e0: 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 50 61  erride int GetPa
a2f0: 72 61 6d 56 61 6c 75 65 49 6e 74 33 32 28 49 6e  ramValueInt32(In
a300: 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
a310: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
a320: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
a330: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
a340: 5f 69 6e 74 28 70 74 72 29 3b 0d 0a 20 20 20 20  _int(ptr);..    
a350: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
a360: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
a370: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74  GetParamValueInt
a380: 36 34 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a  64(IntPtr ptr)..
a390: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74      {..      Int
a3a0: 36 34 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21  64 value;..#if !
a3b0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
a3c0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
a3d0: 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e   value = UnsafeN
a3e0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a3f0: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34  ite3_value_int64
a400: 28 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  (ptr);..#else.. 
a410: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
a420: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a430: 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74  _value_int64_int
a440: 65 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 76 61  erop(ptr, out va
a450: 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lue);..#endif.. 
a460: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
a470: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
a480: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a490: 64 65 20 73 74 72 69 6e 67 20 47 65 74 50 61 72  de string GetPar
a4a0: 61 6d 56 61 6c 75 65 54 65 78 74 28 49 6e 74 50  amValueText(IntP
a4b0: 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a  tr ptr)..    {..
a4c0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
a4d0: 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
a4e0: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  len;..      retu
a4f0: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
a500: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a510: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
a520: 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 70  e_text_interop(p
a530: 74 72 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  tr, out len), le
a540: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
a550: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
a560: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
a570: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
a580: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 74 72  3_value_text(ptr
a590: 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  ), -1);..#endif.
a5a0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
a5b0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
a5c0: 54 79 70 65 41 66 66 69 6e 69 74 79 20 47 65 74  TypeAffinity Get
a5d0: 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28 49  ParamValueType(I
a5e0: 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
a5f0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
a600: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a610: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
a620: 65 5f 74 79 70 65 28 70 74 72 29 3b 0d 0a 20 20  e_type(ptr);..  
a630: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
a640: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
a650: 64 20 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e 74  d ReturnBlob(Int
a660: 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 62 79 74  Ptr context, byt
a670: 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  e[] value)..    
a680: 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
a690: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a6a0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62  ite3_result_blob
a6b0: 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 2c  (context, value,
a6c0: 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20 28   value.Length, (
a6d0: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
a6e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
a6f0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
a700: 69 64 20 52 65 74 75 72 6e 44 6f 75 62 6c 65 28  id ReturnDouble(
a710: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
a720: 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20  double value).. 
a730: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
a740: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
a750: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61  WORK..      Unsa
a760: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a770: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64  sqlite3_result_d
a780: 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 76  ouble(context, v
a790: 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
a7a0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
a7b0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a7c0: 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f 69  _result_double_i
a7d0: 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20  nterop(context, 
a7e0: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  ref value);..#en
a7f0: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
a800: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
a810: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 45  ide void ReturnE
a820: 72 72 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e 74  rror(IntPtr cont
a830: 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  ext, string valu
a840: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
a850: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
a860: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
a870: 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78  ult_error(contex
a880: 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29  t, ToUTF8(value)
a890: 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 29 3b  , value.Length);
a8a0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
a8b0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
a8c0: 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 33   void ReturnInt3
a8d0: 32 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  2(IntPtr context
a8e0: 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20  , int value)..  
a8f0: 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
a900: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
a910: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
a920: 74 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  t(context, value
a930: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
a940: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a950: 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e  de void ReturnIn
a960: 74 36 34 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  t64(IntPtr conte
a970: 78 74 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d  xt, long value).
a980: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41  .    {..#if !PLA
a990: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
a9a0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e  MEWORK..      Un
a9b0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a9c0: 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
a9d0: 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20  _int64(context, 
a9e0: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
a9f0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
aa00: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
aa10: 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69  3_result_int64_i
aa20: 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20  nterop(context, 
aa30: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  ref value);..#en
aa40: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
aa50: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
aa60: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 4e  ide void ReturnN
aa70: 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ull(IntPtr conte
aa80: 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  xt)..    {..    
aa90: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
aaa0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
aab0: 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78  sult_null(contex
aac0: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
aad0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
aae0: 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 54  ide void ReturnT
aaf0: 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ext(IntPtr conte
ab00: 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  xt, string value
ab10: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
ab20: 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
ab30: 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  8(value);..     
ab40: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ab50: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
ab60: 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74  ult_text(context
ab70: 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c  , ToUTF8(value),
ab80: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28   b.Length - 1, (
ab90: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
aba0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
abb0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 49 6e  rnal override In
abc0: 74 50 74 72 20 41 67 67 72 65 67 61 74 65 43 6f  tPtr AggregateCo
abd0: 6e 74 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e  ntext(IntPtr con
abe0: 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  text)..    {..  
abf0: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
ac00: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
ac10: 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65  qlite3_aggregate
ac20: 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74  _context(context
ac30: 2c 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  , 1);..    }....
ac40: 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20      /// Enables 
ac50: 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65  or disabled exte
ac60: 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64 65  nded result code
ac70: 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 53 51  s returned by SQ
ac80: 4c 69 74 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e  Lite..    intern
ac90: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
aca0: 20 53 65 74 45 78 74 65 6e 64 65 64 52 65 73 75   SetExtendedResu
acb0: 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f 6e  ltCodes(bool bOn
acc0: 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  Off)..    {..   
acd0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
ace0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
acf0: 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63  xtended_result_c
ad00: 6f 64 65 73 28 5f 73 71 6c 2c 20 28 62 4f 6e 4f  odes(_sql, (bOnO
ad10: 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a  ff ? -1 : 0));..
ad20: 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47      }..    /// G
ad30: 65 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c  ets the last SQL
ad40: 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a  ite error code..
ad50: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
ad60: 72 72 69 64 65 20 69 6e 74 20 52 65 73 75 6c 74  rride int Result
ad70: 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Code()..    {.. 
ad80: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
ad90: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
ada0: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
adb0: 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20  _sql);..    }.. 
adc0: 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20     /// Gets the 
add0: 6c 61 73 74 20 53 51 4c 69 74 65 20 65 78 74 65  last SQLite exte
ade0: 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65 0d  nded error code.
adf0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
ae00: 65 72 72 69 64 65 20 69 6e 74 20 45 78 74 65 6e  erride int Exten
ae10: 64 65 64 52 65 73 75 6c 74 43 6f 64 65 28 29 0d  dedResultCode().
ae20: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
ae30: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
ae40: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ae50: 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64  _extended_errcod
ae60: 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d  e(_sql);..    }.
ae70: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20 61  ...    /// Add a
ae80: 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76 69 61   log message via
ae90: 20 74 68 65 20 53 51 4c 69 74 65 20 73 71 6c 69   the SQLite sqli
aea0: 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63  te3_log interfac
aeb0: 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  e...    internal
aec0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c   override void L
aed0: 6f 67 4d 65 73 73 61 67 65 28 69 6e 74 20 69 45  ogMessage(int iE
aee0: 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a  rrCode, string z
aef0: 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d  Message)..    {.
af00: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
af10: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
af20: 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f 64 65 2c  e3_log(iErrCode,
af30: 20 54 6f 55 54 46 38 28 7a 4d 65 73 73 61 67 65   ToUTF8(zMessage
af40: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69  ));..    }....#i
af50: 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 0d  f INTEROP_CODEC.
af60: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
af70: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 50  erride void SetP
af80: 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 70  assword(byte[] p
af90: 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20  asswordBytes).. 
afa0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
afb0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
afc0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
afd0: 6b 65 79 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f  key(_sql, passwo
afe0: 72 64 42 79 74 65 73 2c 20 70 61 73 73 77 6f 72  rdBytes, passwor
aff0: 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d  dBytes.Length);.
b000: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30  .      if (n > 0
b010: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
b020: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53  teException(n, S
b030: 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29  QLiteLastError()
b040: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
b050: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
b060: 64 65 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61  de void ChangePa
b070: 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65  ssword(byte[] ne
b080: 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d  wPasswordBytes).
b090: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
b0a0: 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  t n = UnsafeNati
b0b0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
b0c0: 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65  3_rekey(_sql, ne
b0d0: 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20  wPasswordBytes, 
b0e0: 28 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65  (newPasswordByte
b0f0: 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a  s == null) ? 0 :
b100: 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65   newPasswordByte
b110: 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20  s.Length);..    
b120: 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72    if (n > 0) thr
b130: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
b140: 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65  eption(n, SQLite
b150: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
b160: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
b170: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
b180: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 55 70  rride void SetUp
b190: 64 61 74 65 48 6f 6f 6b 28 53 51 4c 69 74 65 55  dateHook(SQLiteU
b1a0: 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 66 75  pdateCallback fu
b1b0: 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nc)..    {..    
b1c0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
b1d0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 75 70  thods.sqlite3_up
b1e0: 64 61 74 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20  date_hook(_sql, 
b1f0: 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
b200: 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
b210: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
b220: 69 64 65 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d  ide void SetComm
b230: 69 74 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d  itHook(SQLiteCom
b240: 6d 69 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  mitCallback func
b250: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
b260: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
b270: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 6d  ods.sqlite3_comm
b280: 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75  it_hook(_sql, fu
b290: 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
b2a0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
b2b0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
b2c0: 65 20 76 6f 69 64 20 53 65 74 54 72 61 63 65 43  e void SetTraceC
b2d0: 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 54 72  allback(SQLiteTr
b2e0: 61 63 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  aceCallback func
b2f0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
b300: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
b310: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 72 61 63  ods.sqlite3_trac
b320: 65 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e  e(_sql, func, In
b330: 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
b340: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
b350: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
b360: 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b   SetRollbackHook
b370: 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63 6b 43  (SQLiteRollbackC
b380: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
b390: 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
b3a0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b3b0: 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b  sqlite3_rollback
b3c0: 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63  _hook(_sql, func
b3d0: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
b3e0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
b3f0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
b400: 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74 68 65 20   /// Allows the 
b410: 73 65 74 74 69 6e 67 20 6f 66 20 61 20 6c 6f 67  setting of a log
b420: 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 6e  ging callback in
b430: 76 6f 6b 65 64 20 62 79 20 53 51 4c 69 74 65 20  voked by SQLite 
b440: 77 68 65 6e 20 61 0d 0a 20 20 20 20 2f 2f 2f 20  when a..    /// 
b450: 6c 6f 67 20 65 76 65 6e 74 20 6f 63 63 75 72 73  log event occurs
b460: 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20 63 61 6c 6c  .  Only one call
b470: 62 61 63 6b 20 6d 61 79 20 62 65 20 73 65 74 2e  back may be set.
b480: 20 20 49 66 20 4e 55 4c 4c 20 69 73 20 70 61 73    If NULL is pas
b490: 73 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74 68  sed,..    /// th
b4a0: 65 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61  e logging callba
b4b0: 63 6b 20 69 73 20 75 6e 72 65 67 69 73 74 65 72  ck is unregister
b4c0: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ed...    /// </s
b4d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
b4e0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75   <param name="fu
b4f0: 6e 63 22 3e 54 68 65 20 63 61 6c 6c 62 61 63 6b  nc">The callback
b500: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76   function to inv
b510: 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  oke.</param>..  
b520: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
b530: 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74 20  eturns a result 
b540: 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  code</returns>..
b550: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
b560: 72 72 69 64 65 20 69 6e 74 20 53 65 74 4c 6f 67  rride int SetLog
b570: 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c  Callback(SQLiteL
b580: 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ogCallback func)
b590: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
b5a0: 20 69 6e 74 20 72 63 20 3d 20 55 6e 73 61 66 65   int rc = Unsafe
b5b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b5c0: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 0d 0a 20  lite3_config(.. 
b5d0: 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
b5e0: 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
b5f0: 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
b600: 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20 28 49 6e  G_LOG, func, (In
b610: 74 50 74 72 29 30 29 3b 0d 0a 0d 0a 20 20 20 20  tPtr)0);....    
b620: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a      return rc;..
b630: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
b640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b6a0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
b6b0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74  >..    /// Creat
b6c0: 65 73 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20  es a new SQLite 
b6d0: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 62 61  backup object ba
b6e0: 73 65 64 20 6f 6e 20 74 68 65 20 70 72 6f 76 69  sed on the provi
b6f0: 64 65 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d  ded destination.
b700: 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73  .    /// databas
b710: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
b720: 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
b730: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
b740: 20 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f   the one..    //
b750: 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  / associated wit
b760: 68 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20  h this object.  
b770: 54 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 64  The source and d
b780: 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62  estination datab
b790: 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e  ase..    /// con
b7a0: 6e 65 63 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20  nections cannot 
b7b0: 62 65 20 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20  be the same...  
b7c0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
b7d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
b7e0: 20 6e 61 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e   name="destCnn">
b7f0: 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  The destination 
b800: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
b810: 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ion.</param>..  
b820: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
b830: 65 3d 22 64 65 73 74 4e 61 6d 65 22 3e 54 68 65  e="destName">The
b840: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
b850: 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72  abase name.</par
b860: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
b870: 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65  ram name="source
b880: 4e 61 6d 65 22 3e 54 68 65 20 73 6f 75 72 63 65  Name">The source
b890: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c   database name.<
b8a0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
b8b0: 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 65   <returns>The ne
b8c0: 77 6c 79 20 63 72 65 61 74 65 64 20 62 61 63 6b  wly created back
b8d0: 75 70 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75  up object.</retu
b8e0: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
b8f0: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
b900: 74 65 42 61 63 6b 75 70 20 49 6e 69 74 69 61 6c  teBackup Initial
b910: 69 7a 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  izeBackup(..    
b920: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
b930: 74 69 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20  tion destCnn,.. 
b940: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
b950: 73 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  stName,..       
b960: 20 73 74 72 69 6e 67 20 73 6f 75 72 63 65 4e 61   string sourceNa
b970: 6d 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  me..        ).. 
b980: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
b990: 20 28 64 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c   (destCnn == nul
b9a0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
b9b0: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
b9c0: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
b9d0: 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20  "destCnn");.... 
b9e0: 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74 4e         if (destN
b9f0: 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame == null)..  
ba00: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
ba10: 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
ba20: 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74 4e  Exception("destN
ba30: 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ame");....      
ba40: 20 20 69 66 20 28 73 6f 75 72 63 65 4e 61 6d 65    if (sourceName
ba50: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
ba60: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
ba70: 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
ba80: 65 70 74 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61  eption("sourceNa
ba90: 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me");....       
baa0: 20 53 51 4c 69 74 65 33 20 64 65 73 74 53 71 6c   SQLite3 destSql
bab0: 69 74 65 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f  ite3 = destCnn._
bac0: 73 71 6c 20 61 73 20 53 51 4c 69 74 65 33 3b 0d  sql as SQLite3;.
bad0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  ...        if (d
bae0: 65 73 74 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75  estSqlite3 == nu
baf0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
bb00: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
bb10: 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  entException(.. 
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
bb30: 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e  Destination conn
bb40: 65 63 74 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72  ection has no wr
bb50: 61 70 70 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20  apper.",..      
bb60: 20 20 20 20 20 20 20 20 20 20 22 64 65 73 74 43            "destC
bb70: 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nn");....       
bb80: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
bb90: 6e 48 61 6e 64 6c 65 20 64 65 73 74 48 61 6e 64  nHandle destHand
bba0: 6c 65 20 3d 20 64 65 73 74 53 71 6c 69 74 65 33  le = destSqlite3
bbb0: 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20  ._sql;....      
bbc0: 20 20 69 66 20 28 64 65 73 74 48 61 6e 64 6c 65    if (destHandle
bbd0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
bbe0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
bbf0: 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69   ArgumentExcepti
bc00: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
bc10: 20 20 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f       "Destinatio
bc20: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73  n connection has
bc30: 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
bc40: 6c 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  le.",..         
bc50: 20 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22         "destCnn"
bc60: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
bc70: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
bc80: 6e 64 6c 65 20 73 6f 75 72 63 65 48 61 6e 64 6c  ndle sourceHandl
bc90: 65 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20  e = _sql;....   
bca0: 20 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 48       if (sourceH
bcb0: 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
bcc0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
bcd0: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
bce0: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
bcf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bd00: 20 20 22 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63    "Source connec
bd10: 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61  tion has an inva
bd20: 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
bd30: 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d  ..        byte[]
bd40: 20 7a 44 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55   zDestName = ToU
bd50: 54 46 38 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a  TF8(destName);..
bd60: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a          byte[] z
bd70: 53 6f 75 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55  SourceName = ToU
bd80: 54 46 38 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b  TF8(sourceName);
bd90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
bda0: 74 72 20 62 61 63 6b 75 70 20 3d 20 55 6e 73 61  tr backup = Unsa
bdb0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
bdc0: 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 69  sqlite3_backup_i
bdd0: 6e 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  nit(..          
bde0: 20 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44    destHandle, zD
bdf0: 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48  estName, sourceH
be00: 61 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65 4e 61  andle, zSourceNa
be10: 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
be20: 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e  if (backup == In
be30: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
be40: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
be50: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
be60: 6e 28 52 65 73 75 6c 74 43 6f 64 65 28 29 2c 20  n(ResultCode(), 
be70: 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28  SQLiteLastError(
be80: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ));....        r
be90: 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65  eturn new SQLite
bea0: 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
beb0: 20 20 20 20 20 74 68 69 73 2c 20 62 61 63 6b 75       this, backu
bec0: 70 2c 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a  p, destHandle, z
bed0: 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65  DestName, source
bee0: 48 61 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65 4e  Handle, zSourceN
bef0: 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ame);..    }....
bf00: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
bf10: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 70 69 65  >..    /// Copie
bf20: 73 20 75 70 20 74 6f 20 4e 20 70 61 67 65 73 20  s up to N pages 
bf30: 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 20  from the source 
bf40: 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20  database to the 
bf50: 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20  destination..   
bf60: 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 61 73   /// database as
bf70: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
bf80: 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b  e specified back
bf90: 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20  up object...    
bfa0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
bfb0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
bfc0: 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65  ame="backup">The
bfd0: 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74   backup object t
bfe0: 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  o use.</param>..
bff0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
c000: 61 6d 65 3d 22 6e 50 61 67 65 22 3e 0d 0a 20 20  ame="nPage">..  
c010: 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
c020: 20 6f 66 20 70 61 67 65 73 20 74 6f 20 63 6f 70   of pages to cop
c030: 79 2c 20 6e 65 67 61 74 69 76 65 20 74 6f 20 63  y, negative to c
c040: 6f 70 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e  opy all remainin
c050: 67 20 70 61 67 65 73 2e 0d 0a 20 20 20 20 2f 2f  g pages...    //
c060: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
c070: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
c080: 22 72 65 74 72 79 22 3e 0d 0a 20 20 20 20 2f 2f  "retry">..    //
c090: 2f 20 53 65 74 20 74 6f 20 74 72 75 65 20 69 66  / Set to true if
c0a0: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6e   the operation n
c0b0: 65 65 64 73 20 74 6f 20 62 65 20 72 65 74 72 69  eeds to be retri
c0c0: 65 64 20 64 75 65 20 74 6f 20 64 61 74 61 62 61  ed due to databa
c0d0: 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 63 6b  se..    /// lock
c0e0: 69 6e 67 20 69 73 73 75 65 73 3b 20 6f 74 68 65  ing issues; othe
c0f0: 72 77 69 73 65 2c 20 73 65 74 20 74 6f 20 66 61  rwise, set to fa
c100: 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  lse...    /// </
c110: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
c120: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
c130: 2f 2f 20 54 72 75 65 20 69 66 20 74 68 65 72 65  // True if there
c140: 20 61 72 65 20 6d 6f 72 65 20 70 61 67 65 73 20   are more pages 
c150: 74 6f 20 62 65 20 63 6f 70 69 65 64 2c 20 66 61  to be copied, fa
c160: 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a  lse otherwise...
c170: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
c180: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
c190: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53   override bool S
c1a0: 74 65 70 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  tepBackup(..    
c1b0: 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
c1c0: 20 62 61 63 6b 75 70 2c 0d 0a 20 20 20 20 20 20   backup,..      
c1d0: 20 20 69 6e 74 20 6e 50 61 67 65 2c 0d 0a 20 20    int nPage,..  
c1e0: 20 20 20 20 20 20 6f 75 74 20 62 6f 6f 6c 20 72        out bool r
c1f0: 65 74 72 79 0d 0a 20 20 20 20 20 20 20 20 29 0d  etry..        ).
c200: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
c210: 72 65 74 72 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  retry = false;..
c220: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61  ..        if (ba
c230: 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ckup == null).. 
c240: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
c250: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
c260: 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b  lException("back
c270: 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  up");....       
c280: 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
c290: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63  dle handle = bac
c2a0: 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b  kup._sqlite_back
c2b0: 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  up;....        i
c2c0: 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  f (handle == nul
c2d0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
c2e0: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
c2f0: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
c300: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
c310: 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
c320: 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
c330: 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
c340: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20  ..        int n 
c350: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
c360: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
c370: 63 6b 75 70 5f 73 74 65 70 28 68 61 6e 64 6c 65  ckup_step(handle
c380: 2c 20 6e 50 61 67 65 29 3b 0d 0a 20 20 20 20 20  , nPage);..     
c390: 20 20 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52     backup._stepR
c3a0: 65 73 75 6c 74 20 3d 20 6e 3b 20 2f 2a 20 4e 4f  esult = n; /* NO
c3b0: 54 45 3a 20 53 61 76 65 20 66 6f 72 20 75 73 65  TE: Save for use
c3c0: 20 62 79 20 46 69 6e 69 73 68 42 61 63 6b 75 70   by FinishBackup
c3d0: 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  . */....        
c3e0: 69 66 20 28 6e 20 3d 3d 20 28 69 6e 74 29 53 51  if (n == (int)SQ
c3f0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
c400: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
c410: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c420: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
c430: 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20  }..        else 
c440: 69 66 20 28 6e 20 3d 3d 20 28 69 6e 74 29 53 51  if (n == (int)SQ
c450: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75  LiteErrorCode.Bu
c460: 73 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  sy)..        {..
c470: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72              retr
c480: 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
c490: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
c4a0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
c4b0: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
c4c0: 28 6e 20 3d 3d 20 28 69 6e 74 29 53 51 4c 69 74  (n == (int)SQLit
c4d0: 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65  eErrorCode.Locke
c4e0: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
c4f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72 79             retry
c500: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
c510: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
c520: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
c530: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
c540: 6e 20 3d 3d 20 28 69 6e 74 29 53 51 4c 69 74 65  n == (int)SQLite
c550: 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 0d  ErrorCode.Done).
c560: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
c570: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
c580: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  alse;..        }
c590: 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a  ..        else..
c5a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c5b0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
c5c0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
c5d0: 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72  (n, SQLiteLastEr
c5e0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
c5f0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
c600: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
c610: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
c620: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
c630: 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f  ges remaining to
c640: 20 62 65 20 63 6f 70 69 65 64 20 66 72 6f 6d 20   be copied from 
c650: 74 68 65 20 73 6f 75 72 63 65 0d 0a 20 20 20 20  the source..    
c660: 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 74 6f 20  /// database to 
c670: 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  the destination 
c680: 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
c690: 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65  ted with the spe
c6a0: 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  cified..    /// 
c6b0: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a  backup object...
c6c0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
c6d0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
c6e0: 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22  am name="backup"
c6f0: 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65  >The backup obje
c700: 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61  ct to check.</pa
c710: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
c720: 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65  eturns>The numbe
c730: 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69  r of pages remai
c740: 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65  ning to be copie
c750: 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  d.</returns>..  
c760: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
c770: 69 64 65 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e  ide int Remainin
c780: 67 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  gBackup(..      
c790: 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62    SQLiteBackup b
c7a0: 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29  ackup..        )
c7b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
c7c0: 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e   if (backup == n
c7d0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
c7e0: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
c7f0: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
c800: 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a  n("backup");....
c810: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
c820: 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c  ckupHandle handl
c830: 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69  e = backup._sqli
c840: 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20  te_backup;....  
c850: 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
c860: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
c870: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
c880: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
c890: 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
c8b0: 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
c8c0: 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
c8d0: 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
c8e0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
c8f0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
c900: 74 65 33 5f 62 61 63 6b 75 70 5f 72 65 6d 61 69  te3_backup_remai
c910: 6e 69 6e 67 28 68 61 6e 64 6c 65 29 3b 0d 0a 20  ning(handle);.. 
c920: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
c930: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
c940: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 74  // Returns the t
c950: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70  otal number of p
c960: 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72  ages in the sour
c970: 63 65 20 64 61 74 61 62 61 73 65 20 61 73 73 6f  ce database asso
c980: 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  ciated..    /// 
c990: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
c9a0: 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  ed backup object
c9b0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
c9c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
c9d0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
c9e0: 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
c9f0: 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c  bject to check.<
ca00: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
ca10: 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 74 6f   <returns>The to
ca20: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  tal number of pa
ca30: 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63  ges in the sourc
ca40: 65 20 64 61 74 61 62 61 73 65 2e 3c 2f 72 65 74  e database.</ret
ca50: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
ca60: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
ca70: 20 50 61 67 65 43 6f 75 6e 74 42 61 63 6b 75 70   PageCountBackup
ca80: 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
ca90: 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a  eBackup backup..
caa0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
cab0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61  ..        if (ba
cac0: 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ckup == null).. 
cad0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
cae0: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
caf0: 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b  lException("back
cb00: 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  up");....       
cb10: 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
cb20: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63  dle handle = bac
cb30: 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b  kup._sqlite_back
cb40: 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  up;....        i
cb50: 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  f (handle == nul
cb60: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
cb70: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
cb80: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
cb90: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
cba0: 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
cbb0: 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
cbc0: 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
cbd0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
cbe0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
cbf0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
cc00: 6b 75 70 5f 70 61 67 65 63 6f 75 6e 74 28 68 61  kup_pagecount(ha
cc10: 6e 64 6c 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ndle);..    }...
cc20: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
cc30: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74  y>..    /// Dest
cc40: 72 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70 20  roys the backup 
cc50: 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20  object, rolling 
cc60: 62 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20  back any backup 
cc70: 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a  that may be in..
cc80: 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e      /// progess.
cc90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
cca0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
ccb0: 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75  aram name="backu
ccc0: 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62  p">The backup ob
ccd0: 6a 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e  ject to destroy.
cce0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
ccf0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
cd00: 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75  void FinishBacku
cd10: 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
cd20: 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d  teBackup backup.
cd30: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
cd40: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62  {..        if (b
cd50: 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ackup == null)..
cd60: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
cd70: 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
cd80: 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63  llException("bac
cd90: 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  kup");....      
cda0: 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61    SQLiteBackupHa
cdb0: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61  ndle handle = ba
cdc0: 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63  ckup._sqlite_bac
cdd0: 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  kup;....        
cde0: 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75  if (handle == nu
cdf0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
ce00: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
ce10: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
ce20: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
ce30: 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
ce40: 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
ce50: 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
ce60: 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  ...        int n
ce70: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
ce80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
ce90: 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 68 61 6e  ackup_finish(han
cea0: 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 68  dle);..        h
ceb0: 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65 41  andle.SetHandleA
cec0: 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a 20  sInvalid();.... 
ced0: 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3e 20         if ((n > 
cee0: 30 29 20 26 26 20 28 6e 20 21 3d 20 62 61 63 6b  0) && (n != back
cef0: 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29  up._stepResult))
cf00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
cf10: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
cf20: 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74  ception(n, SQLit
cf30: 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  eLastError());..
cf40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
cf50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cfa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
cfb0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
cfc0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72  >..    /// Deter
cfd0: 6d 69 6e 65 73 20 69 66 20 74 68 65 20 53 51 4c  mines if the SQL
cfe0: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
cff0: 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61   has been initia
d000: 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a 20  lized for the.. 
d010: 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70     /// current p
d020: 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
d030: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
d040: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
d050: 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61      /// A boolea
d060: 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  n indicating whe
d070: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
d080: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
d090: 61 72 79 20 68 61 73 20 62 65 65 6e 0d 0a 20 20  ary has been..  
d0a0: 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65    /// initialize
d0b0: 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
d0c0: 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
d0d0: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
d0e0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d0f0: 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 49 6e 69  rride bool IsIni
d100: 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20  tialized()..    
d110: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
d120: 6e 20 53 74 61 74 69 63 49 73 49 6e 69 74 69 61  n StaticIsInitia
d130: 6c 69 7a 65 64 28 29 3b 0d 0a 20 20 20 20 7d 0d  lized();..    }.
d140: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
d150: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65  ary>..    /// De
d160: 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20  termines if the 
d170: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
d180: 61 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69  ary has been ini
d190: 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65  tialized for the
d1a0: 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e  ..    /// curren
d1b0: 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
d1c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
d1d0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
d1e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f  >..    /// A boo
d1f0: 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20  lean indicating 
d200: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
d210: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
d220: 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d  ibrary has been.
d230: 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c  .    /// initial
d240: 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75 72  ized for the cur
d250: 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process... 
d260: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
d270: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
d280: 73 74 61 74 69 63 20 62 6f 6f 6c 20 53 74 61 74  static bool Stat
d290: 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  icIsInitialized(
d2a0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
d2b0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
d2c0: 20 42 55 47 46 49 58 3a 20 50 72 65 76 65 6e 74   BUGFIX: Prevent
d2d0: 20 72 61 63 65 73 20 77 69 74 68 20 6f 74 68 65   races with othe
d2e0: 72 20 74 68 72 65 61 64 73 20 66 6f 72 20 74 68  r threads for th
d2f0: 69 73 20 65 6e 74 69 72 65 20 62 6c 6f 63 6b 2c  is entire block,
d300: 20 64 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   due..        //
d310: 20 20 20 20 20 20 20 20 20 74 6f 20 74 68 65 20           to the 
d320: 74 72 79 2f 66 69 6e 61 6c 6c 79 20 73 65 6d 61  try/finally sema
d330: 6e 74 69 63 73 2e 20 20 53 65 65 20 74 69 63 6b  ntics.  See tick
d340: 65 74 20 5b 37 32 39 30 35 63 39 61 37 37 5d 2e  et [72905c9a77].
d350: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
d360: 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63        lock (sync
d370: 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 7b  Root)..        {
d380: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
d390: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
d3a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
d3b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
d3c0: 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20   NOTE: Save the 
d3d0: 73 74 61 74 65 20 6f 66 20 74 68 65 20 6c 6f 67  state of the log
d3e0: 67 69 6e 67 20 63 6c 61 73 73 20 61 6e 64 20 74  ging class and t
d3f0: 68 65 6e 20 72 65 73 74 6f 72 65 20 69 74 0d 0a  hen restore it..
d400: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
d410: 20 20 20 20 20 61 66 74 65 72 20 77 65 20 61 72       after we ar
d420: 65 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20  e done to avoid 
d430: 6c 6f 67 67 69 6e 67 20 74 6f 6f 20 6d 61 6e 79  logging too many
d440: 20 66 61 6c 73 65 20 65 72 72 6f 72 73 2e 0d 0a   false errors...
d450: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
d460: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
d470: 20 73 61 76 65 64 45 6e 61 62 6c 65 64 20 3d 20   savedEnabled = 
d480: 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65  SQLiteLog.Enable
d490: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
d4a0: 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65  SQLiteLog.Enable
d4b0: 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  d = false;....  
d4c0: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
d4d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 65             {..#e
d4e0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
d4f0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
d500: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
d510: 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20 5b  E: This method [
d520: 61 62 5d 75 73 65 73 20 74 68 65 20 66 61 63 74  ab]uses the fact
d530: 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c   that SQLite wil
d540: 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20  l always..      
d550: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
d560: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
d570: 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79 20 75  _ERROR for any u
d580: 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72 61  nknown configura
d590: 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20 20  tion option..   
d5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
d5b0: 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20 74        *unless* t
d5c0: 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
d5d0: 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  y has already be
d5e0: 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0d  en initialized..
d5f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d600: 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74 68 61   //       In tha
d610: 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c 20 61  t case it will a
d620: 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53 51 4c  lways return SQL
d630: 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20 20  ITE_MISUSE...   
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
d650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d660: 20 69 6e 74 20 72 63 20 3d 20 55 6e 73 61 66 65   int rc = Unsafe
d670: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d680: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 0d 0a 20  lite3_config(.. 
d690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6a0: 20 20 20 28 69 6e 74 29 53 51 4c 69 74 65 43 6f     (int)SQLiteCo
d6b0: 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  nfigOpsEnum.SQLI
d6c0: 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45 2c 20  TE_CONFIG_NONE, 
d6d0: 6e 75 6c 6c 2c 20 28 49 6e 74 50 74 72 29 30 29  null, (IntPtr)0)
d6e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
d6f0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 72 63 20       return (rc 
d700: 3d 3d 20 2f 2a 20 53 51 4c 49 54 45 5f 4d 49 53  == /* SQLITE_MIS
d710: 55 53 45 20 2a 2f 20 32 31 29 3b 0d 0a 23 69 66  USE */ 21);..#if
d720: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
d730: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
d740: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d750: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
d760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d780: 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65  SQLiteLog.Enable
d790: 64 20 3d 20 73 61 76 65 64 45 6e 61 62 6c 65 64  d = savedEnabled
d7a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
d7b0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
d7c0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
d7d0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
d7e0: 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20  .    /// Helper 
d7f0: 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74 72  function to retr
d800: 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66  ieve a column of
d810: 20 64 61 74 61 20 66 72 6f 6d 20 61 6e 20 61 63   data from an ac
d820: 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d  tive statement..
d830: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
d840: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
d850: 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e  ram name="stmt">
d860: 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  The statement be
d870: 69 6e 67 20 73 74 65 70 28 29 27 64 20 74 68 72  ing step()'d thr
d880: 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ough</param>..  
d890: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
d8a0: 65 3d 22 69 6e 64 65 78 22 3e 54 68 65 20 63 6f  e="index">The co
d8b0: 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72 65  lumn index to re
d8c0: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a  trieve</param>..
d8d0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
d8e0: 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74 79  ame="typ">The ty
d8f0: 70 65 20 6f 66 20 64 61 74 61 20 63 6f 6e 74 61  pe of data conta
d900: 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75  ined in the colu
d910: 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74 69 61  mn.  If Uninitia
d920: 6c 69 7a 65 64 2c 20 74 68 69 73 20 66 75 6e 63  lized, this func
d930: 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69 65  tion will retrie
d940: 76 65 20 74 68 65 20 64 61 74 61 74 79 70 65 20  ve the datatype 
d950: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61  information.</pa
d960: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
d970: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 74  eturns>Returns t
d980: 68 65 20 64 61 74 61 20 69 6e 20 74 68 65 20 63  he data in the c
d990: 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d  olumn</returns>.
d9a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d9b0: 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65  erride object Ge
d9c0: 74 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61  tValue(SQLiteSta
d9d0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
d9e0: 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54 79   index, SQLiteTy
d9f0: 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a  pe typ)..    {..
da00: 20 20 20 20 20 20 69 66 20 28 49 73 4e 75 6c 6c        if (IsNull
da10: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 20 72  (stmt, index)) r
da20: 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c  eturn DBNull.Val
da30: 75 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 41  ue;..      TypeA
da40: 66 66 69 6e 69 74 79 20 61 66 66 20 3d 20 74 79  ffinity aff = ty
da50: 70 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20  p.Affinity;..   
da60: 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c     Type t = null
da70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 74  ;....      if (t
da80: 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79 70  yp.Type != DbTyp
da90: 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20  e.Object)..     
daa0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d 20   {..        t = 
dab0: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51  SQLiteConvert.SQ
dac0: 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 74  LiteTypeToType(t
dad0: 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61 66  yp);..        af
dae0: 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e 69  f = TypeToAffini
daf0: 74 79 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ty(t);..      }.
db00: 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20  ...      switch 
db10: 28 61 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  (aff)..      {..
db20: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
db30: 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d  eAffinity.Blob:.
db40: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
db50: 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70  yp.Type == DbTyp
db60: 65 2e 47 75 69 64 20 26 26 20 74 79 70 2e 41 66  e.Guid && typ.Af
db70: 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66  finity == TypeAf
db80: 66 69 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20 20  finity.Text)..  
db90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
dba0: 20 6e 65 77 20 47 75 69 64 28 47 65 74 54 65 78   new Guid(GetTex
dbb0: 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b  t(stmt, index));
dbc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e  ....          in
dbd0: 74 20 6e 20 3d 20 28 69 6e 74 29 47 65 74 42 79  t n = (int)GetBy
dbe0: 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c  tes(stmt, index,
dbf0: 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b   0, null, 0, 0);
dc00: 0d 0a 20 20 20 20 20 20 20 20 20 20 62 79 74 65  ..          byte
dc10: 5b 5d 20 62 20 3d 20 6e 65 77 20 62 79 74 65 5b  [] b = new byte[
dc20: 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 47  n];..          G
dc30: 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e  etBytes(stmt, in
dc40: 64 65 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29  dex, 0, b, 0, n)
dc50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
dc60: 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44  f (typ.Type == D
dc70: 62 54 79 70 65 2e 47 75 69 64 20 26 26 20 6e 20  bType.Guid && n 
dc80: 3d 3d 20 31 36 29 0d 0a 20 20 20 20 20 20 20 20  == 16)..        
dc90: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47      return new G
dca0: 75 69 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  uid(b);....     
dcb0: 20 20 20 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a       return b;..
dcc0: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
dcd0: 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69  eAffinity.DateTi
dce0: 6d 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  me:..          r
dcf0: 65 74 75 72 6e 20 47 65 74 44 61 74 65 54 69 6d  eturn GetDateTim
dd00: 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e(stmt, index);.
dd10: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
dd20: 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c  peAffinity.Doubl
dd30: 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  e:..          if
dd40: 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74   (t == null) ret
dd50: 75 72 6e 20 47 65 74 44 6f 75 62 6c 65 28 73 74  urn GetDouble(st
dd60: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
dd70: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
dd80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
dd90: 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79  Convert.ChangeTy
dda0: 70 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74 6d  pe(GetDouble(stm
ddb0: 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75  t, index), t, nu
ddc0: 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  ll);..        ca
ddd0: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
dde0: 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20  Int64:..        
ddf0: 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29    if (t == null)
de00: 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36 34   return GetInt64
de10: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
de20: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
de30: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
de40: 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67  rn Convert.Chang
de50: 65 54 79 70 65 28 47 65 74 49 6e 74 36 34 28 73  eType(GetInt64(s
de60: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20  tmt, index), t, 
de70: 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  null);..        
de80: 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20  default:..      
de90: 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 54 65      return GetTe
dea0: 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  xt(stmt, index);
deb0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
dec0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
ded0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65   override int Ge
dee0: 74 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65 28  tCursorForTable(
def0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
df00: 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e  stmt, int db, in
df10: 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20  t rootPage)..   
df20: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
df30: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
df40: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
df50: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
df60: 65 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72 28  e3_table_cursor(
df70: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
df80: 74 2c 20 64 62 2c 20 72 6f 6f 74 50 61 67 65 29  t, db, rootPage)
df90: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
dfa0: 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64  return -1;..#end
dfb0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
dfc0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
dfd0: 64 65 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64  de long GetRowId
dfe0: 46 6f 72 43 75 72 73 6f 72 28 53 51 4c 69 74 65  ForCursor(SQLite
dff0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
e000: 69 6e 74 20 63 75 72 73 6f 72 29 0d 0a 20 20 20  int cursor)..   
e010: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
e020: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
e030: 6c 6f 6e 67 20 72 6f 77 69 64 3b 0d 0a 20 20 20  long rowid;..   
e040: 20 20 20 69 6e 74 20 72 63 20 3d 20 55 6e 73 61     int rc = Unsa
e050: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e060: 73 71 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72  sqlite3_cursor_r
e070: 6f 77 69 64 28 73 74 6d 74 2e 5f 73 71 6c 69 74  owid(stmt._sqlit
e080: 65 5f 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20  e_stmt, cursor, 
e090: 6f 75 74 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20  out rowid);..   
e0a0: 20 20 20 69 66 20 28 72 63 20 3d 3d 20 30 29 20     if (rc == 0) 
e0b0: 72 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d  return rowid;...
e0c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b  .      return 0;
e0d0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
e0e0: 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66  eturn 0;..#endif
e0f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
e100: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
e110: 20 76 6f 69 64 20 47 65 74 49 6e 64 65 78 43 6f   void GetIndexCo
e120: 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f  lumnExtendedInfo
e130: 28 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65  (string database
e140: 2c 20 73 74 72 69 6e 67 20 69 6e 64 65 78 2c 20  , string index, 
e150: 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f  string column, o
e160: 75 74 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c  ut int sortMode,
e170: 20 6f 75 74 20 69 6e 74 20 6f 6e 45 72 72 6f 72   out int onError
e180: 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c  , out string col
e190: 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d  lationSequence).
e1a0: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
e1b0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
e1c0: 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 3b      IntPtr coll;
e1d0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c  ..      int coll
e1e0: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  len;..      int 
e1f0: 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 63 20  rc;....      rc 
e200: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
e210: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e  thods.sqlite3_in
e220: 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f  dex_column_info_
e230: 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f  interop(_sql, To
e240: 55 54 46 38 28 64 61 74 61 62 61 73 65 29 2c 20  UTF8(database), 
e250: 54 6f 55 54 46 38 28 69 6e 64 65 78 29 2c 20 54  ToUTF8(index), T
e260: 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f  oUTF8(column), o
e270: 75 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74  ut sortMode, out
e280: 20 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20 63 6f   onError, out co
e290: 6c 6c 2c 20 6f 75 74 20 63 6f 6c 6c 6c 65 6e 29  ll, out colllen)
e2a0: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63 20  ;..      if (rc 
e2b0: 21 3d 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20  != 0) throw new 
e2c0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
e2d0: 72 63 2c 20 22 22 29 3b 0d 0a 0d 0a 20 20 20 20  rc, "");....    
e2e0: 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65    collationSeque
e2f0: 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  nce = UTF8ToStri
e300: 6e 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e  ng(coll, colllen
e310: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
e320: 20 73 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a   sortMode = 0;..
e330: 20 20 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20        onError = 
e340: 32 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74  2;..      collat
e350: 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 22 42  ionSequence = "B
e360: 49 4e 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d  INARY";..#endif.
e370: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
e380: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
e390: 69 6e 74 20 46 69 6c 65 43 6f 6e 74 72 6f 6c 28  int FileControl(
e3a0: 73 74 72 69 6e 67 20 7a 44 62 4e 61 6d 65 2c 20  string zDbName, 
e3b0: 69 6e 74 20 6f 70 2c 20 49 6e 74 50 74 72 20 70  int op, IntPtr p
e3c0: 41 72 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  Arg)..    {..   
e3d0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
e3e0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e3f0: 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
e400: 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44 62 4e 61 6d  ol(_sql, (zDbNam
e410: 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 55  e != null) ? ToU
e420: 54 46 38 28 7a 44 62 4e 61 6d 65 29 20 3a 20 6e  TF8(zDbName) : n
e430: 75 6c 6c 2c 20 6f 70 2c 20 70 41 72 67 29 3b 0d  ull, op, pArg);.
e440: 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a  .    }..  }..}..